From 8226c674d92e5f4cc331a8b374d5146aeb5866a3 Mon Sep 17 00:00:00 2001 From: Alex <18387287+wadealexc@users.noreply.github.com> Date: Tue, 7 May 2024 11:25:34 -0400 Subject: [PATCH] chore: merge dev into testnet-holesky (#540) * fix: certora prover ci (#477) * fix: fallback args * fix: updated storage syntax * fix: off-by-one error (#479) * fix: off-by-one error strict inequality could cause funds that were part of a withdrawal in the block where `mostRecentWithdrawalTimestamp` gets set to become stuck. changing to non-strict inequality fixes the issue. * chore: add regression test for off-by-one error added a function to the harness contract to make this test possible confirmed fails with previous behavior, but passes with new behavior * chore: delete confusing test it's unclear quite what this is supposed to be checking will follow-up with a more reasonable test for what I think this is trying to do * chore: add test to check that "too early" proof fails should replace the confusingly named + deleted `testDeployEigenPodTooSoon` test * docs: reinstate contract addresses to their former glory (#478) * docs: reinstate contract addresses to their former glory * add updated contract addresses for holesky * welcome home boys, we've missed you * docs: fix typo * docs: add missing strategy contracts * feat: m2 mainnet upgrade script (#480) * feat: m2-mainnet upgrade script * chore: remove test output * feat: add upgrade queue test (#481) this commit also imports various tx-queuing-related utils * feat: fix encoding & complete M2 upgrade queuing test * chore: adjustments to ordering, use parsed address * fix: correct genesis time * fix: max restake gwei config --------- Co-authored-by: ChaoticWalrus <93558947+ChaoticWalrus@users.noreply.github.com> * feat: add m2 upgrade output file (#482) * feat: add m2 upgrade output file * fix: consistent writing + reading of deployment params naming should now be consistent, so the ExistingDeploymentParser should work with unmodified script outputs * feat: appropriately parse new implementation addresses `test_queueUpgrade` now more accurately models the upgrade, and no longer simulates implementation deployment * chore: appropriate timelock ETA * chore: add a couple more "sanity" checks these are performed after the upgrade is simulated * chore: minor testing fixes (#486) * chore: filter fork upgrade test out of default `forge t` * chore: fix flaky test this test failed when the fuzzed 'withdrawer' param collided with the sender. by pranking the sender address, the 'assume' statement at the start of the test now has its desired behavior * test: updated fork integration tests (#483) * test: clean pr for fork testing * test: upgrade tests * fix: gh secrets * fix: remove lsts that error * test: clean up fork testing (#487) --------- Co-authored-by: Alex <18387287+wadealexc@users.noreply.github.com> * chore: fork test via environment and custom foundry profile (#490) * chore: remove parallel tests * feat: trigger fork tests via env var and lower fuzz runs * mainnet fork tests are now triggered by setting the FOUNDRY_PROFILE to forktest * forktest profile uses lower fuzz runs to reduce RPC load * CI workflow is split into unit tests, integration tests, and integration forktests * fix: remove no-match from CI * fix: flaky unit test and also continue running tests if one job fails * fix: try a different job order * test: double the fork test runs since daddy alchemy is serving * docs: update integration test README with fork test info * chore: update the pragma from =0.8.12 to ^0.8.12 (#485) * chore: update the pragma from =0.8.12 to ^0.8.12 * test: add deprecated interface pragmas and fix flaky test --------- Co-authored-by: wadealexc * docs: fix broken link (#493) * fix: m2_deploy_from_scratch script for devnet (#495) * fix: m2_deploy_from_scratch script for devnet * feat: added github action to make sure deploy script is kept up-to-date * fix(github-action): missing submodules in checkout step * feat: update mainnet implementation addresses (#497) * feat: update mainnet implementation addresses additionally, add the EigenLayerBeaconOracle to table * chore: correct shortened addresses for new implementations * chore: remove duplicate entry, more consistent format * chore: link to correct commit in table * chore: holesky strats * fix: update eigenpod beacon --------- Co-authored-by: 8sunyuan * merge `m2-mainnet` into `mainnet` branch (#498) * final * fixed yml * init * add event * Update EPmgr docs with final missing functions, and update README to reflect withdrawal queue refactor! * pushn * added new storage * changed name * added logic * fixed storage gap * changed variable name * changed variable name * Update docs with latest EigenPod change * add validation; pending storage gap checks * fixed most tests * fixed * added multiple queuedwithdrawals function * made update outside of loop * add gap support; reorganize storage representation * fix syntax highlighting * fixed all tests * remove stale comments * fixed * fixed tests * init * dedupe EigenPod and Withdrawals * add README for storage validation script * fix README formatting * fixed * removed bls pubkeycompendium deployment from m2 deployment script * fix layouts for EPM and SM * event fix (#272) * made some corrections * done * added underflow handling * cleaned up all warnings * Remove Middleware from Core (#260) * remove middleware from core * remove go files from ffi * use stub * delete Prover rules for `BLSRegistryCoordinatorWithIndices` (#261) these are getting migrated to a separate repo * add weird fix * move stub to mocks * remove additional interfaces from imports * port over alexs interface change * add back whitelister * add back script per PR comment --------- Co-authored-by: steven Co-authored-by: ChaoticWalrus <93558947+ChaoticWalrus@users.noreply.github.com> * split the tests again * Revert "split the tests again" This reverts commit bf48e9d3204e5d6a16afac4c0e8b666af3b809a5. * skeleton refactor * init * Update DelegationManager.md * Update EigenPod.md * Update BeaconChainProofs.md * all tests working * cleanup * init * require cannot q withdrawal for 0 strategies and update docs * copilot crazy grammar * finished EPM unit tests * fix tree diagram typos * fix _checkPodDeployed function * split max pod revert tests * fuzz removeShares tests * update initializePodWithShares to not use stdStorage * added reg test * add error messages on asserts * tidy up * chore: have DelegationManager use stub interface instead of full interface Should help to resolve some of the import hell that we are experiencing. * initial cleanup of SM tests, added deployments to UnitTestSetup file * Using `EigenLayerUnitTestSetup` for deployment * remove middleware interfaces from this repo this commit also removes a ton of detritus from existing tests, which appears to have functionally been doing absolutely nothing. * init * change 31 to 32 * all tests working * close out tests * cleanup * fixed balance update code * rectified test * removed test import * fixed * removed other references to hysterisis * Separate into base and setup deploy contracts * made updates consistent * renamed function test names, removed unused variables * Update DelegationManager.md * chore: remove never-used storage at end of storage layout and increase __gap size to compensate This storage is at the end of the used slots in the storage layout, and was never used either on testnet or mainnet. Therefore, it should be able to be safety deleted without consequence. This commit also increases the size of the __gap variable to compensate for the removed storage. * Update EigenPod.md * clarified as effective not actual balance * removed inline comment * chore: fix compiler warnings This commit addresses a compiler warning in the DelegationManager contract, and fixes compiler warnings in various test files. These warnings were all ultimately due to unused variables. I've also added some comments to the EigenPod.t.sol file about the strange address-collision-reversion behavior that we're currently working around (since the workaround was related to an 'unused' variable). * changed proof gen repo commands * made the changes to createPod() * EigenPodManager Unit Test Refactor (#290) * skeleton refactor * finished EPM unit tests * fix tree diagram typos * fix _checkPodDeployed function * split max pod revert tests * fuzz removeShares tests * update initializePodWithShares to not use stdStorage * add error messages on asserts * fix tree file name * add share adjustment tests * create temp file for pod and pod manager unit tests * remove unused constant in EPM unit test * added fuzzing) * fixed * fixed * fixed tests * chore: fix compilation error a forbidden implicit type conversion slipped in, which was causing build errors. this minimal commit fixes the issue. * reording the indexes in-order, added a few extra comments * commenting * remove reeneterer from utils setUp() * remove strategy deployments in the setUp() helper * init * all tests working * cleanup * tidy up * added the previous PR changes to new branch * added new expectEmit checks * changes * CI err fix * chore: filter fuzzed inputs to fix 3 flaky test failures (#306) * chore: filter fuzzed inputs to fix 2 flaky test failures 1) failure in a test that appears to be due to the fuzzed 'withdrawer' matching a Strategy's address -- see run here https://github.com/Layr-Labs/eigenlayer-contracts/actions/runs/6672856290/job/18137522930#step:5:46 2) failure in a test when the fuzzed 'staker' address matches a fixed operator address which we are using (the reverting behavior is intended in this case) * fix one more flaky test failure with fuzzed input filtering this test fails (appropriately) when the `notUnpauser` input is fuzzed to the ProxyAdmin address * Fixed import errors and updated `setUp()` * Removed strategies from utils helper setup * Removed Utils.sol as its only functions is only used in StrategyManagerUnit.t.sol * formatting * Chore/fix flaky test failures (#308) * chore: filter fuzzed inputs to fix 2 flaky test failures 1) failure in a test that appears to be due to the fuzzed 'withdrawer' matching a Strategy's address -- see run here https://github.com/Layr-Labs/eigenlayer-contracts/actions/runs/6672856290/job/18137522930#step:5:46 2) failure in a test when the fuzzed 'staker' address matches a fixed operator address which we are using (the reverting behavior is intended in this case) * fix one more flaky test failure with fuzzed input filtering this test fails (appropriately) when the `notUnpauser` input is fuzzed to the ProxyAdmin address * fix one more flaky test failure this failed in the following run: https://github.com/Layr-Labs/eigenlayer-contracts/actions/runs/6697166090/job/18196461283#step:5:116 I dug into it and this was ultimately because the fuzzed `staker` param matched the ProxyAdmin address * init * Added tree file * Update README.md * Update README.md * Update README.md * Updated tree file to match code paths rather than test cases * tree branches for add/remove strategies * cleanup and typo * removed unused internal functions * check `_isDepositedStrategy()` after removing shares from all strats * chore: turn require statements into assertEq(), assertTrue(), assertFalse() * chore: changed startPrank() -> prank() where reasonable Sometimes having a wrapping startPrank() and stopPrank() code segment is useful to easily recognize which address is being pranked for those calls, especially when we prank again afterwards. That said, certain tests with single function calls could be cleaner with simply `prank()` * fix: missed stopPrank() to delete * chore: specific revert messages * chore: removed event checks, additional tests, rename variable Removed some of the StrategyAddedToDepositWhitelist event checks in the tests to cleanup. Added additional unit tests for addStrategiesToDepositWhitelist including adding already existing whitelisted strategies and ensuring events aren't emitted there. * fix: removed unneeded eigenpod doc, it's entirely captured already by EigenPodManager.md * remove balance update proof functionality * chore: github compatability and tree branching convention * add comment explaining validator fields proof for balance update * chore: remove bytes casing * test: check storage variables after intialize() * fix: tree file, nonce doesn't increment for depositIntoStrategy() * Filter addresses for EPM and EP fuzz tests (#312) * Filter proxy admin address for EPM fuzz tests * filter zero address on EP unit tests * comment out failing tests; compiling * added proofs * test: additional coverage andfilterFuzzInput modifier Tests added: - initialize() storage variables properly - depositIntoStrategyWithSignature() revert when token transfer fails - removeShares() reverts with 0 shares - removeShares() with removeAmount less than deposit - addShares() with MAX_STAKER_STRATEGY_LIST_LENGTH strategies - removeStrategiesFromDepositWhitelist() doesn't emit event on non-whitelisted strategy - removeStrategiesFromDepositWhitelist() emits event on removing whitelisted strategy Also added some small commenting, renamed tests, and updated tree file * update EigenPod unit and integration tests * update docs to reflect balance update refactor * remove unused functions from ProofParsing test util * changes * bug fix * eigenpod test file changes * changes * removed extra func * chore: migrate BitmapUtils and BN254 to middleware * chore: add correct M2 Goerli deployment info (#320) * feat(linting): add commit linter (#296) * ci(linting): apply linting to CI and update docs for it * chore: remove git-patch for applying these changes * fix: typo and mistake in git url * ci: force fail fast to be false * ci: remove fail fast behavior * ci: move fail-fast option --------- Co-authored-by: steven * EigenPod Unit Test Refactor (#317) * chore: delete unused files (#321) minor cleanup of some unused files; should help to clarify things a bit * Docs: Note edge case for not completing a queued withdrawal for EigenPod (#324) * fix: remove redudant command (#322) Co-authored-by: steven * chore: fix broken links and clean up readme (#326) * chore: use a fixed prover version (#327) Certora will be introducing v5 soon, which is expected to include breaking changes. Fixing the version at v4.13.1 should allow continuity until we make changes to upgrade. * chore: update DelegationManager docs to reflect plural queueWithdrawals function (#330) * chore: switch implementation addresses in README table to M2 versions (#328) * chore: switch implementation addresses in README table to M2 versions * chore: fix link/"preview" text for updated links * chore: fix misplaced link text (oops!) * chore: fix misplaced text for _another_ link my bad, don't know how I made this mistake 2x * test: create integration test framework (#335) See `/integration/README.md` for details on how it works --------- Co-authored-by: Yash Patil * feat: interface change for mw sigchecker * init * test: support native eth in integration tests (#340) see PR for changelog * eigenpod and eigenpodmanager integration tests (#347) * base * add base setup file * readd refactored file * pending withdrawal tests * add withdrawal test scaffold * push * finish withdrawal tests; pending additional proof sizes * remove old EigenPod unit test file; transfer integration tests to EP test file * update tree file * add tests for proofs <32 ETH * remove unused files and test comments * remove stale comment * base setup * add more base test cases * fix: update setup file pod address * buggy * test: fix setup * pause tests * some changes * test: add verify WC test * test: add withdrawal tests * nit changes --------- Co-authored-by: Yash Patil * test: implement random withdrawal generator (#349) see PR for changes/notes * Test: DelegationManager unit tests refactor (#332) * refactor: initial changes - Commented out and moved 'integration-like' withdrawal tests to Delegation.t.sol - import paths are absolute - fixed solidity version - Inheriting EigenLayerUnitTestSetup helper contract now (deploys mocks contracts, pauserRegistry, etc) * test: initial tree file * refactor: revert tree file back to # syntax while wip * test: update setup file; add initialization + setter tests * test: minor tree file updates * test: adding to tree file * test: fixed `mananger` typo * test: add register operator cases * test: add modify operator tests * test: add share adjustment tests * test: add undelegate unit tests * test: update tree file for withdrawals * test: delegateTo unit tests * fix: error from changed internal helper * test: delegateToBySignature unit tests * fix: update tree file * test: minor cleanup * test: add pausing tests * test: remove unused helper functions * test: update all tests to use defaultOperator * test: remove old tests and formatting - formatted tree file - formatted unit test file - removed old tests that have been readded and refactored - removed bytes casting for revert strings test: remove getPods file * fix: remove duplicated logic - removed assumes out of internal helpers - removed a lot of dup tree branching for readability - small nit fixes * fix: delegateToBySignature tree cleanup --------- Co-authored-by: Yash Patil * test: update eigen pod unit tests with new balance update functionality * feat: enable AVS update metadata uri (#354) * feat:enable AVS update metadata uri * test: add unit test * test: fuzz staker address != delegationApprover (#360) Failing fuzz test was result of fuzzed staker address being the same address as delegationApprover address * feat: add Certora Prover to m2-mainnet CI (#359) * fix: update rpc on withdrawal migrationt tests (#362) * Feat: Remove set withdrawal delay (#355) * feat: remove setWithdrawalDelayBlocks() removing ability to modify withdrawalDelayBlocks, will only be initialized once * fix: fixed delegation.initialize() calls - Added `initializedWithdrawalDelayBlocks` to initialize params - Added regression test for initializing> MAX_WITHDRAWAL_DELAY_BLOCKS - DelegationUnit.t.sol, small fix for internal function `_registerOperatorWith1271DelegationApprover` * chore: emit WithdrawalDelayBlocksSet * Integration Tests: Scenarios 2-3 (#350) * test: support random balance updates in integration tests (#364) - also adds user-level logging * Fix: update balance update not pod caller revert test (#366) * chore: repo cleanup (#365) - update main and docs README - update DelegationManager docs to remove method - remove stake update pushes from DelegationManager - deprecate stakeRegistry storage variable in DelegationManager - turn Slasher into a Stub - remove Slasher tests * chore: migrate to certora prover v5 (#369) - switch from fixed v4.13.1 to floating / latest version - implement minimal changes that (hopefully) make existing specs work with v5 * chore: update README, docs, and prune old files (#371) * chore: update README, docs, and prune old files * fix: add integration test reference to README * docs: fix withdrawal router comment * feat: support avs<>operator mapping with new APIs (#363) * feat: support avs<>operator mapping with new APIs and events * feat: more formal verification for eigenpods (#368) * add draft Prover rules + invariants for EigenPod contract includes new spec, script, and harness files * feat: add invariant for withdrawn validators having zero restaked balance * chore: try to tune script to fix timeout errors Prover runs for the EigenPod spec have been hitting timeouts (e.g. [here](https://prover.certora.com/output/83341/c0f1187dfb5f413caeea598ff85d82dd?anonymousKey=ee5301c2dbc2262a0d274d81ef2944c321faae0e))-- this commit is an attempt to fix these timeouts * chore: relax script parameters to try to address Prover timeouts see documentation (https://docs.certora.com/en/latest/docs/prover/cli/options.html) to understand these flags * feat: add envfree functions and a couple draft rules to EPM spec * chore: add a couple more 'envfree' functions to EigenPod spec * feat: add draft for key invariant (commented out due to compiler failures) see comments for more context on this. also included are 2 new harnessed functions * chore: remove `hashing_length_bound` in script this should make rules non-vacuous; by using different summaries we can still solve timeouts * chore: add a ton more summarization, and fix hook deals with timeouts much more effectively, and the hook works now. the `baseInvariant` rule is still broken -- see comment in the axiom definition * chore: add more dispatching and filter parametric contracts * feat: new (draft) rule to capture more of EigenPods' accounting model * fix: use correct summarization syntax * feat: hack together solution for ignoring special case the summarization of the `EigenPod. _sendETH()` function appears to still be broken I've commented this out and the rule now passes (at least from running locally), but this is definitely suboptimal am leaving several TODOs for now. * add draft Prover rules + invariants for EigenPod contract includes new spec, script, and harness files * feat: add invariant for withdrawn validators having zero restaked balance * chore: try to tune script to fix timeout errors Prover runs for the EigenPod spec have been hitting timeouts (e.g. [here](https://prover.certora.com/output/83341/c0f1187dfb5f413caeea598ff85d82dd?anonymousKey=ee5301c2dbc2262a0d274d81ef2944c321faae0e))-- this commit is an attempt to fix these timeouts * chore: relax script parameters to try to address Prover timeouts see documentation (https://docs.certora.com/en/latest/docs/prover/cli/options.html) to understand these flags * feat: add envfree functions and a couple draft rules to EPM spec * chore: add a couple more 'envfree' functions to EigenPod spec * feat: add draft for key invariant (commented out due to compiler failures) see comments for more context on this. also included are 2 new harnessed functions * chore: remove `hashing_length_bound` in script this should make rules non-vacuous; by using different summaries we can still solve timeouts * chore: add a ton more summarization, and fix hook deals with timeouts much more effectively, and the hook works now. the `baseInvariant` rule is still broken -- see comment in the axiom definition * chore: add more dispatching and filter parametric contracts * feat: new (draft) rule to capture more of EigenPods' accounting model * fix: use correct summarization syntax * feat: hack together solution for ignoring special case the summarization of the `EigenPod. _sendETH()` function appears to still be broken I've commented this out and the rule now passes (at least from running locally), but this is definitely suboptimal am leaving several TODOs for now. * chore: repo cleanup (#365) - update main and docs README - update DelegationManager docs to remove method - remove stake update pushes from DelegationManager - deprecate stakeRegistry storage variable in DelegationManager - turn Slasher into a Stub - remove Slasher tests * chore: migrate to certora prover v5 (#369) - switch from fixed v4.13.1 to floating / latest version - implement minimal changes that (hopefully) make existing specs work with v5 * add draft Prover rules + invariants for EigenPod contract includes new spec, script, and harness files * feat: add invariant for withdrawn validators having zero restaked balance * chore: try to tune script to fix timeout errors Prover runs for the EigenPod spec have been hitting timeouts (e.g. [here](https://prover.certora.com/output/83341/c0f1187dfb5f413caeea598ff85d82dd?anonymousKey=ee5301c2dbc2262a0d274d81ef2944c321faae0e))-- this commit is an attempt to fix these timeouts * chore: relax script parameters to try to address Prover timeouts see documentation (https://docs.certora.com/en/latest/docs/prover/cli/options.html) to understand these flags * feat: add envfree functions and a couple draft rules to EPM spec * chore: add a couple more 'envfree' functions to EigenPod spec * feat: add draft for key invariant (commented out due to compiler failures) see comments for more context on this. also included are 2 new harnessed functions * chore: remove `hashing_length_bound` in script this should make rules non-vacuous; by using different summaries we can still solve timeouts * chore: add a ton more summarization, and fix hook deals with timeouts much more effectively, and the hook works now. the `baseInvariant` rule is still broken -- see comment in the axiom definition * chore: add more dispatching and filter parametric contracts * feat: new (draft) rule to capture more of EigenPods' accounting model * fix: use correct summarization syntax * feat: hack together solution for ignoring special case the summarization of the `EigenPod. _sendETH()` function appears to still be broken I've commented this out and the rule now passes (at least from running locally), but this is definitely suboptimal am leaving several TODOs for now. * feat: add draft for key invariant (commented out due to compiler failures) see comments for more context on this. also included are 2 new harnessed functions * chore: add a ton more summarization, and fix hook deals with timeouts much more effectively, and the hook works now. the `baseInvariant` rule is still broken -- see comment in the axiom definition * chore: add more dispatching and filter parametric contracts * feat: new (draft) rule to capture more of EigenPods' accounting model * chore: fix merge artifacts / regen deletion of unused code --------- Co-authored-by: Alex <18387287+wadealexc@users.noreply.github.com> * fix: update docs and ensure important state changing methods are pausable (#372) * docs: update eigenpod docs and add new dmgr functions * docs: update createPod function sig * chore: ensure complete coverage of pausability * Test: Add back missing withdrawal tests to DelegationUnit.t.sol (#370) * test: revert tests * test: withdrawal tests * chore: rename helper * fix: several typos in the docs (#356) * fix typo EigenPodManager.md * fix typo AVS-Guide.md * fix typo DeployOpenEigenLayer.s.sol * fix typo README.md --------- Co-authored-by: ChaoticWalrus <93558947+ChaoticWalrus@users.noreply.github.com> * remove munged (#373) * fix: make Prover CI run correctly (#376) * Documentation Fixes: Grammar, Typos, and Prepositions (#377) * fix typo: Change 'now' to 'more' in EigenLayer middleware documentation link description * fix missing preposition in documentation: change 'according the their' to 'according to their' * fixed grammatical errors in documentation: Changed 'lets' to 'let's' and 'who's' to 'whose' in the example sentence about Merkle trees * made forceUndelegate queue a withdrawal for each strategy (#345) * changes * added back comments * chore: fix tests to work with modified behavior (#378) * chore: fix tests to work with modified behavior integration tests in particular are now slightly more flexible * fix: remove memory overwrite * docs: update dmgr docs --------- Co-authored-by: wadealexc --------- Co-authored-by: ChaoticWalrus <93558947+ChaoticWalrus@users.noreply.github.com> Co-authored-by: wadealexc * Fix m2 deploy from scratch script m2 mainnet (#379) * remove slasher checks from M2_Deploy_From_Scratch as they are no longer valid for m2-mainnet release * update anvil config file for M2_deploy_from_scratch script to work * Test: Delegation Integration tests (#358) * Fix: flaky integration tests (#384) * docs: update deployment lists for new mainnet and testnet strats (#404) * fixed comment * fix: update links in outdated issue templates (#390) * feat: add m2-mainnet-fixes to m2-mainnet (#409) * Fix: Update registration documentation & type hash (#383) * feat: strategy configs (#392) * Fix: flaky integration tests (#384) * feat: strat settings * Fix: flaky integration tests (#384) * feat: strat settings * feat: withdrawalDelayBlocks per strategy * fix: set deprecated storage to private * fix: pr review changes * fix: require string * docs: updated * refactor: rename creditTransfersDisabled * fix: doc typos * docs: add new methods and fix formatting * fix: nits and getWithdrawals view * docs: add link --------- Co-authored-by: Yash Patil <40046473+ypatil12@users.noreply.github.com> Co-authored-by: wadealexc * fix: update forge CI to include contract size checks (#402) * fix: add contract size check * fix: ignore harness build size * refactor: decouple AVS<>Operator mapping from DelegationManager (#403) * refactor: initial draft * fix: revert require chages * fix: small nits * fix: operator<>AVS mapping tests (#407) * test: added back avsRegistration tests * fix: fuzz runs 4096 * fix: broken fuzz test * docs: add docs for AVSDirectory (#408) * Feat: Add events for beacon chain balance updates & move deposit event * script update (#412) * fix: middleware script (#414) * Deneb Mainnet Patch (#395) * init commit * updated testFullWithdrawalFlow to deneb spec * added two proof paths * added both capella and deneb testS * added testFullWithdrawalFlowCapellaWithdrawalAgainstDenebRoot * added event * fixed storage gap * uncommented testsg * fix: remove line * fixed tesst * added a setter in the EPM for deneForkTimetamp * tests still broken * cleanup * added modifier * fixing tests * tests working * added tests * comments * fixed failing test * fix flaky test * removed modifier --------- Co-authored-by: gpsanant * feat: simplify fork timestamp setting logic (#416) * feat: simplify fork timestamp setting logic * test: fix tests to account for only setting timestamp once --------- Co-authored-by: wadealexc * Goerli implementation script (#413) * Create GoerliUpgrade2.s.sol * preprod deploy * Update GV2_preprod_deployment_2024_30_1.json * nit: comments * avs directory already deployed * preprod deploy * chore: fix numerous compiler warnings from script + test files (#419) warnings were for unused or shadowed variables, or functions that could have stricter mutability * docs: fixed comment * Revert "fixed comment" This reverts commit c3d7bff04ca5c980068286264e63f1719e0d0c0c. * Fixed comments (#422) * fix: fixed comment * fix: removed dead space * fix: removed extraneous the * fix: edited another comment * feat: view func for avssync (#423) * fix: failing certora-ci (#410) * fix: try installing solc-select * fix: addShares selector * fix: add staker address to DEPOSIT typehash (#424) This provides additional signature replay protection for the `StrategyManager.depositIntoStrategyWithSignature` method Specifically, it addresses the issue outlined in https://mirror.xyz/curiousapple.eth/pFqAdW2LiJ-6S4sg_u1z08k4vK6BCJ33LcyXpnNb8yU where some ERC1271 wallets might be vulnerable to "replays" of signatures While the theoretical "damage" would be ~zero (allowing someone to deposit and credit the deposit to a user), adding this field to the typehash seems to be best practice, at least. * Testnet Deploy (#425) * fix: updated beacon chain proof docs and correct error message (#427) * fix: updated doc * fix: changed more incorrect references fo verifyBalanceUpdates * fix: changed more incorrect references fo verifyBalanceUpdates * fix: fixed image * fix: fixed incorrect comment * docs: fix formatting --------- Co-authored-by: wadealexc * feat: slight refactor to make better use of strategybase hooks (#428) * feat: slight refactor to make better use of strategybase hooks * docs: add clarifying comment * test: unit tests for strat config (#426) * fix: use correct license (#431) this should be MIT licensed; looks like this was missed * docs: update README to point to deployment info (#432) * fix: include missing field from TYPEHASH calculation (#435) `delegationApprover` was missing from the `DELEGATION_APPROVAL_TYPEHASH` definition * fix: disable initializers in constructor (#436) * chore: beacon proof constants cleanup (#437) * fix: removed misc constants * feat: prevent queuing withdrawals to other addresses (#438) * fix: add back setMinWithdrawalDelayBlocks (#439) * fix:add back withdrawal delay * docs: update docs with new function --------- Co-authored-by: wadealexc * feat: cancel AVS registration salt (#434) * feat: cancel salt * fix: require that salt cannot be cancelled twice --------- Co-authored-by: wadealexc * test: fix borked test after rebase --------- Co-authored-by: Yash Patil <40046473+ypatil12@users.noreply.github.com> Co-authored-by: Michael Sun <35479365+8sunyuan@users.noreply.github.com> Co-authored-by: quaq <56312047+0x0aa0@users.noreply.github.com> Co-authored-by: kachapah <60323455+Sidu28@users.noreply.github.com> Co-authored-by: gpsanant Co-authored-by: ChaoticWalrus <93558947+ChaoticWalrus@users.noreply.github.com> Co-authored-by: SiddyJ * docs: add common user flows to docs (#445) * updated m2_deploy_from_scratch to use avsDirectory (#449) * test: fix flaky delegation approver test (#450) * chore: update license (#451) - clarify wording about change dates - rename the "licensed work" for greater specificity * chore: Cleanup script/ directory (#454) * chore: spring cleaning * fix: test deployment path * chore: revert back to relative paths * docs: add sigP report (#460) * fix(ci): pin commitlint version (#466) * feat: track active validator count in pods (#474) * chore: remove maxPods (#463) * chore: remove maxPods * docs: update docs * refactor: set to private * feat: holesky deploy scripts (#473) * script: parser script helpers * feat: holesky deploy scripts * fix: config * fix: ops multisig whitelister * feat: track active validator count in pods (#474) * chore: remove maxPods (#463) * chore: remove maxPods * docs: update docs * refactor: set to private * script: parser script helpers * feat: holesky deploy scripts * fix: config * fix: ops multisig whitelister * refactor: maxpods removal * feat: preprod deployment * refactor: reuse other script --------- Co-authored-by: Alex <18387287+wadealexc@users.noreply.github.com> * fix: certora prover ci (#477) * fix: fallback args * fix: updated storage syntax * fix: off-by-one error (#479) * fix: off-by-one error strict inequality could cause funds that were part of a withdrawal in the block where `mostRecentWithdrawalTimestamp` gets set to become stuck. changing to non-strict inequality fixes the issue. * chore: add regression test for off-by-one error added a function to the harness contract to make this test possible confirmed fails with previous behavior, but passes with new behavior * chore: delete confusing test it's unclear quite what this is supposed to be checking will follow-up with a more reasonable test for what I think this is trying to do * chore: add test to check that "too early" proof fails should replace the confusingly named + deleted `testDeployEigenPodTooSoon` test * docs: reinstate contract addresses to their former glory (#478) * docs: reinstate contract addresses to their former glory * add updated contract addresses for holesky * welcome home boys, we've missed you * docs: fix typo * docs: add missing strategy contracts * feat: m2 mainnet upgrade script (#480) * feat: m2-mainnet upgrade script * chore: remove test output * feat: add upgrade queue test (#481) this commit also imports various tx-queuing-related utils * feat: fix encoding & complete M2 upgrade queuing test * chore: adjustments to ordering, use parsed address * fix: correct genesis time * fix: max restake gwei config --------- Co-authored-by: ChaoticWalrus <93558947+ChaoticWalrus@users.noreply.github.com> * merge `dev` into `m2-mainnet` branch (#499) * feat: add m2 upgrade output file (#482) * feat: add m2 upgrade output file * fix: consistent writing + reading of deployment params naming should now be consistent, so the ExistingDeploymentParser should work with unmodified script outputs * feat: appropriately parse new implementation addresses `test_queueUpgrade` now more accurately models the upgrade, and no longer simulates implementation deployment * chore: appropriate timelock ETA * chore: add a couple more "sanity" checks these are performed after the upgrade is simulated * chore: minor testing fixes (#486) * chore: filter fork upgrade test out of default `forge t` * chore: fix flaky test this test failed when the fuzzed 'withdrawer' param collided with the sender. by pranking the sender address, the 'assume' statement at the start of the test now has its desired behavior * test: updated fork integration tests (#483) * test: clean pr for fork testing * test: upgrade tests * fix: gh secrets * fix: remove lsts that error * test: clean up fork testing (#487) --------- Co-authored-by: Alex <18387287+wadealexc@users.noreply.github.com> * chore: fork test via environment and custom foundry profile (#490) * chore: remove parallel tests * feat: trigger fork tests via env var and lower fuzz runs * mainnet fork tests are now triggered by setting the FOUNDRY_PROFILE to forktest * forktest profile uses lower fuzz runs to reduce RPC load * CI workflow is split into unit tests, integration tests, and integration forktests * fix: remove no-match from CI * fix: flaky unit test and also continue running tests if one job fails * fix: try a different job order * test: double the fork test runs since daddy alchemy is serving * docs: update integration test README with fork test info * chore: update the pragma from =0.8.12 to ^0.8.12 (#485) * chore: update the pragma from =0.8.12 to ^0.8.12 * test: add deprecated interface pragmas and fix flaky test --------- Co-authored-by: wadealexc * docs: fix broken link (#493) * fix: m2_deploy_from_scratch script for devnet (#495) * fix: m2_deploy_from_scratch script for devnet * feat: added github action to make sure deploy script is kept up-to-date * fix(github-action): missing submodules in checkout step * feat: update mainnet implementation addresses (#497) * feat: update mainnet implementation addresses additionally, add the EigenLayerBeaconOracle to table * chore: correct shortened addresses for new implementations * chore: remove duplicate entry, more consistent format * chore: link to correct commit in table * chore: holesky strats * fix: update eigenpod beacon --------- Co-authored-by: 8sunyuan --------- Co-authored-by: Michael Sun <35479365+8sunyuan@users.noreply.github.com> Co-authored-by: Alex <18387287+wadealexc@users.noreply.github.com> Co-authored-by: steven <12021290+stevennevins@users.noreply.github.com> Co-authored-by: wadealexc Co-authored-by: Samuel Laferriere Co-authored-by: 8sunyuan --------- Co-authored-by: sidu28 <60323455+Sidu28@users.noreply.github.com> Co-authored-by: Yash Patil <40046473+ypatil12@users.noreply.github.com> Co-authored-by: gpsanant Co-authored-by: Gautham Anant <32277907+gpsanant@users.noreply.github.com> Co-authored-by: wadealexc Co-authored-by: Yash Patil Co-authored-by: Alex <18387287+wadealexc@users.noreply.github.com> Co-authored-by: Samuel Laferriere Co-authored-by: quaq <56312047+0x0aa0@users.noreply.github.com> Co-authored-by: steven <12021290+stevennevins@users.noreply.github.com> Co-authored-by: steven Co-authored-by: pandabadger <33740825+pandabadger@users.noreply.github.com> Co-authored-by: 8sunyuan Co-authored-by: Gajesh Naik Co-authored-by: Michael Sun <35479365+8sunyuan@users.noreply.github.com> Co-authored-by: Bowen Li Co-authored-by: iwantanode <87604944+tudorpintea999@users.noreply.github.com> Co-authored-by: teryanarmen <61996358+teryanarmen@users.noreply.github.com> Co-authored-by: joao <22820692+joaolago1113@users.noreply.github.com> Co-authored-by: SiddyJ Co-authored-by: Peter Straus <153843855+krauspt@users.noreply.github.com> * feat: add script for unpausing deposits (#496) * chore: add avs directory to README (#506) * docs: remove m1 references and clean deployment table (#508) * docs: remove outdated m1 references * docs: remove unneeded column and shorten avg column length * docs: expand proxy addresses in table * docs: separate tables into sections for visual clarity * docs: add beacon chain eth to strategies section * chore: add cantina report and rename files for clarity (#526) * chore: cleanup script for generating bindings (#532) update readme Add setup step to readme * chore: add token contracts (#535) * add token contracts * write eigen strategy script * deploy on holesky and update mainnet config * chore: add token deploy script (#536) * write eigen strategy script * deploy on holesky and update mainnet config * fix pragmas * add to readme * fix nit * label strategy * add header * add eigen/beigen to readme * docs: fix typo in README and gen bindings for token contracts * chore: gen bindings --------- Co-authored-by: wadealexc * chore: fix merge conflicts for dev merge (#541) * fix: whitelist strategies * feat: deploy output --------- Co-authored-by: 8sunyuan --------- Co-authored-by: Michael Sun <35479365+8sunyuan@users.noreply.github.com> Co-authored-by: ChaoticWalrus <93558947+ChaoticWalrus@users.noreply.github.com> Co-authored-by: steven <12021290+stevennevins@users.noreply.github.com> Co-authored-by: Samuel Laferriere Co-authored-by: 8sunyuan Co-authored-by: sidu28 <60323455+Sidu28@users.noreply.github.com> Co-authored-by: Yash Patil <40046473+ypatil12@users.noreply.github.com> Co-authored-by: gpsanant Co-authored-by: Gautham Anant <32277907+gpsanant@users.noreply.github.com> Co-authored-by: Yash Patil Co-authored-by: quaq <56312047+0x0aa0@users.noreply.github.com> Co-authored-by: steven Co-authored-by: pandabadger <33740825+pandabadger@users.noreply.github.com> Co-authored-by: Gajesh Naik Co-authored-by: Bowen Li Co-authored-by: iwantanode <87604944+tudorpintea999@users.noreply.github.com> Co-authored-by: teryanarmen <61996358+teryanarmen@users.noreply.github.com> Co-authored-by: joao <22820692+joaolago1113@users.noreply.github.com> Co-authored-by: SiddyJ Co-authored-by: Peter Straus <153843855+krauspt@users.noreply.github.com> Co-authored-by: Sean McGary --- .github/workflows/check-compilation.yml | 30 + .github/workflows/run-deploy-scripts.yml | 38 + .github/workflows/testinparallel.yml | 23 +- .gitignore | 4 +- .gitmodules | 6 + Makefile | 19 + README.md | 160 +- .../M1 Mainnet - Diligence - Mar 2023.pdf | Bin ...> M1 Mainnet - Sigma Prime - May 2023.pdf} | Bin audits/M2 Mainnet - Cantina - Apr 2024.pdf | Bin 0 -> 738987 bytes ...> M2 Mainnet - Sigma Prime - Feb 2024.pdf} | Bin .../harnesses/DelegationManagerHarness.sol | 4 +- certora/harnesses/EigenPodHarness.sol | 4 +- certora/harnesses/EigenPodManagerHarness.sol | 4 +- certora/harnesses/PausableHarness.sol | 4 +- certora/harnesses/SlasherHarness.sol | 4 +- certora/harnesses/StrategyManagerHarness.sol | 4 +- .../scripts/core/verifyDelegationManager.sh | 2 +- certora/scripts/core/verifyStrategyManager.sh | 2 +- .../libraries/verifyStructuredLinkedList.sh | 2 +- certora/scripts/permissions/verifyPausable.sh | 3 +- certora/scripts/pods/verifyEigenPodManager.sh | 2 +- .../scripts/strategies/verifyStrategyBase.sh | 3 +- .../specs/libraries/StructuredLinkedList.spec | 2 +- certora/specs/pods/EigenPod.spec | 2 +- docs/README.md | 2 - docs/core/AVSDirectory.md | 2 +- docs/core/DelegationManager.md | 4 +- docs/core/StrategyManager.md | 4 +- foundry.toml | 8 +- go.mod | 34 + go.sum | 192 + lib/openzeppelin-contracts-upgradeable-v4.9.0 | 1 + lib/openzeppelin-contracts-v4.9.0 | 1 + pkg/bindings/AVSDirectory/binding.go | 1793 +++++++ pkg/bindings/AVSDirectory/tmp.abi | 501 ++ pkg/bindings/AVSDirectory/tmp.bin | 1 + pkg/bindings/AVSDirectoryStorage/binding.go | 736 +++ pkg/bindings/AVSDirectoryStorage/tmp.abi | 228 + pkg/bindings/AVSDirectoryStorage/tmp.bin | 1 + pkg/bindings/BackingEigen/binding.go | 2816 +++++++++++ pkg/bindings/BackingEigen/tmp.abi | 905 ++++ pkg/bindings/BackingEigen/tmp.bin | 1 + pkg/bindings/BeaconChainProofs/binding.go | 203 + pkg/bindings/BeaconChainProofs/tmp.abi | 1 + pkg/bindings/BeaconChainProofs/tmp.bin | 1 + pkg/bindings/BytesLib/binding.go | 203 + pkg/bindings/BytesLib/tmp.abi | 1 + pkg/bindings/BytesLib/tmp.bin | 1 + .../DelayedWithdrawalRouter/binding.go | 1969 ++++++++ pkg/bindings/DelayedWithdrawalRouter/tmp.abi | 614 +++ pkg/bindings/DelayedWithdrawalRouter/tmp.bin | 1 + pkg/bindings/DelegationManager/binding.go | 4352 +++++++++++++++++ pkg/bindings/DelegationManager/tmp.abi | 1747 +++++++ pkg/bindings/DelegationManager/tmp.bin | 1 + .../DelegationManagerStorage/binding.go | 3211 ++++++++++++ pkg/bindings/DelegationManagerStorage/tmp.abi | 1394 ++++++ pkg/bindings/DelegationManagerStorage/tmp.bin | 1 + pkg/bindings/EIP1271SignatureUtils/binding.go | 203 + pkg/bindings/EIP1271SignatureUtils/tmp.abi | 1 + pkg/bindings/EIP1271SignatureUtils/tmp.bin | 1 + pkg/bindings/Eigen/binding.go | 2974 +++++++++++ pkg/bindings/Eigen/tmp.abi | 1022 ++++ pkg/bindings/Eigen/tmp.bin | 1 + pkg/bindings/EigenPod/binding.go | 2360 +++++++++ pkg/bindings/EigenPod/tmp.abi | 825 ++++ pkg/bindings/EigenPod/tmp.bin | 1 + pkg/bindings/EigenPodManager/binding.go | 2658 ++++++++++ pkg/bindings/EigenPodManager/tmp.abi | 757 +++ pkg/bindings/EigenPodManager/tmp.bin | 1 + .../EigenPodManagerStorage/binding.go | 2255 +++++++++ pkg/bindings/EigenPodManagerStorage/tmp.abi | 633 +++ pkg/bindings/EigenPodManagerStorage/tmp.bin | 1 + .../EigenPodPausingConstants/binding.go | 181 + pkg/bindings/EigenPodPausingConstants/tmp.abi | 1 + pkg/bindings/EigenPodPausingConstants/tmp.bin | 1 + pkg/bindings/EigenStrategy/binding.go | 1385 ++++++ pkg/bindings/EigenStrategy/tmp.abi | 460 ++ pkg/bindings/EigenStrategy/tmp.bin | 1 + pkg/bindings/Endian/binding.go | 203 + pkg/bindings/Endian/tmp.abi | 1 + pkg/bindings/Endian/tmp.bin | 1 + pkg/bindings/IAVSDirectory/binding.go | 643 +++ pkg/bindings/IAVSDirectory/tmp.abi | 178 + pkg/bindings/IAVSDirectory/tmp.bin | 1 + pkg/bindings/IBackingEigen/binding.go | 770 +++ pkg/bindings/IBackingEigen/tmp.abi | 254 + pkg/bindings/IBackingEigen/tmp.bin | 1 + pkg/bindings/IBeaconChainOracle/binding.go | 212 + pkg/bindings/IBeaconChainOracle/tmp.abi | 21 + pkg/bindings/IBeaconChainOracle/tmp.bin | 1 + .../IDelayedWithdrawalRouter/binding.go | 902 ++++ pkg/bindings/IDelayedWithdrawalRouter/tmp.abi | 336 ++ pkg/bindings/IDelayedWithdrawalRouter/tmp.bin | 1 + pkg/bindings/IDelegationFaucet/binding.go | 352 ++ pkg/bindings/IDelegationFaucet/tmp.abi | 270 + pkg/bindings/IDelegationFaucet/tmp.bin | 1 + pkg/bindings/IDelegationManager/binding.go | 3056 ++++++++++++ pkg/bindings/IDelegationManager/tmp.abi | 1323 +++++ pkg/bindings/IDelegationManager/tmp.bin | 1 + pkg/bindings/IETHPOSDeposit/binding.go | 402 ++ pkg/bindings/IETHPOSDeposit/tmp.abi | 93 + pkg/bindings/IETHPOSDeposit/tmp.bin | 1 + pkg/bindings/IEigen/binding.go | 833 ++++ pkg/bindings/IEigen/tmp.abi | 287 ++ pkg/bindings/IEigen/tmp.bin | 1 + pkg/bindings/IEigenPod/binding.go | 2059 ++++++++ pkg/bindings/IEigenPod/tmp.abi | 725 +++ pkg/bindings/IEigenPod/tmp.bin | 1 + pkg/bindings/IEigenPodManager/binding.go | 2224 +++++++++ pkg/bindings/IEigenPodManager/tmp.abi | 620 +++ pkg/bindings/IEigenPodManager/tmp.bin | 1 + pkg/bindings/IPausable/binding.go | 783 +++ pkg/bindings/IPausable/tmp.abi | 150 + pkg/bindings/IPausable/tmp.bin | 1 + pkg/bindings/IPauserRegistry/binding.go | 513 ++ pkg/bindings/IPauserRegistry/tmp.abi | 72 + pkg/bindings/IPauserRegistry/tmp.bin | 1 + pkg/bindings/ISignatureUtils/binding.go | 181 + pkg/bindings/ISignatureUtils/tmp.abi | 1 + pkg/bindings/ISignatureUtils/tmp.bin | 1 + pkg/bindings/ISlasher/binding.go | 1480 ++++++ pkg/bindings/ISlasher/tmp.abi | 538 ++ pkg/bindings/ISlasher/tmp.bin | 1 + pkg/bindings/ISocketUpdater/binding.go | 347 ++ pkg/bindings/ISocketUpdater/tmp.abi | 34 + pkg/bindings/ISocketUpdater/tmp.bin | 1 + pkg/bindings/IStrategy/binding.go | 503 ++ pkg/bindings/IStrategy/tmp.abi | 221 + pkg/bindings/IStrategy/tmp.bin | 1 + pkg/bindings/IStrategyManager/binding.go | 1320 +++++ pkg/bindings/IStrategyManager/tmp.abi | 549 +++ pkg/bindings/IStrategyManager/tmp.bin | 1 + pkg/bindings/IWhitelister/binding.go | 346 ++ pkg/bindings/IWhitelister/tmp.abi | 243 + pkg/bindings/IWhitelister/tmp.bin | 1 + pkg/bindings/Merkle/binding.go | 203 + pkg/bindings/Merkle/tmp.abi | 1 + pkg/bindings/Merkle/tmp.bin | 1 + pkg/bindings/Pausable/binding.go | 805 +++ pkg/bindings/Pausable/tmp.abi | 150 + pkg/bindings/Pausable/tmp.bin | 1 + pkg/bindings/PauserRegistry/binding.go | 577 +++ pkg/bindings/PauserRegistry/tmp.abi | 119 + pkg/bindings/PauserRegistry/tmp.bin | 1 + pkg/bindings/Slasher/tmp.abi | 831 ++++ pkg/bindings/Slasher/tmp.bin | 1 + pkg/bindings/StrategyBase/binding.go | 1333 +++++ pkg/bindings/StrategyBase/tmp.abi | 424 ++ pkg/bindings/StrategyBase/tmp.bin | 1 + pkg/bindings/StrategyBaseTVLLimits/binding.go | 1739 +++++++ pkg/bindings/StrategyBaseTVLLimits/tmp.abi | 552 +++ pkg/bindings/StrategyBaseTVLLimits/tmp.bin | 1 + pkg/bindings/StrategyManager/binding.go | 2584 ++++++++++ pkg/bindings/StrategyManager/tmp.abi | 962 ++++ pkg/bindings/StrategyManager/tmp.bin | 1 + .../StrategyManagerStorage/binding.go | 1506 ++++++ pkg/bindings/StrategyManagerStorage/tmp.abi | 656 +++ pkg/bindings/StrategyManagerStorage/tmp.bin | 1 + pkg/bindings/StructuredLinkedList/binding.go | 203 + pkg/bindings/StructuredLinkedList/tmp.abi | 1 + pkg/bindings/StructuredLinkedList/tmp.bin | 1 + .../binding.go | 377 ++ .../UpgradeableSignatureCheckingUtils/tmp.abi | 41 + .../UpgradeableSignatureCheckingUtils/tmp.bin | 1 + remappings.txt | 4 +- .../mainnet/Mainnet_Unpause_Deposits.s.sol | 71 + .../M2_deploy_from_scratch.anvil.config.json | 1 - .../Holesky_current_deployment.config.json | 65 + ...M2_deploy_from_scratch.holesky.config.json | 2 +- .../mainnet/M2_mainnet_upgrade.config.json | 46 + .../Mainnet_current_deployment.config.json | 72 + .../Mainnet_current_eigenPods.config.json | 46 + .../{ => devnet}/M2_Deploy_From_Scratch.s.sol | 39 +- script/deploy/goerli/GoerliUpgrade1.s.sol | 4 +- script/deploy/goerli/GoerliUpgrade2.s.sol | 4 +- .../holesky/Eigen_Strategy_Deploy.s.sol | 71 + .../deploy/holesky/Eigen_Token_Deploy.s.sol | 114 + .../holesky/M2_Deploy_From_Scratch.s.sol | 2 +- script/deploy/holesky/M2_Deploy_Preprod.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 | 345 ++ .../M1_deployment_mainnet_2023_6_9.json | 10 +- .../mainnet/M2_mainnet_upgrade.output.json | 35 + script/utils/ExistingDeploymentParser.sol | 124 +- script/utils/Multisend.sol | 61 + script/utils/TimelockEncoding.sol | 108 + script/utils/TxEncodingInterfaces.sol | 28 + script/whitelist/Staker.sol | 4 +- .../delegationFaucet/DelegationFaucet.sol | 2 +- .../DelegationFaucetStaker.sol | 2 +- .../DeployDelegationFaucet.sol | 2 +- scripts/compile-bindings.sh | 32 + scripts/pre-commit.sh | 3 + src/contracts/core/AVSDirectory.sol | 4 +- src/contracts/core/AVSDirectoryStorage.sol | 2 +- src/contracts/core/DelegationManager.sol | 2 +- .../core/DelegationManagerStorage.sol | 2 +- src/contracts/core/Slasher.sol | 4 +- src/contracts/core/StrategyManager.sol | 2 +- src/contracts/core/StrategyManagerStorage.sol | 2 +- src/contracts/interfaces/IBackingEigen.sol | 40 + src/contracts/interfaces/IEigen.sol | 54 + src/contracts/interfaces/ISocketUpdater.sol | 2 +- .../libraries/EIP1271SignatureUtils.sol | 2 +- .../libraries/StructuredLinkedList.sol | 2 +- src/contracts/permissions/Pausable.sol | 2 +- src/contracts/permissions/PauserRegistry.sol | 2 +- .../pods/DelayedWithdrawalRouter.sol | 2 +- src/contracts/pods/EigenPod.sol | 8 +- src/contracts/pods/EigenPodManager.sol | 4 +- src/contracts/pods/EigenPodManagerStorage.sol | 2 +- .../pods/EigenPodPausingConstants.sol | 2 +- src/contracts/strategies/EigenStrategy.sol | 105 + src/contracts/strategies/StrategyBase.sol | 2 +- .../strategies/StrategyBaseTVLLimits.sol | 2 +- src/contracts/token/BackingEigen.sol | 132 + src/contracts/token/Eigen.sol | 171 + .../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/EigenPod.t.sol | 43 +- src/test/Pausable.t.sol | 2 +- src/test/Strategy.t.sol | 2 +- src/test/WithdrawalMigration.t.sol | 2 +- src/test/Withdrawals.t.sol | 2 +- src/test/events/IAVSDirectoryEvents.sol | 4 +- src/test/events/IDelegationManagerEvents.sol | 4 +- src/test/events/IEigenPodEvents.sol | 4 +- src/test/events/IEigenPodManagerEvents.sol | 4 +- src/test/events/IStrategyManagerEvents.sol | 4 +- src/test/harnesses/EigenHarness.sol | 33 + src/test/harnesses/EigenPodHarness.sol | 8 +- src/test/harnesses/EigenPodManagerWrapper.sol | 4 +- src/test/harnesses/PausableHarness.sol | 4 +- src/test/integration/IntegrationBase.t.sol | 128 +- src/test/integration/IntegrationChecks.t.sol | 5 +- .../integration/IntegrationDeployer.t.sol | 627 ++- src/test/integration/README.md | 21 +- src/test/integration/TimeMachine.t.sol | 4 +- .../mainnet/BeaconChainProofs.sol | 264 + .../mainnet/IBeaconChainOracle.sol | 64 + .../mainnet/IDelayedWithdrawalRouter.sol | 63 + .../mainnet/IEigenPod.sol | 148 + .../mainnet/IEigenPodManager.sol | 86 + .../mainnet/IStrategyManager.sol | 265 + .../integration/mocks/BeaconChainMock.t.sol | 31 +- .../mocks/BeaconChainOracleMock.t.sol | 4 +- .../Delegate_Deposit_Queue_Complete.t.sol | 9 +- .../Deposit_Delegate_Queue_Complete.t.sol | 21 +- ...Deposit_Delegate_Redelegate_Complete.t.sol | 38 +- ...Deposit_Delegate_Undelegate_Complete.t.sol | 18 +- .../Deposit_Delegate_UpdateBalance.t.sol | 9 +- .../tests/Deposit_Queue_Complete.t.sol | 6 +- ...it_Register_QueueWithdrawal_Complete.t.sol | 6 +- .../integration/tests/Upgrade_Setup.t.sol | 110 + src/test/integration/{ => users}/User.t.sol | 31 +- src/test/integration/users/User_M1.t.sol | 133 + src/test/mocks/BeaconChainOracleMock.sol | 2 +- src/test/mocks/DelegationManagerMock.sol | 4 +- src/test/mocks/Dummy.sol | 2 +- src/test/mocks/ERC20Mock.sol | 4 +- src/test/mocks/ERC20_OneWeiFeeOnTransfer.sol | 4 +- .../mocks/ERC20_SetTransferReverting_Mock.sol | 2 +- src/test/mocks/ETHDepositMock.sol | 2 +- src/test/mocks/EmptyContract.sol | 2 +- src/test/mocks/IBeaconChainOracleMock.sol | 4 +- src/test/mocks/OwnableMock.sol | 4 +- src/test/mocks/SlasherMock.sol | 4 +- src/test/mocks/StrategyManagerMock.sol | 4 +- .../token/EigenTransferRestrictions.t.sol | 180 + src/test/token/EigenWrapping.t.sol | 200 + src/test/token/bEIGEN.t.sol | 64 + src/test/unit/AVSDirectoryUnit.t.sol | 2 +- .../unit/DelayedWithdrawalRouterUnit.t.sol | 4 +- src/test/unit/DelegationUnit.t.sol | 9 +- src/test/unit/EigenPod-PodManagerUnit.t.sol | 2 +- src/test/unit/EigenPodManagerUnit.t.sol | 2 +- src/test/unit/EigenPodUnit.t.sol | 50 +- src/test/unit/PausableUnit.t.sol | 4 +- src/test/unit/PauserRegistryUnit.t.sol | 4 +- src/test/unit/StrategyBaseTVLLimitsUnit.sol | 4 +- src/test/unit/StrategyBaseUnit.t.sol | 4 +- src/test/unit/StrategyManagerUnit.t.sol | 2 +- src/test/utils/EigenLayerUnitTestBase.sol | 2 +- src/test/utils/EigenLayerUnitTestSetup.sol | 2 +- src/test/utils/Operators.sol | 2 +- src/test/utils/Owners.sol | 2 +- src/test/utils/ProofParsing.sol | 4 +- src/test/utils/SignatureCompaction.sol | 2 +- src/test/utils/Utils.sol | 2 +- 295 files changed, 77414 insertions(+), 361 deletions(-) create mode 100644 .github/workflows/check-compilation.yml create mode 100644 .github/workflows/run-deploy-scripts.yml create mode 100644 Makefile rename "audits/EigenLabs \342\200\224 EigenLayer ConsenSys Diligence.pdf" => audits/M1 Mainnet - Diligence - Mar 2023.pdf (100%) rename audits/{Sigma_Prime_Eigen_Layer_Phase_2_Security_Assessment_Report_v2_1.pdf => M1 Mainnet - Sigma Prime - May 2023.pdf} (100%) create mode 100644 audits/M2 Mainnet - Cantina - Apr 2024.pdf rename audits/{Sigma Prime - Core Audit - v2.0 FINAL - Feb'24.pdf => M2 Mainnet - Sigma Prime - Feb 2024.pdf} (100%) create mode 100644 go.mod create mode 100644 go.sum create mode 160000 lib/openzeppelin-contracts-upgradeable-v4.9.0 create mode 160000 lib/openzeppelin-contracts-v4.9.0 create mode 100644 pkg/bindings/AVSDirectory/binding.go create mode 100644 pkg/bindings/AVSDirectory/tmp.abi create mode 100644 pkg/bindings/AVSDirectory/tmp.bin create mode 100644 pkg/bindings/AVSDirectoryStorage/binding.go create mode 100644 pkg/bindings/AVSDirectoryStorage/tmp.abi create mode 100644 pkg/bindings/AVSDirectoryStorage/tmp.bin create mode 100644 pkg/bindings/BackingEigen/binding.go create mode 100644 pkg/bindings/BackingEigen/tmp.abi create mode 100644 pkg/bindings/BackingEigen/tmp.bin create mode 100644 pkg/bindings/BeaconChainProofs/binding.go create mode 100644 pkg/bindings/BeaconChainProofs/tmp.abi create mode 100644 pkg/bindings/BeaconChainProofs/tmp.bin create mode 100644 pkg/bindings/BytesLib/binding.go create mode 100644 pkg/bindings/BytesLib/tmp.abi create mode 100644 pkg/bindings/BytesLib/tmp.bin create mode 100644 pkg/bindings/DelayedWithdrawalRouter/binding.go create mode 100644 pkg/bindings/DelayedWithdrawalRouter/tmp.abi create mode 100644 pkg/bindings/DelayedWithdrawalRouter/tmp.bin create mode 100644 pkg/bindings/DelegationManager/binding.go create mode 100644 pkg/bindings/DelegationManager/tmp.abi create mode 100644 pkg/bindings/DelegationManager/tmp.bin create mode 100644 pkg/bindings/DelegationManagerStorage/binding.go create mode 100644 pkg/bindings/DelegationManagerStorage/tmp.abi create mode 100644 pkg/bindings/DelegationManagerStorage/tmp.bin create mode 100644 pkg/bindings/EIP1271SignatureUtils/binding.go create mode 100644 pkg/bindings/EIP1271SignatureUtils/tmp.abi create mode 100644 pkg/bindings/EIP1271SignatureUtils/tmp.bin create mode 100644 pkg/bindings/Eigen/binding.go create mode 100644 pkg/bindings/Eigen/tmp.abi create mode 100644 pkg/bindings/Eigen/tmp.bin create mode 100644 pkg/bindings/EigenPod/binding.go create mode 100644 pkg/bindings/EigenPod/tmp.abi create mode 100644 pkg/bindings/EigenPod/tmp.bin create mode 100644 pkg/bindings/EigenPodManager/binding.go create mode 100644 pkg/bindings/EigenPodManager/tmp.abi create mode 100644 pkg/bindings/EigenPodManager/tmp.bin create mode 100644 pkg/bindings/EigenPodManagerStorage/binding.go create mode 100644 pkg/bindings/EigenPodManagerStorage/tmp.abi create mode 100644 pkg/bindings/EigenPodManagerStorage/tmp.bin create mode 100644 pkg/bindings/EigenPodPausingConstants/binding.go create mode 100644 pkg/bindings/EigenPodPausingConstants/tmp.abi create mode 100644 pkg/bindings/EigenPodPausingConstants/tmp.bin create mode 100644 pkg/bindings/EigenStrategy/binding.go create mode 100644 pkg/bindings/EigenStrategy/tmp.abi create mode 100644 pkg/bindings/EigenStrategy/tmp.bin create mode 100644 pkg/bindings/Endian/binding.go create mode 100644 pkg/bindings/Endian/tmp.abi create mode 100644 pkg/bindings/Endian/tmp.bin create mode 100644 pkg/bindings/IAVSDirectory/binding.go create mode 100644 pkg/bindings/IAVSDirectory/tmp.abi create mode 100644 pkg/bindings/IAVSDirectory/tmp.bin create mode 100644 pkg/bindings/IBackingEigen/binding.go create mode 100644 pkg/bindings/IBackingEigen/tmp.abi create mode 100644 pkg/bindings/IBackingEigen/tmp.bin create mode 100644 pkg/bindings/IBeaconChainOracle/binding.go create mode 100644 pkg/bindings/IBeaconChainOracle/tmp.abi create mode 100644 pkg/bindings/IBeaconChainOracle/tmp.bin create mode 100644 pkg/bindings/IDelayedWithdrawalRouter/binding.go create mode 100644 pkg/bindings/IDelayedWithdrawalRouter/tmp.abi create mode 100644 pkg/bindings/IDelayedWithdrawalRouter/tmp.bin create mode 100644 pkg/bindings/IDelegationFaucet/binding.go create mode 100644 pkg/bindings/IDelegationFaucet/tmp.abi create mode 100644 pkg/bindings/IDelegationFaucet/tmp.bin create mode 100644 pkg/bindings/IDelegationManager/binding.go create mode 100644 pkg/bindings/IDelegationManager/tmp.abi create mode 100644 pkg/bindings/IDelegationManager/tmp.bin create mode 100644 pkg/bindings/IETHPOSDeposit/binding.go create mode 100644 pkg/bindings/IETHPOSDeposit/tmp.abi create mode 100644 pkg/bindings/IETHPOSDeposit/tmp.bin create mode 100644 pkg/bindings/IEigen/binding.go create mode 100644 pkg/bindings/IEigen/tmp.abi create mode 100644 pkg/bindings/IEigen/tmp.bin create mode 100644 pkg/bindings/IEigenPod/binding.go create mode 100644 pkg/bindings/IEigenPod/tmp.abi create mode 100644 pkg/bindings/IEigenPod/tmp.bin create mode 100644 pkg/bindings/IEigenPodManager/binding.go create mode 100644 pkg/bindings/IEigenPodManager/tmp.abi create mode 100644 pkg/bindings/IEigenPodManager/tmp.bin create mode 100644 pkg/bindings/IPausable/binding.go create mode 100644 pkg/bindings/IPausable/tmp.abi create mode 100644 pkg/bindings/IPausable/tmp.bin create mode 100644 pkg/bindings/IPauserRegistry/binding.go create mode 100644 pkg/bindings/IPauserRegistry/tmp.abi create mode 100644 pkg/bindings/IPauserRegistry/tmp.bin create mode 100644 pkg/bindings/ISignatureUtils/binding.go create mode 100644 pkg/bindings/ISignatureUtils/tmp.abi create mode 100644 pkg/bindings/ISignatureUtils/tmp.bin create mode 100644 pkg/bindings/ISlasher/binding.go create mode 100644 pkg/bindings/ISlasher/tmp.abi create mode 100644 pkg/bindings/ISlasher/tmp.bin create mode 100644 pkg/bindings/ISocketUpdater/binding.go create mode 100644 pkg/bindings/ISocketUpdater/tmp.abi create mode 100644 pkg/bindings/ISocketUpdater/tmp.bin create mode 100644 pkg/bindings/IStrategy/binding.go create mode 100644 pkg/bindings/IStrategy/tmp.abi create mode 100644 pkg/bindings/IStrategy/tmp.bin create mode 100644 pkg/bindings/IStrategyManager/binding.go create mode 100644 pkg/bindings/IStrategyManager/tmp.abi create mode 100644 pkg/bindings/IStrategyManager/tmp.bin create mode 100644 pkg/bindings/IWhitelister/binding.go create mode 100644 pkg/bindings/IWhitelister/tmp.abi create mode 100644 pkg/bindings/IWhitelister/tmp.bin create mode 100644 pkg/bindings/Merkle/binding.go create mode 100644 pkg/bindings/Merkle/tmp.abi create mode 100644 pkg/bindings/Merkle/tmp.bin create mode 100644 pkg/bindings/Pausable/binding.go create mode 100644 pkg/bindings/Pausable/tmp.abi create mode 100644 pkg/bindings/Pausable/tmp.bin create mode 100644 pkg/bindings/PauserRegistry/binding.go create mode 100644 pkg/bindings/PauserRegistry/tmp.abi create mode 100644 pkg/bindings/PauserRegistry/tmp.bin create mode 100644 pkg/bindings/Slasher/tmp.abi create mode 100644 pkg/bindings/Slasher/tmp.bin create mode 100644 pkg/bindings/StrategyBase/binding.go create mode 100644 pkg/bindings/StrategyBase/tmp.abi create mode 100644 pkg/bindings/StrategyBase/tmp.bin create mode 100644 pkg/bindings/StrategyBaseTVLLimits/binding.go create mode 100644 pkg/bindings/StrategyBaseTVLLimits/tmp.abi create mode 100644 pkg/bindings/StrategyBaseTVLLimits/tmp.bin create mode 100644 pkg/bindings/StrategyManager/binding.go create mode 100644 pkg/bindings/StrategyManager/tmp.abi create mode 100644 pkg/bindings/StrategyManager/tmp.bin create mode 100644 pkg/bindings/StrategyManagerStorage/binding.go create mode 100644 pkg/bindings/StrategyManagerStorage/tmp.abi create mode 100644 pkg/bindings/StrategyManagerStorage/tmp.bin create mode 100644 pkg/bindings/StructuredLinkedList/binding.go create mode 100644 pkg/bindings/StructuredLinkedList/tmp.abi create mode 100644 pkg/bindings/StructuredLinkedList/tmp.bin create mode 100644 pkg/bindings/UpgradeableSignatureCheckingUtils/binding.go create mode 100644 pkg/bindings/UpgradeableSignatureCheckingUtils/tmp.abi create mode 100644 pkg/bindings/UpgradeableSignatureCheckingUtils/tmp.bin create mode 100644 script/admin/mainnet/Mainnet_Unpause_Deposits.s.sol create mode 100644 script/configs/holesky/Holesky_current_deployment.config.json create mode 100644 script/configs/mainnet/M2_mainnet_upgrade.config.json create mode 100644 script/configs/mainnet/Mainnet_current_deployment.config.json create mode 100644 script/configs/mainnet/Mainnet_current_eigenPods.config.json rename script/deploy/{ => devnet}/M2_Deploy_From_Scratch.s.sol (95%) create mode 100644 script/deploy/holesky/Eigen_Strategy_Deploy.s.sol create mode 100644 script/deploy/holesky/Eigen_Token_Deploy.s.sol create mode 100644 script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol create mode 100644 script/output/mainnet/M2_mainnet_upgrade.output.json create mode 100644 script/utils/Multisend.sol create mode 100644 script/utils/TimelockEncoding.sol create mode 100644 script/utils/TxEncodingInterfaces.sol create mode 100755 scripts/compile-bindings.sh create mode 100755 scripts/pre-commit.sh create mode 100644 src/contracts/interfaces/IBackingEigen.sol create mode 100644 src/contracts/interfaces/IEigen.sol create mode 100644 src/contracts/strategies/EigenStrategy.sol create mode 100644 src/contracts/token/BackingEigen.sol create mode 100644 src/contracts/token/Eigen.sol create mode 100644 src/test/harnesses/EigenHarness.sol create mode 100644 src/test/integration/deprecatedInterfaces/mainnet/BeaconChainProofs.sol create mode 100644 src/test/integration/deprecatedInterfaces/mainnet/IBeaconChainOracle.sol create mode 100644 src/test/integration/deprecatedInterfaces/mainnet/IDelayedWithdrawalRouter.sol create mode 100644 src/test/integration/deprecatedInterfaces/mainnet/IEigenPod.sol create mode 100644 src/test/integration/deprecatedInterfaces/mainnet/IEigenPodManager.sol create mode 100644 src/test/integration/deprecatedInterfaces/mainnet/IStrategyManager.sol create mode 100644 src/test/integration/tests/Upgrade_Setup.t.sol rename src/test/integration/{ => users}/User.t.sol (95%) create mode 100644 src/test/integration/users/User_M1.t.sol create mode 100644 src/test/token/EigenTransferRestrictions.t.sol create mode 100644 src/test/token/EigenWrapping.t.sol create mode 100644 src/test/token/bEIGEN.t.sol diff --git a/.github/workflows/check-compilation.yml b/.github/workflows/check-compilation.yml new file mode 100644 index 000000000..17cbf150e --- /dev/null +++ b/.github/workflows/check-compilation.yml @@ -0,0 +1,30 @@ +name: CI + +on: [push] + +jobs: + check-compilation: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Build and validate + if: github.event_name == 'push' + run: | + sudo apt-get update + sudo apt-get install -y make curl git software-properties-common jq + sudo add-apt-repository -y ppa:longsleep/golang-backports + sudo apt-get update + sudo apt-get install -y golang-1.22 + sudo update-alternatives --install /usr/local/bin/go go /usr/lib/go-1.22/bin/go 1 + mkdir ~/.go + export GOPATH=~/.go + export PATH=$PATH:~/.go/bin + go install github.com/ethereum/go-ethereum/cmd/abigen@v1.14.0 + curl -L https://foundry.paradigm.xyz | bash + export PATH=$PATH:/home/runner/.config/.foundry/bin + source ~/.bashrc + foundryup + make bindings + if [ ! -z "$(git status --porcelain)" ]; then git diff; git status; exit 1; fi diff --git a/.github/workflows/run-deploy-scripts.yml b/.github/workflows/run-deploy-scripts.yml new file mode 100644 index 000000000..c43dc1b73 --- /dev/null +++ b/.github/workflows/run-deploy-scripts.yml @@ -0,0 +1,38 @@ +name: Run Deploy Scripts +# We run the deploy scripts just to make sure they work + +on: + push: + pull_request: + types: [opened, reopened] + +jobs: + prepare: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + submodules: true + + # install foundry to run forge script. Should we run forge script in a container instead? + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + + - name: Start Anvil chain + # need to start Anvil chain with -d to let the container run in the background + # if we start with 'anvil &' instead, the process stops when the step ends + run: docker run -d --rm -p 8545:8545 --entrypoint anvil ghcr.io/foundry-rs/foundry:nightly-5b7e4cb3c882b28f3c32ba580de27ce7381f415a --host 0.0.0.0 + + - name: Wait for Anvil chain to start + run: sleep 3 + + # Run Forge script against the Anvil chain + - name: Run M2_Deploy_From_Scratch + run: | + forge script script/deploy/devnet/M2_Deploy_From_Scratch.s.sol --rpc-url http://localhost:8545 \ + --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --broadcast \ + --sig "run(string memory configFileName)" -- M2_deploy_from_scratch.anvil.config.json diff --git a/.github/workflows/testinparallel.yml b/.github/workflows/testinparallel.yml index 2d1fb3395..8ae97b9a4 100644 --- a/.github/workflows/testinparallel.yml +++ b/.github/workflows/testinparallel.yml @@ -25,9 +25,8 @@ jobs: needs: prepare runs-on: ubuntu-latest strategy: - matrix: - file: ${{fromJson(needs.prepare.outputs.matrix)}} fail-fast: false + steps: - name: Checkout code uses: actions/checkout@v2 @@ -43,8 +42,24 @@ jobs: forge build --sizes id: build - - name: Run forge test for the file - run: forge test --match-path src/test/${{ matrix.file }} --no-match-contract FFI + - name: Run unit tests + run: forge test --no-match-contract Integration + env: + RPC_MAINNET: ${{ secrets.RPC_MAINNET }} + RPC_HOLESKY: ${{ secrets.RPC_HOLESKY }} + CHAIN_ID: ${{ secrets.CHAIN_ID }} + + - name: Run integration tests + run: forge test --match-contract Integration env: RPC_MAINNET: ${{ secrets.RPC_MAINNET }} + RPC_HOLESKY: ${{ secrets.RPC_HOLESKY }} CHAIN_ID: ${{ secrets.CHAIN_ID }} + + - name: Run integration mainnet fork tests + run: forge test --match-contract Integration + env: + FOUNDRY_PROFILE: "forktest" + RPC_MAINNET: ${{ secrets.RPC_MAINNET }} + RPC_HOLESKY: ${{ secrets.RPC_HOLESKY }} + CHAIN_ID: ${{ secrets.CHAIN_ID }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 555235f94..c8e5b6075 100644 --- a/.gitignore +++ b/.gitignore @@ -42,4 +42,6 @@ test.sh # Surya outputs InheritanceGraph.png -surya_report.md \ No newline at end of file +surya_report.md + +.idea diff --git a/.gitmodules b/.gitmodules index 8b136d980..e729e9fc1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,9 @@ [submodule "lib/openzeppelin-contracts"] path = lib/openzeppelin-contracts url = https://github.com/OpenZeppelin/openzeppelin-contracts +[submodule "lib/openzeppelin-contracts-v4.9.0"] + path = lib/openzeppelin-contracts-v4.9.0 + url = https://github.com/OpenZeppelin/openzeppelin-contracts +[submodule "lib/openzeppelin-contracts-upgradeable-v4.9.0"] + path = lib/openzeppelin-contracts-upgradeable-v4.9.0 + url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..0e5cdf6c0 --- /dev/null +++ b/Makefile @@ -0,0 +1,19 @@ + +.PHONY: install-hooks +install-hooks: + cp scripts/pre-commit.sh .git/hooks/pre-commit + +.PHONY: deps +deps: install-hooks + brew install libusb + go install github.com/ethereum/go-ethereum/cmd/abigen@latest + curl -L https://foundry.paradigm.xyz | bash + foundryup + +.PHONY: compile +compile: + forge b + +.PHONY: bindings +bindings: compile + ./scripts/compile-bindings.sh diff --git a/README.md b/README.md index 72b7e1279..87ba864f0 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,35 @@ EigenLayer is a set of smart contracts deployed on Ethereum that enable restaking of assets to secure new services. This repo contains the EigenLayer core contracts, whose currently-supported assets include beacon chain ETH and several liquid staking tokens (LSTs). Users use these contracts to deposit and withdraw these assets, as well as delegate them to operators providing services to AVSs. -The most up to date mainnet and testnet deployment addresses can be found on our [docs site](https://docs.eigenlayer.xyz/eigenlayer/deployed-contracts). - ## Getting Started +* [Branching](#branching) * [Documentation](#documentation) * [Building and Running Tests](#building-and-running-tests) +* [Deployments](#deployments) + +## Branching + +The main branches we use are: +* [`dev (default)`](https://github.com/Layr-Labs/eigenlayer-contracts/tree/dev): The most up-to-date branch, containing the work-in-progress code for upcoming releases +* [`testnet-holesky`](https://github.com/Layr-Labs/eigenlayer-contracts/tree/testnet-holesky): Our current testnet deployment +* [`mainnet`](https://github.com/Layr-Labs/eigenlayer-contracts/tree/mainnet): Our current mainnet deloyment ## Documentation +### Setup + +To set up this repo for the first time, run: + +```bash +make deps +``` + +This will: +* Install the pre-commit hook +* Install foundry and its tools +* Install abigen + ### Basics To get a basic understanding of EigenLayer, check out [You Could've Invented EigenLayer](https://www.blog.eigenlayer.xyz/ycie/). Note that some of the document's content describes features that do not exist yet (like the Slasher). To understand more about how restakers and operators interact with EigenLayer, check out these guides: @@ -34,6 +54,8 @@ foundryup forge build forge test + +make bindings ``` ### Running Fork Tests @@ -76,3 +98,137 @@ surya inheritance ./src/contracts/**/*.sol | dot -Tpng > InheritanceGraph.png surya mdreport surya_report.md ./src/contracts/**/*.sol ``` +### Generate Go bindings + +```bash +make bindings +``` + +## Deployments + +### Current Mainnet Deployment + +The current mainnet deployment is our M2 release. You can view the deployed contract addresses below, or check out the code itself on the [`mainnet`](https://github.com/Layr-Labs/eigenlayer-contracts/tree/mainnet) branch. + +###### Core + +| Name | Proxy | Implementation | Notes | +| -------- | -------- | -------- | -------- | +| [`DelegationManager`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/4b15d68b7e16b5965bad398496bfce57f5a47e1b/src/contracts/core/DelegationManager.sol) | [`0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A`](https://etherscan.io/address/0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A) | [`0x1784...9dda`](https://etherscan.io/address/0x1784be6401339fc0fedf7e9379409f5c1bfe9dda) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyManager`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/4b15d68b7e16b5965bad398496bfce57f5a47e1b/src/contracts/core/StrategyManager.sol) | [`0x858646372CC42E1A627fcE94aa7A7033e7CF075A`](https://etherscan.io/address/0x858646372CC42E1A627fcE94aa7A7033e7CF075A) | [`0x70f4...619b`](https://etherscan.io/address/0x70f44c13944d49a236e3cd7a94f48f5dab6c619b) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`EigenPodManager`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/4b15d68b7e16b5965bad398496bfce57f5a47e1b/src/contracts/pods/EigenPodManager.sol) | [`0x91E677b07F7AF907ec9a428aafA9fc14a0d3A338`](https://etherscan.io/address/0x91E677b07F7AF907ec9a428aafA9fc14a0d3A338) | [`0xe429...5762`](https://etherscan.io/address/0xe4297e3dadbc7d99e26a2954820f514cb50c5762) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`AVSDirectory`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/4b15d68b7e16b5965bad398496bfce57f5a47e1b/src/contracts/core/AVSDirectory.sol) | [`0x135dda560e946695d6f155dacafc6f1f25c1f5af`](https://etherscan.io/address/0x135dda560e946695d6f155dacafc6f1f25c1f5af) | [`0xdabd...a5b7`](https://etherscan.io/address/0xdabdb3cd346b7d5f5779b0b614ede1cc9dcba5b7) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`Slasher`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/4b15d68b7e16b5965bad398496bfce57f5a47e1b/src/contracts/core/Slasher.sol) | [`0xD92145c07f8Ed1D392c1B88017934E301CC1c3Cd`](https://etherscan.io/address/0xD92145c07f8Ed1D392c1B88017934E301CC1c3Cd) | [`0xf323...6614`](https://etherscan.io/address/0xf3234220163a757edf1e11a8a085638d9b236614) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | + +###### Strategies - ETH + +| Name | Proxy | Implementation | Notes | +| -------- | -------- | -------- | -------- | +| [`StrategyBase (cbETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/0139d6213927c0a7812578899ddd3dda58051928/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x54945180dB7943c0ed0FEE7EdaB2Bd24620256bc`](https://etherscan.io/address/0x54945180dB7943c0ed0FEE7EdaB2Bd24620256bc) | [`0xdfdA...46d3`](https://etherscan.io/address/0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (stETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/0139d6213927c0a7812578899ddd3dda58051928/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x93c4b944D05dfe6df7645A86cd2206016c51564D`](https://etherscan.io/address/0x93c4b944D05dfe6df7645A86cd2206016c51564D) | [`0xdfdA...46d3`](https://etherscan.io/address/0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (rETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/0139d6213927c0a7812578899ddd3dda58051928/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x1BeE69b7dFFfA4E2d53C2a2Df135C388AD25dCD2`](https://etherscan.io/address/0x1BeE69b7dFFfA4E2d53C2a2Df135C388AD25dCD2) | [`0xdfdA...46d3`](https://etherscan.io/address/0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (ETHx)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/mainnet/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x9d7eD45EE2E8FC5482fa2428f15C971e6369011d`](https://etherscan.io/address/0x9d7eD45EE2E8FC5482fa2428f15C971e6369011d) | [`0xdfdA...46d3`](https://etherscan.io/address/0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (ankrETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/mainnet/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x13760F50a9d7377e4F20CB8CF9e4c26586c658ff`](https://etherscan.io/address/0x13760F50a9d7377e4F20CB8CF9e4c26586c658ff) | [`0xdfdA...46d3`](https://etherscan.io/address/0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (OETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/mainnet/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0xa4C637e0F704745D182e4D38cAb7E7485321d059`](https://etherscan.io/address/0xa4C637e0F704745D182e4D38cAb7E7485321d059) | [`0xdfdA...46d3`](https://etherscan.io/address/0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (osETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/mainnet/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x57ba429517c3473B6d34CA9aCd56c0e735b94c02`](https://etherscan.io/address/0x57ba429517c3473B6d34CA9aCd56c0e735b94c02) | [`0xdfdA...46d3`](https://etherscan.io/address/0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (swETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/mainnet/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x0Fe4F44beE93503346A3Ac9EE5A26b130a5796d6`](https://etherscan.io/address/0x0Fe4F44beE93503346A3Ac9EE5A26b130a5796d6) | [`0xdfdA...46d3`](https://etherscan.io/address/0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (wBETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/mainnet/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x7CA911E83dabf90C90dD3De5411a10F1A6112184`](https://etherscan.io/address/0x7CA911E83dabf90C90dD3De5411a10F1A6112184) | [`0xdfdA...46d3`](https://etherscan.io/address/0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (sfrxETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/mainnet/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x8CA7A5d6f3acd3A7A8bC468a8CD0FB14B6BD28b6`](https://etherscan.io/address/0x8CA7A5d6f3acd3A7A8bC468a8CD0FB14B6BD28b6) | [`0xdfdA...46d3`](https://etherscan.io/address/0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (lsETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/mainnet/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0xAe60d8180437b5C34bB956822ac2710972584473`](https://etherscan.io/address/0xAe60d8180437b5C34bB956822ac2710972584473) | [`0xdfdA...46d3`](https://etherscan.io/address/0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (mETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/mainnet/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x298aFB19A105D59E74658C4C334Ff360BadE6dd2`](https://etherscan.io/address/0x298aFB19A105D59E74658C4C334Ff360BadE6dd2) | [`0xdfdA...46d3`](https://etherscan.io/address/0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| `Beacon Chain ETH` | `0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0` | - | - Used for Beacon Chain ETH shares
- Not a real contract! | + +###### Strategies - EIGEN + +| Name | Proxy | Implementation | Notes | +| -------- | -------- | -------- | -------- | +| [`EigenStrategy (EIGEN)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/mainnet/src/contracts/strategies/EigenStrategy.sol) | [`0xaCB55C530Acdb2849e6d4f36992Cd8c9D50ED8F7`](https://etherscan.io/address/0xaCB55C530Acdb2849e6d4f36992Cd8c9D50ED8F7) | [`0x27e7...0428`](https://etherscan.io/address/0x27e7a3a81741b9fcc5ad7edcbf9f8a72a5c00428) | Proxy: [`TUP@4.9.0`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.0/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | + +###### EigenPods + +| Name | Proxy | Implementation | Notes | +| -------- | -------- | -------- | -------- | +| [`EigenPod (beacon)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/4b15d68b7e16b5965bad398496bfce57f5a47e1b/src/contracts/pods/EigenPod.sol) | [`0x5a2a4F2F3C18f09179B6703e63D9eDD165909073`](https://etherscan.io/address/0x5a2a4F2F3C18f09179B6703e63D9eDD165909073) | [`0x8ba4...a255`](https://etherscan.io/address/0x8ba40da60f0827d027f029acee62609f0527a255) | - Beacon: [`BeaconProxy`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/beacon/BeaconProxy.sol)
- Pods: [`UpgradeableBeacon`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/beacon/UpgradeableBeacon.sol) | +| [`DelayedWithdrawalRouter`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/4b15d68b7e16b5965bad398496bfce57f5a47e1b/src/contracts/pods/DelayedWithdrawalRouter.sol) | [`0x7Fe7E9CC0F274d2435AD5d56D5fa73E47F6A23D8`](https://etherscan.io/address/0x7Fe7E9CC0F274d2435AD5d56D5fa73E47F6A23D8) | [`0x4bb6...4226`](https://etherscan.io/address/0x4bb6731b02314d40abbffbc4540f508874014226) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`EigenLayerBeaconOracle`](https://github.com/succinctlabs/eigenlayer-beacon-oracle/blob/main/contracts/src/EigenLayerBeaconOracle.sol) | - | [`0x3439...5442`](https://etherscan.io/address/0x343907185b71adf0eba9567538314396aa985442) | Provided by [Succinct](https://succinct.xyz/) | + +###### EIGEN/bEIGEN + +| Name | Proxy | Implementation | Notes | +| -------- | -------- | -------- | -------- | +| [`Eigen`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/mainnet/src/contracts/token/Eigen.sol) | [`0xec53bf9167f50cdeb3ae105f56099aaab9061f83`](https://etherscan.io/address/0xec53bf9167f50cdeb3ae105f56099aaab9061f83) | [`0x7ec3...700b`](https://etherscan.io/address/0x7ec354c84680112d3cff1544ec1eb19ca583700b) | Proxy: [`TUP@4.9.0`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.0/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`Backing Eigen`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/mainnet/src/contracts/token/BackingEigen.sol) | [`0x83E9115d334D248Ce39a6f36144aEaB5b3456e75`](https://etherscan.io/address/0x83E9115d334D248Ce39a6f36144aEaB5b3456e75) | [`0xB91c...FFE3`](https://etherscan.io/address/0xB91c69Af3eE022bd0a59Da082945914BFDcEFFE3) | Proxy: [`TUP@4.9.0`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.0/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | + +###### Multisigs + +| Name | Proxy | Implementation | Notes | +| -------- | -------- | -------- | -------- | +| [`PauserRegistry`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/0139d6213927c0a7812578899ddd3dda58051928/src/contracts/permissions/PauserRegistry.sol) | - | [`0x0c43...7060`](https://etherscan.io/address/0x0c431C66F4dE941d089625E5B423D00707977060) | | +| [`Pauser Multisig`](https://github.com/safe-global/safe-contracts/blob/v1.3.0/contracts/GnosisSafe.sol) | [`0x5050389572f2d220ad927CcbeA0D406831012390`](https://etherscan.io/address/0x5050389572f2d220ad927CcbeA0D406831012390) | [`0xd9db...9552`](https://etherscan.io/address/0xd9db270c1b5e3bd161e8c8503c55ceabee709552) | Proxy: [`Gnosis@1.3.0`](https://github.com/safe-global/safe-contracts/blob/v1.3.0/contracts/proxies/GnosisSafeProxy.sol) | +| [`Community Multisig`](https://github.com/safe-global/safe-contracts/blob/v1.3.0/contracts/GnosisSafe.sol) | [`0xFEA47018D632A77bA579846c840d5706705Dc598`](https://etherscan.io/address/0xFEA47018D632A77bA579846c840d5706705Dc598) | [`0xd9db...9552`](https://etherscan.io/address/0xd9db270c1b5e3bd161e8c8503c55ceabee709552) | Proxy: [`Gnosis@1.3.0`](https://github.com/safe-global/safe-contracts/blob/v1.3.0/contracts/proxies/GnosisSafeProxy.sol) | +| [`Executor Multisig`](https://github.com/safe-global/safe-contracts/blob/v1.3.0/contracts/GnosisSafe.sol) | [`0x369e6F597e22EaB55fFb173C6d9cD234BD699111`](https://etherscan.io/address/0x369e6F597e22EaB55fFb173C6d9cD234BD699111) | [`0xd9db...9552`](https://etherscan.io/address/0xd9db270c1b5e3bd161e8c8503c55ceabee709552) | Proxy: [`Gnosis@1.3.0`](https://github.com/safe-global/safe-contracts/blob/v1.3.0/contracts/proxies/GnosisSafeProxy.sol) | +| [`Operations Multisig`](https://github.com/safe-global/safe-contracts/blob/v1.3.0/contracts/GnosisSafe.sol) | [`0xBE1685C81aA44FF9FB319dD389addd9374383e90`](https://etherscan.io/address/0xBE1685C81aA44FF9FB319dD389addd9374383e90) | [`0xd9db...9552`](https://etherscan.io/address/0xd9db270c1b5e3bd161e8c8503c55ceabee709552) | Proxy: [`Gnosis@1.3.0`](https://github.com/safe-global/safe-contracts/blob/v1.3.0/contracts/proxies/GnosisSafeProxy.sol) | +| [`Compound: Timelock`](https://github.com/compound-finance/compound-protocol/blob/a3214f67b73310d547e00fc578e8355911c9d376/contracts/Timelock.sol) | - | [`0xA6Db...0EAF`](https://etherscan.io/address/0xA6Db1A8C5a981d1536266D2a393c5F8dDb210EAF) | | +| [`OZ: Proxy Admin`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/ProxyAdmin.sol) | - | [`0x8b95...2444`](https://etherscan.io/address/0x8b9566AdA63B64d1E1dcF1418b43fd1433b72444) | | + +--- + +### Current Testnet Deployment + +The current testnet deployment is on holesky, and is from our M2 beta release. You can view the deployed contract addresses below, or check out the code itself on the [`testnet-holesky`](https://github.com/Layr-Labs/eigenlayer-contracts/tree/testnet-holesky) branch. + +###### Core + +| Name | Proxy | Implementation | Notes | +| -------- | -------- | -------- | -------- | +| [`DelegationManager`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/core/DelegationManager.sol) | [`0xA44151489861Fe9e3055d95adC98FbD462B948e7`](https://holesky.etherscan.io/address/0xA44151489861Fe9e3055d95adC98FbD462B948e7) | [`0x83f8...0D76`](https://holesky.etherscan.io/address/0x83f8F8f0BB125F7870F6bfCf76853f874C330D76) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyManager`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/core/StrategyManager.sol) | [`0xdfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6`](https://holesky.etherscan.io/address/0xdfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6) | [`0x59f7...3a18`](https://holesky.etherscan.io/address/0x59f766A603C53f3AC8Be43bBe158c1519b193a18) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`EigenPodManager`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/pods/EigenPodManager.sol) | [`0x30770d7E3e71112d7A6b7259542D1f680a70e315`](https://holesky.etherscan.io/address/0x30770d7E3e71112d7A6b7259542D1f680a70e315) | [`0x5265...4a7B`](https://holesky.etherscan.io/address/0x5265C162f7d5F3fE3175a78828ab16bf5E324a7B) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`AVSDirectory`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/core/AVSDirectory.sol) | [`0x055733000064333CaDDbC92763c58BF0192fFeBf`](https://holesky.etherscan.io/address/0x055733000064333CaDDbC92763c58BF0192fFeBf) | [`0xEF5B...3e3a`](https://holesky.etherscan.io/address/0xEF5BA995Bc7722fd1e163edF8Dc09375de3d3e3a) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`Slasher`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/core/Slasher.sol) | [`0xcAe751b75833ef09627549868A04E32679386e7C`](https://holesky.etherscan.io/address/0xcAe751b75833ef09627549868A04E32679386e7C) | [`0x9971...345A`](https://holesky.etherscan.io/address/0x99715D255E34a39bE9943b82F281CA734bcF345A) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | + +###### Strategies - ETH + +| Name | Proxy | Implementation | Notes | +| -------- | -------- | -------- | -------- | +| [`StrategyBase (stETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x7D704507b76571a51d9caE8AdDAbBFd0ba0e63d3`](https://holesky.etherscan.io/address/0x7D704507b76571a51d9caE8AdDAbBFd0ba0e63d3) | [`0xFb83...3305`](https://holesky.etherscan.io/address/0xFb83e1D133D0157775eC4F19Ff81478Df1103305) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (rETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x3A8fBdf9e77DFc25d09741f51d3E181b25d0c4E0`](https://holesky.etherscan.io/address/0x3A8fBdf9e77DFc25d09741f51d3E181b25d0c4E0) | [`0xFb83...3305`](https://holesky.etherscan.io/address/0xFb83e1D133D0157775eC4F19Ff81478Df1103305) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (WETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9`](https://holesky.etherscan.io/address/0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9) | [`0xFb83...3305`](https://holesky.etherscan.io/address/0xFb83e1D133D0157775eC4F19Ff81478Df1103305) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (lsETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x05037A81BD7B4C9E0F7B430f1F2A22c31a2FD943`](https://holesky.etherscan.io/address/0x05037A81BD7B4C9E0F7B430f1F2A22c31a2FD943) | [`0xFb83...3305`](https://holesky.etherscan.io/address/0xFb83e1D133D0157775eC4F19Ff81478Df1103305) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (sfrxETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x9281ff96637710Cd9A5CAcce9c6FAD8C9F54631c`](https://holesky.etherscan.io/address/0x9281ff96637710Cd9A5CAcce9c6FAD8C9F54631c) | [`0xFb83...3305`](https://holesky.etherscan.io/address/0xFb83e1D133D0157775eC4F19Ff81478Df1103305) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (ETHx)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x31B6F59e1627cEfC9fA174aD03859fC337666af7`](https://holesky.etherscan.io/address/0x31B6F59e1627cEfC9fA174aD03859fC337666af7) | [`0xFb83...3305`](https://holesky.etherscan.io/address/0xFb83e1D133D0157775eC4F19Ff81478Df1103305) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (osETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x46281E3B7fDcACdBa44CADf069a94a588Fd4C6Ef`](https://holesky.etherscan.io/address/0x46281E3B7fDcACdBa44CADf069a94a588Fd4C6Ef) | [`0xFb83...3305`](https://holesky.etherscan.io/address/0xFb83e1D133D0157775eC4F19Ff81478Df1103305) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (cbETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x70EB4D3c164a6B4A5f908D4FBb5a9cAfFb66bAB6`](https://holesky.etherscan.io/address/0x70EB4D3c164a6B4A5f908D4FBb5a9cAfFb66bAB6) | [`0xFb83...3305`](https://holesky.etherscan.io/address/0xFb83e1D133D0157775eC4F19Ff81478Df1103305) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (mETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0xaccc5A86732BE85b5012e8614AF237801636F8e5`](https://holesky.etherscan.io/address/0xaccc5A86732BE85b5012e8614AF237801636F8e5) | [`0xFb83...3305`](https://holesky.etherscan.io/address/0xFb83e1D133D0157775eC4F19Ff81478Df1103305) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`StrategyBase (ankrETH)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/strategies/StrategyBaseTVLLimits.sol) | [`0x7673a47463F80c6a3553Db9E54c8cDcd5313d0ac`](https://holesky.etherscan.io/address/0x7673a47463F80c6a3553Db9E54c8cDcd5313d0ac) | [`0xFb83...3305`](https://holesky.etherscan.io/address/0xFb83e1D133D0157775eC4F19Ff81478Df1103305) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| `Beacon Chain ETH` | `0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0` | - | - Used for Beacon Chain ETH shares
- Not a real contract! | + +###### Strategies - EIGEN + +| Name | Proxy | Implementation | Notes | +| -------- | -------- | -------- | -------- | +| [`EigenStrategy (EIGEN)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/strategies/EigenStrategy.sol) | [`0x43252609bff8a13dFe5e057097f2f45A24387a84`](https://holesky.etherscan.io/address/0x43252609bff8a13dFe5e057097f2f45A24387a84) | [`0x9465...2697`](https://holesky.etherscan.io/address/0x94650e09a471CEF96e7966cabf26718FBf352697) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | + +###### EigenPods + +| Name | Proxy | Implementation | Notes | +| -------- | -------- | -------- | -------- | +| [`EigenPod (beacon)`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/pods/EigenPod.sol) | [`0x7261C2bd75a7ACE1762f6d7FAe8F63215581832D`](https://holesky.etherscan.io/address/0x7261C2bd75a7ACE1762f6d7FAe8F63215581832D) | [`0xe98f...641c`](https://holesky.etherscan.io/address/0xe98f9298344527608A1BCC23907B8145F9Cb641c) | - Beacon: [`BeaconProxy`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/beacon/BeaconProxy.sol)
- Pods: [`UpgradeableBeacon`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/beacon/UpgradeableBeacon.sol) | +| [`DelayedWithdrawalRouter`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/pods/DelayedWithdrawalRouter.sol) | [`0x642c646053eaf2254f088e9019ACD73d9AE0FA32`](https://holesky.etherscan.io/address/0x642c646053eaf2254f088e9019ACD73d9AE0FA32) | [`0xcE8b...3407`](https://holesky.etherscan.io/address/0xcE8b8D99773a718423F8040a6e52c06a4ce63407) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`EigenLayerBeaconOracle`](https://github.com/succinctlabs/eigenlayer-beacon-oracle/blob/main/contracts/src/EigenLayerBeaconOracle.sol) | - | [`0x4C11...8f25`](https://holesky.etherscan.io/address/0x4C116BB629bff7A8373c2378bBd919f8349B8f25) | Provided by [Succinct](https://succinct.xyz/) | + +###### EIGEN/bEIGEN + +| Name | Proxy | Implementation | Notes | +| -------- | -------- | -------- | -------- | +| [`Eigen`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/token/Eigen.sol) | [`0x3B78576F7D6837500bA3De27A60c7f594934027E`](https://holesky.etherscan.io/address/0x3B78576F7D6837500bA3De27A60c7f594934027E) | [`0x083b...8c5a`](https://holesky.etherscan.io/address/0x083bC9e0DCF2C3e13E24686e5202232995578c5a) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | +| [`Backing Eigen`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/token/BackingEigen.sol) | [`0x275cCf9Be51f4a6C94aBa6114cdf2a4c45B9cb27`](https://holesky.etherscan.io/address/0x275cCf9Be51f4a6C94aBa6114cdf2a4c45B9cb27) | [`0x4500...bce8`](https://holesky.etherscan.io/address/0x4500927874Ad41538c1bEF2F5278E7a86DF6bce8) | Proxy: [`TUP@4.7.1`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) | + +###### Multisigs + +| Name | Proxy | Implementation | Notes | +| -------- | -------- | -------- | -------- | +| [`PauserRegistry`](https://github.com/Layr-Labs/eigenlayer-contracts/blob/testnet-holesky/src/contracts/permissions/PauserRegistry.sol) | - | [`0x85Ef...2F06`](https://holesky.etherscan.io/address/0x85Ef7299F8311B25642679edBF02B62FA2212F06) | | +| [`Compound: Timelock`](https://github.com/compound-finance/compound-protocol/blob/a3214f67b73310d547e00fc578e8355911c9d376/contracts/Timelock.sol) | - | [`0xcF19...0A7D`](https://holesky.etherscan.io/address/0xcF19CE0561052a7A7Ff21156730285997B350A7D) | | +| [`OZ: Proxy Admin`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/ProxyAdmin.sol) | - | [`0xDB02...A6cf`](https://holesky.etherscan.io/address/0xDB023566064246399b4AE851197a97729C93A6cf) | | + diff --git "a/audits/EigenLabs \342\200\224 EigenLayer ConsenSys Diligence.pdf" b/audits/M1 Mainnet - Diligence - Mar 2023.pdf similarity index 100% rename from "audits/EigenLabs \342\200\224 EigenLayer ConsenSys Diligence.pdf" rename to audits/M1 Mainnet - Diligence - Mar 2023.pdf diff --git a/audits/Sigma_Prime_Eigen_Layer_Phase_2_Security_Assessment_Report_v2_1.pdf b/audits/M1 Mainnet - Sigma Prime - May 2023.pdf similarity index 100% rename from audits/Sigma_Prime_Eigen_Layer_Phase_2_Security_Assessment_Report_v2_1.pdf rename to audits/M1 Mainnet - Sigma Prime - May 2023.pdf diff --git a/audits/M2 Mainnet - Cantina - Apr 2024.pdf b/audits/M2 Mainnet - Cantina - Apr 2024.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c747a8d5484b8cc207d52f7569fe1df3f1b214b6 GIT binary patch literal 738987 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 z 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°FNee3au+4Zd1h9W?Jf&pEw$B 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∈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

4oM)dIeo9AG5T$Gt>k%U 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νch^EG^z|P8$^-?? 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∨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 yV{EESRC^Q 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

oHvW)-j{(jNW$ZfOva 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 n-`(TG1&&5yhK!)h0riK(J*3KVbR* zk5tGRjt$`U0MSKCF8Hg7WUp;h8E#CTBX3wH ziaY^An6xKv6`Xk4D`R(KpF38Anpv2=32!5b@ z_AR&TFV!&7+4TeFywh1!RUXTaK;EndteIw-rtrH#1A1@wuss$o)HM&kLJ!6*;^JkA zjq|ze6eUf&d$Lwhk<3DaN}&|JHz*D8#duj}KwUrzDk z5JS;@Z$NmL-eT8s9yQAYOl$`zV^G2%lHb*Z+Ss4VW^bY@k-;C5mjt5O$}yy6H_XD5+l1UlRUjqa0MIfEgDf@3$4l%pRH=$4X;0LD3K#8cc9IY=%S#qd9; z^c_jCyK-)ebHYOWCk&`PiiF$lOSWcP4CV)|oEA9e#xY!pv)6XKyHRDv-1n4`KWR*M z3SBH3+4n|agCKD=4!9`_5Y%+mZdVOaZW^)QC}gtKR>?NUnujMey0aG0sb?j(u zkG~p#B>idKdT5e{G^)(h{klEYUtC)qBDlxi){e?170mW6IBgQMp^lH9#kLBi$0W7| zQ%`66ZpO6kT~4p|#JEjpue_SypT~!0+K%{QT>z&RKj&t5H|J?()LP7%C`ilOF=m18 zgqPOtu8Qe#4gIr6*$asdM_Lhs(u+Y2lXRnFV__ssZ9W2{wm=Ny-Dn3rDKU7J1n`g5 zbx6K}BSt^dVN@6%-DPFh6YUn`oNT9-|GJ{gk!i`#+!+f!2B|yyvYf&64fBNO<*^>@gPA=*WQVnD^Y5b88`^RG$EDQWeNU z7taQ*-0noN@8sv$b}>E`i&>id0Oq*7l9uBO=Ou$n`U}YDvlGCrUV_aNZj~@TWaSJU z`OFzKY_T$}u*8jbt#y{s47h+CHtLzt=kz@5?(nEPHMs|RyA5nYN%;%|vd9^~XHVKS zH`mv6Dj*C!N-5QJ?)R;YV4w=$5Tm^%q zI>Aj$KQ&66g=7-&qZ-5ao|XflIvYCX6a-5V*W>Cd=-^QDG@B^T*$+M$LIArattn77`)@p6z#d8=$1`P%0AWBv=WQJ-->o{IoY3;+Kir zGThB5jsHv#-b%P+D!!zO>C`HqX&E{@%DyHs>v7vusZ|9_x9t?xUIgC&yTC%uW#1m? zY;+-+1;%0E@5C6}A-zjybXB4*bW6`rM|&g8P8B7E2xCVvn7S=)yNVoL5uIXcYkSvy)Z<36)qPfe%T?ZTT?`cm;P(VJ?%x-_@Pd;8c_)`4(n9Qc<}=T}iV=2BY8j-r zzX4BWf%0pu!3BLYsx$i5`G=M^>eE?KQvCYHjO^7jF0?tLm9y0+h}a)v1${uB7S7Un zY>?$c-7Lt>r-19DAG&cY(J}5%6xl;IK5?^Q(K-V2-slly_Bry==9?t5{pf2%5&-h; z!FU^O8hb|x6AGl+Jsp>PlkU85P_XG%bosfSK?Gr{NO-FQ(zq}|Px27PG8nQIWj1(L z2Pe+^)%QP_hIK3Vo}VaZkgbI3TT3gD;||P!G5NI3GkX!Twp@ghq@w)7#x-NOGfC8T z)b{)ht>wDdA`tpi)~1}8vnBjP7Uq)pzM!RLQ+n;zTvopv1T_-^wt&cZxbMyfH^;Ku z^(9g;%rNUGRHa_E?!799E*?Bby)Ur2GN6lZ1@-)&HpumXWSQfd4#06+IeGZvjj#v< zSi2)>K4=mj1f8V7?nt4cFc9XXobU?q=6KENeW55G^_W6@Izia-S5lXlNMp~}Z5zzP zzFBqXGbMz$;OPhYUW!_muzi*8y{|}%>0}9zg|}5&b*Bpt%MxUneAR?Z061CH;8KX! zIIajVCsx#-JA0C1`)VC^dl83jKDfr;8Bw)k7FewYJd7Krvl*wFXuBn{++BvpZrbtt zW={ilp%x981;nVml9@ScEMX~Tl6(kqB@zyD>_Bbd2=g9GQrsDvB_u?e22FXy;JWhD zxV~1lI1%q_U=sPP#2onyAFALKBL zCe|c8cLOW!s9N+c-^dAZr)a3g31VxN*H$dsX)9YQ1C$rVG8d)`Z�Ms#jX)Flq6d{35P51P~p%CdO~<2Xsjzlf1Wn0LZ4uzy|ekX*C#Jz| zRfjL#7w8&xr*R4a)I!!eZst!KjIBQ~!ZAVam{XT4dF@y`qp4v@5E&10N4_l)zWFmG zF;zCG$B9E2D6^y%Hrq!%NKAvHyAV2CNri78ViNt<5m8E8KMXqU)*$)XCWoiYeI*@5 z7#L@~B-9ZnP3{Xmb>$dL$ny%=zyZ{(#l292a+`Z5CKT3?1{zH@hM7m$q41;@-^jFt>ca|` zV(T;jqu|0N=>Q|Z=lmgj2%&&cT@Z%NR+XKu7!1LKEU2e}tw!32WZ8MnbIAPjpI7;M{*1Q#Nx^Kjh@rGU6 zChsI1NEZV{y)^Xo5rtgdcLL14h*T(#M zWbb<*3<~`oyXBch*D5lPs3+jX#=L8Eo$7~ji*UuhksCUs0r8CI7~ack#&%2hX9w~g z%mBVEB#rG}mv|@K2%RQvPvei=fceMJd~qLTFj~_mjOT1%~k!!=mSoZGm(6zJ@x|wS7 zz%4pt{V!zv8x?tAAHB%$!W~LDV~(}&p?B(>_M~j%xp57~`XPF^1bcqyZIr}*v#Znq zQ@s>P<1qPqI2e7{_KlU?zQ1ejr^yEyws~R&^?X^rZcHVY2%u82Wzd|MN^>&>f{e8^ zu>nz&?3^>3hOUxX#-zcm9Va6ClZ{rdwC=<)}ZYU3=00(Q64K=NUV z%F@%S1w(s1I;}-0vU+0&#{T%HI+$ z+fEC6j7?Ms3q+8B)D>2V6z^KNMhF8jHh$H;;htzNyEoapi}bCWykory;Mk3qwVBqo zT{TpGd;F7=D{Od=5FmSzja-C5hh^{WS(Yz{5VCQ}Bj(M5G)H8k?r$X9qxWTADhScO zK3r9UUor9kRvWG^AJML1f560kChMxH)6^Q-jBzN`~U@wTwT?$zGUcFmiijuUiF*)4bl}? zDp>lIGlkojs~1}A)89H5`w((4zCDw-VM&mBxgYX~N6(P6tF;1|>bIW(1b6X++B5j2{1nk7R^tZ2*rL z1Tn<|cjM^)s&$%QROXbjcd17Wh6s*d%_HjDAiG2ItA+uUCI#zo4ResGtYFP|zV>Gx zU(c8vS~l%ihZ2@`@II0a<(_A<`{eI0+PNPE+j&KTCy8fCeQS;NT+p?R5}J+97>au6P^^yb zROeZ7iv-+rpd6qT8RO-Bj%?$SDWoka*nzzzPk(}uLx=yH?Rv8=H%t|q?d6ZuT~iBo zy3m#BGVEZrEGym?4?d_zl+8szDrI)8n7BjiDj17K8KvDYLqFYT;@!)>KpkrF=4)#jJHL9(W)T_@Zl|Vc0dP z$I1$ei5c!mSQ|~QK~nhgXj`P~ZQtlUWx`}zTL1)tQ9e*Izp&!Eu9x{o8``{OgzOdI zDx|CvIyG4Y$UPx|FljWl#=*0A>&yd}1>9pH=`|1Z!v; zXoGPSs^n61Z9{JQi0T$4SnZHr-Bb|@48>6*HE+f(oO`G#nx)3b!3idyI~?M*NQpCB z4auxk&c|eaejx>iyHirptY;^T@rId(2AtqcVS<^GK= z-QH|)-o$+HRfJw}lCE#*bgcbJpq&{#MQWBN&3rBgUETO2-0M;cPEgI@mRzEWUzYAg z-3fV=G7cX|r%RIn!rQS~#~%n0CK7NZ^3ZCb?xa0f@^=MnfOG?ZPhM}mNV(;GFVDtF z#BdA`0>SvkkM5z6B;Q7%TBgQEu}n2;u?)W5`VGcq&UMHjRd;oz*z(mAeX-#rmvDq! zx#}ipY(V5|Ep~s4-VfHmJQghsTVd$Q;!dhg*#X$j&G+YQQ?U}ly3wy zObJKEuqDTKkWk71(6* z=X|Q{sW02e81dH|T?5I53?!Mq6!i)G0+D$ti1h4(EI&HpJ$I?WZ6&%Xw(Rs^KfM|g zhR4YlL0|ZL;T1vPGxp++z3|nz^wrE^OON`FWtgERh)rpy=0zQ9FJR-q)}_GLiX1VB zp-5Uv{Nh0ezaDL8JJ$H6W4WP!`38;+7{q8PnU>A5Y~7L)sl^-JX$49;gG>nSGGG(6+;pVR(%THfnbdVX?0c3#H;BLn_~dMq6+3NodG$`eI*eqNbnO7;z_$ zTz)IF-Jai4?Pd~s;ch~4ZT##?;r(GIPSa<3pukc$Q<4mnh@7vs+wHZ@Yn~Z(em7rzi4&blw(LEXo)-}i4V{+SWup}XWH^{0yU$}5s1 zj)fX%*h&^QYZd7yme?lSpI2n>H*l^=P+RtlvS$GAJvcD}=H08dgYAHew|8(XRLCK9BX6~}IqapOpA14`* z5;;a#H~FOyz%v~68izkHzaO0Dl?E@xm!qprbC)f8Hc=!k2jftsW zb7G7N>!U)Q=jG_`zs)j;t_O(5sOphdkT`0`anG&e?sq=CIcKO`T&`@(tLw)^jfc#_ z)Xh=dkui zya}_&u&<9~!^Ds=8Q?&A`^m26>4l-fd4r86*%$$-HMTX?vdAkUN%Z85BQ z;};U6G)WS+s0Vbpj69GMG?TNZWR&j(LsR5kYiyTU(4YE2iK2+_t0^N0C+Lp6>rbWR zI`50njMClbUdh=KK>6|;`yC6ayu4@G97wvscw2=ImKkkH(>R>Ap5k}FMklQhx5vA^ zD#c|PnJx70ix<5YPQJA5ygwwbX*84Rs!7>}pM1_LOW{hV`=To*3>#zwJ?)T1a_#t# zxXfaChntjl3dWou*@yI=*fK15MIz`g2>4k&crl*X-F?kJtdTXn-Hq!_0 za&cg<7_4twhFG#Al2ZevSgN^wh};ON`d_%x%+9@U@<(ip%5fK0GYBnvQrB4SgkG_2 zhf*ig1IMd6FVfk9t=(XSy{z{j6LD&V7I;uec1E=Z)@KhJL$78KPHyNzwIj0s?h%Dx z5txN5%24agm+6(3&_X#k+lpUd{4=kb$aH`(VgOu@DaC94%8AMz?dTi#9XmTY3;OH}jLMQc<_LO+ZxCxEiV#Bi6VIxme{1$QI5{(6B23(fL=nP&zq z8zvU8EN-eXx237iEp4PmHM4-YYUQi`FbSv5;Xl3DoqU21IT6f1VC9VD+Dj5TbS0-J z;COdxxrqq~%`AMGR^9JW6Nh}!cp99N^6jAk2hj7G-&ZgiXr8*B0vwDa)>yJSl&-Oy>4e{9<_ne<0; z*RngKnfaq97+q4UH>A2$>yHhfWCWW~3WpFr9ORJ!6~H*hXtujMJ)kVm=D&H6F8N=@ zO+zk5_Q@r4oD#K$<1Ef{9WP@~#uzM&g6RYaN{sKeKZopF z<^2?o9-M;RAQV``&IP$rHlX`u>Ok#dE&U8v10L@#R{vRLRK7#lEtrX|WPxVo`+Dw^ zdt#s+ntuf7=a(+<6_@E$CGtETVQSqvCaA@c-MCCVOwc=CwoXHeG;{2%POzwL`1{l8 zjG-{fv2G3tXY&lS0$_tNxHZG@^}P;U#bhPI#HWhw8WCFhTrJLdMH#++0n~)#q~C3h znPAu}2CWWc@p)zA(1D{Yxa%A*>DaoV%Aq?(;<>%x$yG_-*82s&LX1$sqLbPLjci;v zK7)LcG$Uby2_wftp3hEz%WrA(DuQj6Trz0GIRDu07D0=-3LU`_Axhd}bZBVHBsfI? zwR?L91~Ij?^7r&4`%uVKzrudX1t5g0@6BYFWd^&>rneqH)>{B1IgEl%Ydc<$_mNDS z{GahKIb|~6NxzZ+0nXq;Lh1~tp61gWs5|(D5esn9%U~s1DA)+rKbdocc8?eS4VfRF zUdVgLP@sY)!?cBz)v$$XbKuARhdT!f!i1#MJv|D@Y}|vAsu#7h7$(cjeWV z&)f3P+o?&|Hicm;sPYsmHhYXRpeaAPOd+7iOj+YNEPswxZbXatUGNf|kgMKeU{vuE zYMt2zGnvvl`KNAXOBW!93{HQgBX7r=dSP>5);)}RQ2C+{k+1KQ; zVAqV()F}37ZDF35z}U#R*IX)AxZq_loLPa=WhZZ23q~u=k-Ab#z*bZL7V_D2AcCO+0( zwWkk0%FL-jGc!8t*9coFJuGSt;*w49A7l+?%g`+zYA`a9yKKo!j_YXNZr&6R*u>a_ z-?hQ27s+Q-a8}Lp74t`0ZX%Or(uQP%Ie62dA+a@%TS16kk_Do6fz`&-3&d|-N zM+(nmyeXU=v_APURrI3t-maY&0})w7rX%V|#nKYabcZTX;EAhGsA#V6dq^O7H?dsl z3PD7)rrCVMzYj9k?NY?(a4v>vIuMt<*A}W(qOXJ!7AD|3CXZ}ZAf8s43i$Kdv#P`f zX@((p$I~YJJz7f~e5!kQ$l0XXK4@467b3YB)@;lB0vK%wx=|DnC(CCQc;4UI!)y}25Z7IA2}-qJ1IReNBhkI+eHaMP{$j>$ys0t7fqhU8Sf!OZT0 zX1NW~lT2*<3=`nBoP#_$axo`+6UT_*M%+8bnI)35jw`+PMzP~dy3_gq{^3eUI0EFY z!R{l}KiU7ooMVFoo>WOjj{$;xKlx!j_BlMU`uxgTBXx-sjF4GE`MH^SS45$e&8o~b zZtXQia(vsN5tA~snSha9Kt47I#%rP*-w88Pm&cS(fv35olSddj6yPJ+#R*aDC@=-Fp~$wALT(6Fh}gOf+bXvWG1DcPL)H0T@}#1de%#mIW?^)f=mmZuzffOQ^$B$mnZ?t|D|2 zk7#p@ZdZfXOBz267S%&P7Vzdq9hW*%Ov+XX36Jwhj1~F>YeL|Od-R6mW)9vk^GQ&> zyC(&Bh4Ks5$ zf+)}>!5DND+#coelLL53j^v{gJ4g=sH=D*R6eMAP<|J0|Q$Gk;XcJ$2F$xY7`n&&b z$#EiiLTRR%o)AK)wwgwWJOXV}+CC5)Ddg`rv-EqelE*oRIEFg3#HLn~1NTIk=ZIq( z0v?lXlJEx6_xL}qTW{1!C21)!xf!&fKM(?a&oZ{?p351%qbE~~%5P}IfUjsf8W5wr zcJNCNQ8mxw{n>%~2@JF$c#?TQpZg}dvHaSmqtSR(8i_YGmkdpUIcp@h;fTKqMP>Ru zo>J1IbcG6N!;Q@mO)9}3KvEI>hLv?d>4(lpHoJxg;Z?K}7w%&`V;`Wx)0$aOfBD-m z$MP0B9yyfYy?P1ZDaxJE!drlsQf^U}N-oO>k!*ZptD4(j@o9ZW1@gNYHOJWgL~%Z1 znWHhW#gAMNr`QDCd{hqz)cjaGXtP+|tr<~Em(B+x1lG`CGcD>fJ>0b|sv3I1<9UW} zRz|CoJv)>aMN%kmwuI|mQ8jfC8$gCc>w5JFPDc!%-z^yq$ELPzk}DBLmh-N3@Poi1 z?MOuX$-OW-_-fV@;zPOd zmnU-OEFeRZ|AD&sv$?)uTBWc+W?gIV%~WX_;_S;hcAp&eM?YE+ScIuJq(QM6CFvz^ zJL<7+qXphn6_*_Tz@d_!FyybqN&#* z@^~$2SX=*8ZCi0sAh{6obCw<=?_ZU{+_FL~vdTT5T}5318o5ruB9>`7c_lkLQ@5&* zr+5c!hgY3vA^;gdX0r!=vzn(w;XAc+R8`u|&S}495@I+Y=_bKH_PCQ7T{z(RIlP}# zW%uK%(p<92Kl(Y`8!geOD47JQYEx@CL@-Q}h;67cEq!pw*IBZstHj(g$rv|VUH;Ir zD%SgnT$T%_2D^B*dS9inELCC%MW>J?eK;M@@afYW$pXZmrxx2x@=|514J#R-CyEQiWw{rM^^2aIf9OQ@xvY?H2dqnRR* zohSeW87#-#uq^`tjrOuyVJc$(m@w)P(WA(S?t@?}nClfn-xJ6j(&nH?;u`x#(T=NQ zf4q%qLvz^g>sHCXBWUDO2}YT!;4Qp2tjGev7lS9tY$f^V#RGOflik1VZUv1-O?W6L z{ec1owu1rOGNHDenjxJvirH`fGt2_gLXOW7O7ndP>&s_zEXC4|gZ#;xajjuUYD8^$ z4T2FKvJ0WtEiwz(^hDv;~%a0yd(aGp6zKGeN0tl&CB_Q_5ygCliXU71nPv?Q8 zFwpUId%)J)A6=vYG^sQY^KFx|^kYfW=&^d} z!_y_qw89dD?T%3CKw}iBH5m${A%vYefsY_C6}WFiMa-Q?`u*sEW_S}8{6PP%GQe$9 z(o@fyFe`hovbRNiuY}b?+Eg;)>0D4KOIq2Ol=VFSAvN$fmW3`IIP-a0(#)C~sgNB~ z>J%;b86n$g|H5Q(kW*Wzf?%m9m#9!}LD*+;K=Z(;x?D_sTSDpZ z{yr|@3O*kgN(J2K#{m6oHV>W3LuKUXm3iQ#@X4n_|U zDu4J(oy-))#w%UD+EZ{&jxrxcC{>!ST^+rmNU&8dlxlMc7ok+Nu+B)PBJiR^;haKLD{(GUo;->dnIL(d zLfA+VQbuvx00db#WYssNOT`m0nsx9^^R^_O!Uc`rcWE(_j!Neu9)5t#%Ue)96jeZv zLC%)OAa%a?HlA;s<#0lqR&CIc^_{aX&fh9t7RBWaep8A4MC1qm*Mv*lrQ}1|#%b>>{j^40t#7yqlywSU2j1 zf$U@>=ASw9Npsi9eak!pbo+MI`>_xO3rwBK9Jmn-ZZ@9f*A$0d)KpUL+nNv6P)iR$ z8oaUsaX1RXIsy+{+wu>6a{!vlMSC#AXlY4lCw~=3y4({l+nGr}jc%k4A|(;Kc#3Cx zZF8C9YxT#-FfT0A!Uo@3v>pt~i%QfDCzUD}<-K$g>LVVPH}o*iE|z>af&a3XgUTjV z)|@G$WY3Sl>_7@_6=L%i!49<3!KO8dqox~>%P9$u&zT0>m^vySO_A*9BK}DUT&2=g zgkG(V^R_vy6EB-TM2Z*vyfvfs0wm?Eq|cUQqEIxH7r>EFUQ}llGsqI@acvnvn=VaG&cit~Irr0A0E>4T88f}j z*U|*i0L#a5(~(1HziekTkPDEr_ik#9O}17>=c%Du^vs_zYTnzFCCE>0jQKdC{1)Bi zv1sl=fygZ}NFuIKBl6kzcdhdc=I?xe$|5c`FDC4QL0dBo*PhTPX?4Xg1%fE#&)_qK#__1=lG+xC>Q=@7($F0Z~)MP-r=|ks$scCX}*m53|>b zolWqc0<0+425Hh5+iJEiLpV~IUcMZ^7s%|u|ETac~tfQMEz)=Hb1I? z1>=sk#Pvs%@9puVDxywhlW5x{#Nm`C8cAW&`H%wojufW67l|R#RlQcIa&vtj&%87d)yhx7S z@yOa0mcQ-s@sD<-`waKVBwpcaU}ARU@ewsI(96&Ys7znXnjZl68!>y;lxM!w0r~$J zd#6~@f`v#1s1GN0zdtTAeQ!vlrq zpatV?v|t~>*R^fcqw8MIN5oj9mUk?Nh0C42i;%gQsyibCIkumE)BmX7J@_yTN$aQs zviw52XXvz`^5rC{)bHhoU=GDIiAJ%OJ00L$z6Mu@H?}RTrYd>T;QLKdL_yNWn|02T zXtsWWZJ;eKqgr0oiN3$iOL99rpzYa{Y{Q&6W0xM)3<^kIc`!d3P?xIVkS96dS_7;$?gq!7h#4sJ^{I$S?mc?X1= zGunPraNet}9X`dK>iEP%IeTlpqIG~S)qW~hC7Qd~X!c18*Pp0>&-MOXkEjg=OM#hp zGO!fn72@L|dXQ(T`LSK6332R46I+?Pe=!XzZy$s&cSMTU)oBRq?QisJv_~%g*Imq` zMu6Fy{K8n#O9`gpbqr)(RGZ6LMpz7KMSp_{xA7PHT^+G%knCeGQ7f?>r`EG8fJhYm5pp|LRpw54oQ8{C zvMa{Xxno81oJU-LmKAt!uq65LU7Bv;=<7}tw(!^JG46q>qW9?fUFbUG8utVCtDW8I z#{!{~M@&q6uhtyg1mS^hMQZTH_KZ;w!QF_oemtQ}u#pf&3~Za-IrqCA1&|PE%29N= zP?z?JjJcG?%#Qr#x(b9A*0FpYMQlmsNl$|PoCpmplBNp0)CH2*BJ>^lsT$5+&dgH- z%kzA3h}tx2{x_Uw`Fbc*wuV<*W~HMV%BwM=L+9ccZ(FX}AMKQ{AZLZ0Arx)34io&wfA5tBd7hjLvEoyuSW*<2C@EJwS#7;lb(p|0#d$*jvb^HQUd-!B&di@If6@0>@>*&CP? zb37`T!Xg3HO7NU@l@99bAM3S&7Y|gSch#4Oj^W{$K!6m%LgKuhWti!LCs7%9T%IS}hk)OwF)yiMo~ zsWJTd0;{expOJZ2ACv8;gotbW6_emR%wh}}C#64kn#|YfkVY zo;>#z(q-IXZU(Kj&c&zU3rJV-@n?ZKhOyyygFfF9CU~#kAeZs$3l$b`;c$*>NM5Vo_5%W%x?5u4PX>9bd2#~<5|f&WUoxGHt~ z5&rGT0ZdGDyBJvI#o7{PUM2ACJCD7aYr-RWITEfMd1N)awsU`2X#h0cZZGO>a>up` z>;-rTrhKkr&rTX`#btzvEf$8^V4ur1^M#^okSj$aa}x$M$#xLUwjWF)oaI~S2ivS~ zze9Cftf9(7Xnz~e0M zyVW(Bc_scl6FwiUe}N?wBGcP_eHIWqp9b>Fpq>nm;Y{6Lo9N#nu02O9$1K?aFsR{6 z`ji5ZyO|v+hsY7kzX@$TN(tl1B8JWzNn8GTea}QG(|MHv*~P0wK2+{&`s8g^ ze86JBE$tqdGlS|N^WJcc6O1%08Y4182?9Y?gsZ#8`#D33?;b#4U7=*P4;Vbs4wUI| zN}ez-I4v3jR**-v=$3oc{pt&J2#o#p@~%E*ss}f;@*T$P7b_?qNobE3b%{+;7{hPc z(^w1=X;7OE2E)E(&1BxiCpm}LR6Pu+Hg9t)H-psZJb_k#?uHOJTi7CJ;_rfzAwZn| zPCmv!X-^V(0xv=4`e)8I0yR${F4{EMUviCIK0%??JEC{M>oENtj{1+Qf;XhBFsnWT z^WXSc>7dt#UnV`fenn0ROv#WLYiwnGbuhM z%MDL?vL_&G5ws+;ddlIG(tOoQ}Br&ILLsU)*x$YUq4jU3eN+gsjA* zl|hJLyr&Usp8`*1@2qrpqpE^7NGp~C!X~%Z_4A0j|Cl24qTx?JUM1xb7EAMDJbqi7X`C`qd zE2h97&FJl5%pcdBHZ>JLy^(TJ{R+S_&bns2wApK8^Pt;B6@VrH2B)@AJ~wA^bUhU2 zpW(H{jGt}G1BDvdsg{9d`+s~e?z<%dzS1IFM%^2nK zGsG$her$yDOiw6fiqP30sc(v1uz4k&`o`tk#HLAwVI?)op!nd_C=>i!Wc#I<=z|(6 zZ2Vci{emwpto8e9kVPdPJpY*PVU#}njkLe3_69TmSTTmh#F8>;&V7y2a==ByYZ+CP zWS(FLFMAmd?ZJ1AW7+UN&o~B&+$W;A zky{Jy`^{S!Uu88K4WmGPwR<~3t!V>ia4JgqVdWWEt1mO4d*RUccV<>^uhspuKMcGI z^uIzD;^#FF{M~`mO=(cxzf)X~Ugn+@n^GMUx{^Z0!H*HmceAr>hd-V$M%-*VnKyXX zo370p7T)Hu0R)Ke2omUKbb85{(x)%KPjTnQcA1{vAv!@N6(K;ZYc>uM?5-G1|5O|{ ztBL>pZ9yd{Y0^+?mvO&d&DXgl()&byjSd^{^l>-6o{{@66|ju|8oT~a;LJZH%RegF zf50mY_)H9cnf|l-pF|cW_Wuy9|L;VW=tKy%B+t)LqVXP)^@liPct*qB;`&;{SnBA% zX;O?CGy(_$#*uN~V+sVG4J=`C*;mApnat`9zwD>nr%ySr-nEy$+^f%8v!|}RudlD4 zKR2HUC;^({mYw@r@*Zr|@|cvs@_(kf<<+P_Qt+!U1&4@e59n4Z$|3E3nr-1+jXp{`6Y8Hi-Yjs+D@>71NLP;9DVd%it~Vn1HvbY zlLYXiJq|4@L?jPz=F8HLPyoP>+mrX(iSoO&M5IsOn+b~3{wL-N$anoa)@X>CY2@`c z+a~nGkO^82yy4c@O#Rz~EJO$dGUI>r#evOrBr$kGq>%1I{y_bLgV zXP;DKm7{Z77R$7OHzvA6yqEaHD_V?0&fzA#4^Mrs@Onz21*-8PJnR-Rh(>L{B2ygp z-ZdobC|zezfIxGjRz~KlMNfP3b$G5?{KhMF(=$(L&dWaONu!IdaY^j?_VozC^Zomr zS^fs;EB_?dafuvoeYK{84dO&yF?$KHvC`MJAu6Z)(qi@^25OJJ5^Am_#~{zmtYBx6 zTO%Xz6zO=Z3+hzR>|Kf4AD^&H@36X=iPY*+CKDYxfgI#0JNjN54d>$OmJq@7NX zX*r~nt%i_P>{;F#k$W`cFnTIzQXUXq7Yf8>aVwvAEt~@68O8o(dW^1JlyjuQEcfu1 zjBE`rM1Rlq&ajZ(;KlDO^Ydm#`M`+5k9J*e0XoT6>{nznm{sJqrTezBowxx06wVJ& zE(r9%V%4!MM6x>j9VqKel&BCb4IWqj$e)+HWYr!z9a@!QKP##LNmP{zHb9H{CzHX- zLwJ}&&EfBPfuLcRw0 zW&BXWB7?FrG&7BVNP=P9EsSp&=SmOVUp|xc7c!~DL>~Lqk!Eu?_h`!b9ZDue%lP@EIPjUp`!-gl6|hMU3SzV(a8D8nN^Z3%Q!VMo*UWrdMeow-L+3P2n6VX=>YCDtW)&_zP{OAEQ= z;(*Vxwn9o|>5c3ggFcETOzugGJmcZ-;mz$4m&zTWWd?5hw}~IIoof z6M@=7%T)LoL#uumTz2bBbBZmVHaY5}6X+J7Tdk`jx0P*ko}|=Ear25^mJ%%9n^c#z z$v!H5nH3`qrl3Dpu%Y=K*nlcQvmva}m&wAV@-S7LSP;;i1vg;roQk7S{vy&?JD8DP zQ_cpdDSWn+5c{kXMQG}-^TQX?aqsiKs=3?^afUO)@@f!ARjb+JX`CT=9bDA zQ=I>pJR*zNB1~i)MYTk;!fj1s;Vp|3X2evbd8MviHAHk3vy`2<1d}w0coSN(fd%oY zZjSboe(=~R4P<6Da^N%G=TvyhU9NREt&Pob^uGGK8dZvFN+7{$X3*<(K?&FXNTLcp zW?MF{#dTITMHZUs{N4N97zPFm??9qM(egB_VFc;XvszZHTU~EbJ*oJq_?)XA`I#iN zjP>2Di*SGX4C4_YyI=1!cbF9DtEK{}cy5h8k`_jjWs@}$xcp*nn%lFCf7v4Ko*MH| zf*8(lI6sL2!ZIxEF=8<;)GRUlNb%AdLQ!XOwuKN8ArWvdPS9P zMo)KB4TY(}9zgmjmX<0%7uC_0y!jBB*Lez;P4Wq)5FOJ2`@0~PupdcfnLDmg$nTXj zaXqG%GSks89jl}@6#wo~Sm5H`5Gou@!AC}_Wm*D37Y@II-mof1+~ekM7t+UX=&>>> zgV6i>j^7qF8zIPnm!j(7@r+GFlrAl}LQtOQY;`?)b?+(C9esAzC=;YDeJ%a@@YO1O zh;3|{7R|OsLl%Aw-uQTBAXxz>gaK;!2pb)JUso|>M)2Zpqo0qS;(tYr7WBMHRvSbT ziYKkx4dDv9PD#R&(Ihagy_YOs!M){pT11)iG@B+7>-U&o4_a%bnog=f_bpoH#da^ zIjt`JVOoLmm$fjtXC1IsN8Dra$_U3k3Tf${q*9KeHoFFbo~oG`f5}jl9{vK zpe8lfyWO-ZE=um)wc^+gwEpn|BEJB4N_XYXiwA?$y??*y3&Klkqo77?x1j81F9(%e zCu%XoM`vx)?hK?+W?uZ9ib+9RpoF*I6{i~Yb&zw#Wg@sD@SY;X*X zfK-Kdriqi#elRNhsrrvJnaasNOA;1KduKLnt9|n>6H$&^_bt>G1FfKhnTP6y$QoBx zzD6QAqR{F5Wp|j@I%#&i-kfuxmpn7KAnn`e26F5w>{w64^7w7P%@t=xyichs5uoSi zyT+~j_ED)b$cAlwaIdzThd$HpLUD{jVo>SCPu?-XM!3KrrI7prHiQU?(bJdw)H z8W0!qLyFimN@VqZ-M^Nw88n8i<^_7G#_xV%hgKfn2>UaxzU#=Hjvs3fNeXPNB1__` z(g7?1Gs%qk@JYrgWqxB_Qikab+nl^^cR|h3I%I#fI_W^&{N8Il9Zp(gY18az!RbU8 z6r`c=!}%@6=xNWA+rN<*L|z@ZhNN5k$6fenUrJEBaOpjiosC(QNK^Ja-Cj)-QT6Wg z`%?*IWD5kj zS?ovz4|4c2{ylRli%(I$SwCFuMQ6;5K(UO@<@-T?;LSa7&le`a!u=f}?A)otUmUAO zzoSp`NgABdcbCT0;}l@G1R{?y1LBgN)PmOuH(E-rYQ2|8cnwQAy?k{8+6E&V@2%l? zInv27tn@wpQo(dfwHd3FhLJK0+B~6~(PGc%rFe>r@cffOKFP+2fqMotQVS(tgSKXh z4OTv#D+HQ{s`?DvHoWu*nPj_R6Xjk;Q)KZ%=~!P%%fqm+;pdQTt%ZtLb)Ah$Cv%34 zsp#%#MmFhOpOo4|>E41wQX*sL`cb|s5qY(H+vkj*up6&W@`w;T3U#pk*zWgWE%j9h zicJMUm_Ic~Uh7l>sas&J6VAaM%sJYPnY3Zav^OT*jI@YPKFMx?qf70GYrj*kP1~2T z9@eF$R7P~PR<5}gXU92A0EbB~4(;5YND3$wo2nT#J`oyESP1`cgn0pb4V>&oMxElc z=61H+dUKFHYVs*G_gj)NrcKjXXkt>a6Z8dMYjX!k&1R+xSrurW4|9MR9qT5X zIWF*UQw4ZdPp=-QxGCO9cL~)pyht=+k=mb%Ztm}X%mrkPwNs!wbo?303`k!5CA;k^{U=A;$2*ODtxqi%#y=g~@BAIqGobV0 z*)}=)n)|s9yGIBo+8*~i>bxRO(8~R6no-JEQ)ApMma)FPf|GS$#$m!L0r)$^IGpJ$ zy99f46wZr}EWMSP$VSb#BVcNFeU9UvQMoNx;)9^vdQ|GYr(cphq?hmg-8T~tiia$j zBm!pSr)F1I#iuioE~_wwWrGhuzoMZ#kCVK(^k($POT56gQ zJN|L(6XJk&&z(n$d3`2l&1RvEEx}b_mGP5DvCJ@UM?Jf}8m*tHQ{8qH+hVVIR1DF1 z6bx{c7%HYgKzA6GVa-|f88V~)4fM`P)$d^UaagG$pk<#t487D6#-KtTn}P4`{P zi1sci>oTGmPTk;bu918>D4?wXOLw(?+FGcII{u6Muwn#D&pv-3>;Qj8-YwXq=YW;S zy1DCwXR6ski%ZVK$7EMG#_;xNRMnd*J8LZBl--|{8Vfwv*}^G>NK+qoyPQeHJdKGK z*pYG_^M3!AE4Tc9(spBy3Si!1hw&OpLb|);b;)0>sua4+xc4G9@j_QT26yb2uX$>L zN|%XUUK$clQjI>pwpZ#&kAY}dFmb8I(HYw<0AeIYpgLL-T@_2aLV+^Lp3}UM8I2Hd z+V#A7VgPBcj6`NLT`JhUcVKa3H)#B7fhSqk4nOOsMi7yE|F6aciMBk3DB|n4grJC` z$;+w%bKvmx{6qvLo;M7vf;T|)Noa+s$Dj!0-hG*^77Y&v!Oqo zzML|j&)x>pv?HPo9G@)Cd`98{TQI#G1%%I~2X)SvqhvQ8lnzU`FcL2X2fA?G1T;8v zV?E%K%Cy8Yt6-{G<{;ZtH_i|qFze=0!ffMibXv!d**s>e*^$3CUODU}2O_R-HXSB1 zGE;LMD}QS~+UNy0%V!f9{-E#!!+`aD(qx7uleiry(GEUPGkqzjdwQLpV2g$Hn!lNM z++jVsXCF>Stz{-t#+j&?n4m~`JB6V`__2;l^vnYB#a%KcCyto7V{2Q~6Y2XQgLn{m<%us(q~N|7wQ*|M7oU z`+`%!@&9dz zdi36BdCuJP{{HJGOP9)NUe);Ye%09});F1(J4k5}N)tqZw;{l)pr+!c+9Jp7Fff>TJfQV}q^mYnL8;rYon`!_Da}`Z%hEYJq2Wt!= z(8n!t*6chzu)?P_eOv zb2nKGG%%0(5eg1Zrv~0<5-7wG2IQ|&MpCIO$t9!0Wk-%U7PCMO*P0}}wkfzTM&?Bi zt_RV`2Q-zxLeIu?r%Gk*3Puh9T^FSBJzfD{L^K7X2YvwP&-XPj&^4e3aJG7>YZcXC z6YjU!{;OCK!T|(u7v7ZBQi6HfTf28lje!w_)t86`eeegc?a!MqKo?M#-qQF36j0Ys zV<{-eOYaBYZxU61HN0Q1ml_A>*YWW2EGJ0acZZ-$pRbF8Aih4T9KhzUJB$cEVBDVz zn6F>0kzOn+w$1f#{mkoB-9EZOKVFz$Rnj3`lhdEtEnl*8{$FfJ43L4BUQDxZA7oz} zLYQBYIIO8pQ}~l20LMTLi@rEi767WSY^0~zHrOr13p21lL1uWFI$a(B@=%~(jl~v! z^|gU~8JV)h??yain|C^x2Ro=B5@?&~4n}@}p?QRZ7&rkKxLQAeJ|t+re2sR%Je#s< ze=a)^L}eg5I}r~+ImYnc%LKeE*S+E( z%3$xIa?U5eao_-E_pA_kE7b5V5~A=9>D z4#1x<@|o-Z9+ABK;#(N__l^S;z6gJXlzHR)i1;Yg01qKRwgzet{DueovVNQn{otSq z1?R`m582lAk>|(!drjG*ZCC~0Pe|FJ(+`Y1in^s zY<<0*i_o~p&;3w=$pu|YK)wkYq;sIg-mDY>^$?Jb5(raHviM?~LoF;skt4{=v`l-e zzma(*9!w7Tumq>;CpY~T^e4{{Jo+R@7fABrE5 z#GjQFJzMM`8?uhvgltz8#lm)|uaW**+y{zz+hB4paj%kyfmIR2*e8N{gg<(VYMCMg zbIvnFx{+%|#=%q8t=2h26TV1YWlQ~4LQf7}K}Dj~To`-nA%hO!D&2VNagyC)FOOc2 zf~|6gJk+QwBntKKcIw~k{wWGjrcGpBM;1;@biqpSqLb?Z@p6(o*G$}Q7OUgu>QgB; z;e)_dEAR0$jOLl6#tEStCCR)dmo`sCqo*jQI%(19hJl&wxn7R%0A0L$XdjDs)RncB zYLgF*3%UtY>|m;cZ0xqwdI?;q!Ga=@&!n4pBX6xsNPIEI5p@rs z#e$F920}o@e^7VCg0fCa!YG8YCNd<~s^4e6t!Tawv$kW?w$SE*s2>|!%aSWdxoDH^ zQ#rgo9!Xl<@I!=tJsU83qQzdR8?|b|lvkdT#d)x4wY7vFsGJ-3*__!PK%*R9c3kl95UQhUyqfKH%zYWzM zQ)h@hVyU1ulSMqh4~$)|9ZVQJ6s^|ye;RXc{rO1-K;A}_O#QRsB``@k8;x2SnFSq= zT&UWvn^n#JQ2}35$E(6sq)t$I%@Fs@agrrGCTXtx+QSnUtG?UM!Eq9iPNr{OIo_Rx z`d>oDdBWY!d}u$9^zob4+8}#8N60*1bfzDnJo6ys3`8YDB-7ukUE(5W+hU^fsrg%Hod+q zR!1P~0R=6&v50!=K+U6WRa1gp{PRh$dMCZkjA%xO!7EvpSI6UxxHS+5f!5&56}q<1Bq~eU-sN*IiBEF#2N&cH)7X&2IP| z1RTCD0VsrNda;mR(2wkS1wIpE_6)^Ty-?8 zJfhI_=^|#wF)htNukqQYM-?)_^ibQg^7iwY!hLL-v z4Zdp{;ej?~=3O2(DUuC^=^+jgWol&?*dmf@DwO&iMsjbFOi09qFt2^sNM6As#8nR8 zt8V!Zq@Ik_D8~%1T}NTHTKo7IC>~q*?Kw{9V$?H1G9o#ErC#K6^@*9bO!T39iF;R- zd&c~S_tOlH3rb2GH&S!{_5oP5&p9hWq}(eND5BOm@U(qO^NJT8?Ol{N`sOeSyKpcp zqM-bSUlMxy-<>}d4LLKdDuLJ)>NoKs=Ge!b2&%L( zp64{U^Q0M`JVv$Ky0+Sk%c^RFzbCBEE*WVLPF#CEGLz$>q@Q&fQxunqIh$-(KyPoP zrav{6HvQQRw*6G<;#D+MH;lo$14G~{lK+T7QA0V7#M@?AdxSJ#80U@i5&BgBdaGxT zz8!zg63@$HTd0~@wuVF_fnti$z1=7Lw|VQ3UoRAjTU9A$Qt%kFp=L_KG}Fx#U{5{J z=%^H4qLWO#J>B&SP}<9$*j)FK?#b7S(9RFcMPLghbW`p<$`U<~jaHg$+e0`uXK&l! zzGRTd`30WPtcO5XxlfZLg=Pv0SFWn?#aEDR+P7_uQm~VM-oHU`Qo)K3|0N!RNW5?> za7^MQ8|G+zVqCl6te<#ik$j>(Fp$cglqE-B%-I@;t`xkfp<0BGu(rEURIX@b*o2FX z4}#b|G|ZGF9IXalO5etiC|+pj%`~Y;a*xkBj?!9^%C88coYKN7cH2T-BrUAe5sK2b=0!b*1cJ(CuyRcDmH89x$RgW_+%1Ukslm+9#BNXWy_cTxpZ`+&H&+ z1A%UYt~QMm_)I`B6VC2o9#7=v&SE9%^R>%@GaVZuR7#8#6s&cc0)4y=LnW}-G;i)$U+ z7}-Y0Qg%KFX}z26^rkbExnc!Z%wD;&7hcTJ4SfN2v^zOVjeka zohoe*CS@C(IZ*BHZfH^HY|WNWEQ(bMy}Pb5B+BHxP)q8jj%HRrHVfPm>5>AB-h>v0 zJzm#6ZJMgHt`&p8P zwV8_7nE+@}n}s>(cq)^!%aM~xk0~kr#C!~*O+H0xT95juvkq%yt)uZ&vEAG*osH&dN``OJvSLy)s3GWux z*v+<;^$?CH8(RXqliBYn=R3$h?-rA;xi){4QJ;b4_@)S|`mzh|1mQ!&Dkiip9IC#b zpR{?-xl1sXXLViut64_>1cx?#%!aJ6WCBG!87)ytKoF4#IiHAvf`z12mOp0dmjtoi zqCsKXi-I_7DjX~~-%=k?*r8&$YpUTa1cQs=7bAvNGQc)&)?bo*Z7Pig;S#U!38|k; z$b2lW-rb%SnLMoM%@Ku(4PH+w)tbkOCg%y7!hYmB5}onVsg~CaS zS{f;^xbJ!M@~L|FmRf1$VX_=?7-5ClSCMv?2Kfv9;&ziw>BT*O9$7Q}Qqu7sUEp;1 zznQQ;cF!~}wZwvwM8;ALuz2P+n)xz+jIk+w))`H_u34MF$8U|GtvZNDrnoI!iV($7 z6R=?DeAJQTZq{^gx##+R0BCcimg4lP?Sb5UIKOm+m{a7PDOeK=e>OLBj`VR5po?h2 z{YG^@GcR0*W|m*c7M;({2dy58i@;W}%@W(IV!-7IvM!9%mw% z2~!k@WMH4yXtqA9l+Rx)Xiwpok3c+W{&{E!u_s=TtihIA7D;8E{Ki4ACoWm-0E=y2 zz<~2Ww+)#NUD%^K91qQBnhuEG{j1vgab@Fy!DvI_W8^zqoU#Q==p(>Ii4L@9o6--U zw39g3xGp6U+QpxU+>vH_)W(l*64?cF&J8j05a}_{`yP{Rcs5meCmjhPP~DP%p)Qbo zhHIg+)bBBhd}X2zauZ93bS{YQ8WmD8_o_(3qq3_RNK87p8l^Htv+&|68}XW@ju*5H zWgMoRcmQ*kxELZt*3or-ek8f3F-WGsU-h+Rkq*jcs88Ih+)+*QMO=VkcjK^9$@}l@ zkMa;eZUNH}FP-kQ<7bQ|sTDCVTkosQ87;$FId7Q$pt#a|>JiC1#gN(nkVD~G&IQrn zj)CUDxr%pjcL&@Y6@BJh(rD~+E}8WyVCD^52~vH3UY)>MSqLXC+o-I3(>XIvOwV6% z<;7R|q?p1zAY4UIpDJ0~yGM4%yp>Dbv;7J3ce?cWx(VH+ge6q8M{q=)RP@ND`KFl~ znR0*I_>>bRHMQ%oFK@5E&l0gECWZ}WUsFAZGhs5*VXiG$1YBYZ zqMr$3Dc@Hs4ZW~6r}Hlzws9G@rZej~aTmCFDSsgvvbm#+IaN_whEO}xRI8+enlaeK z#jUnmySp%7r=0dq(>g%(&AqLWffvjBU3-es_J>SqH7qcye)f}IRD)~1j+~^EDn$|X zbnSKV>^qRZ!*C-bWR+^nF7aeHB=(#OClXP~2nCs*XoOt}^Z4`7(VI#AeV2;qb9ydSc+>9O%%fwEt{Xo>!w7yfRw>^ zmCIcPeuz?A@Qe?jkCF8~L=;w%8FZEZhI`5iB=xlXfrZNX1RH6zo_su_7jF}l@fD@!Aw%x!=G7p}pxUGORA{DDO(qE|GAB0uHG=*Kyd2E(6}Xn! znbZY8G|Vhj#u$>=TORry?K|u%Q=$Novxz zt*5i<_>)HA6f;>Y;D14~iU~I(PoE};oLZ#(TkwDhB2m*EL~qGwk&>R{8Ca<^AE9v$ z*1b3HMRr=%1tqHFikQz5iasw`RZ1Q?g>D{dK@E81rqk`ev|}4s&awU`b|&BFB#bv( zDQ*CYZin?O8iNnu2F_BWC+cvfp6BUJFSDdpD?ua_Z)lhE{ducuABeZ$z(QV#UP@TJ zjrZ4x)d#+tGg2lYoWUenD0vte23&jPtMHx97~V3rQ}Dww^H_1-rnsw(0%A2@-QyYu z^%&smGu-ug@r-xOg2+tOB*+BNg17DrEknsH0q5M+*7#&P$gN8w-fkNF2r+xIIF^@Z zq^=(ieeNMVu?Ot9h5emD>G*9-Utpqr`(|yzPeSh8dBHw`m4;{KjSZnp?1l|%q-5LL z3X~bqt^cqJm7S777;aE2(>{=-?=s>H2uY*{BXHOc!Q)Ldxv@ek#EB(wnhw2su33{D z^~b|E*+Qy)ZUp+Tg7HA@9VGlo@Y1)<9?B~Ar3JEYg&C99Yx7abhz7)1r<9)y6U1xT zqMp(tz^Oxhn+d|{WSz(xnmhG7wNrR3^a|C`B&4AvcFrg;pK^N?irn8$oNi^zD!IRo z0)SryK?kJCmHveoCZuGr*mSTEj(Lm}x_j-a`o@8l| z_&?;fXCO(5|L8@Ozx^EQ{b``#eR)7p4m9$roZy(YXA1`>x|Mq;Z!o*JCt_()gBGP1 zx+BZvzG-Rl_CJqT`#JA|)i}u*K8?8r+Gbm1LwaH@N%d-tWgg$D93@Bgd?od*w8AeW zu!g}OJLFU|&Smo*>PT(D+llYs&8`Tdx+x=nT+Z%~!;!u|oOr(wrh02!e|WpuFkx8< z1%9@YGZAmVOY06XH5EkT&Cvz}=K9 z<&+|#3X-L zRXdqjHsiys%dkA&0Nh92k-pzEN_PO*GpQDq?UiWx{ANge4Jb; z^~LX+p79LwZPy~Se8N+LF<@E1J%zF&=b0QmHXXiJfPo9FjofinKub4p@&bUWG z*SBV1AWnU?3%~CakojV?5|Q~H{)xLXUe{z%@m%c4S%t|v2?m144Wm%1`8^{7R%o~d zPJJZaj0jtVIJEyjtC z3b`@mWxl-MBVDx2l`F_f;g@#X!BcZBV4I(Iog?n7nX0ql9z0Cpa4HS{;%(gUN<@$7 z7w}w$_fgaE=Q^;{qG-sjgapMCy;{7(Ug*#p-zo`Wmmf*W>KoB8BmH@kVvdm|y}7dw zzl#4$YnSaqY8=_V7zvAY?5d5Vr=mG=s-bLG?ev)t2aM(Uy~Kgjegz$5fF0lioq*&0K#vBJr!Tu z#{}_uv$T1vv+u0QA^`CiFB}54SuNnRKA@!;-hP3BsHkG~l57E8mGaaXVSZ0YJtXTH z0-~H|bLKEsuxJ)y{T1Hf;WD4nOhXA(9Q9|!#BAIOgVHr|>n?CUue&_u-xNfe-d)b$AN9wo;M1M1x;C$^gXQiUg% zt>@Tj1hP@KS;AFcyMs@onj)WGe&v-FIxZSghD@Sa0DP@ZUjCcArRo(4%fq}fwT1>k zBpL`Z+tpZZ9gR0+R)mC-Rr70Q9h9pq+v;NNbF727nd(HnoPo6PKizYL7U7aw;yRAzF~x6lSn+CHXjJJ z)b1)qstDY+U+%Eby`_Rx16cIf(kLChi2w2q0u4z$>hf=2$$|6+l8@4$fLzPA zW40BM{tfy{&mR7QzwW7rKc)C#Zt45X#elh31+q2by>M0`rIJ5c+yO_X`(xq*#f4<6 ztsL#)m~#96NAPQF-KDaHalYpr=b$O(Hy0*NCNQZtz_?jhBl*q`{OE&J0O)kyS@1|s z-rIQpc|vJ)#@P=+UkShG)Q~x zOypdLCF$xXWscq7yOR{B8PY(DF5u1~;9iDc%i9k}i4~kGW#jKo>cCi!?r`XsT^jak z3zrymOzo&_B_1U;?#icsKj`;^LUdb?1jlu3go9(q*i;WHQKxp~`_j^w4b;&o6-|29 zB!KMfFIdlFP1!_MpT@yjVmy67f}ETf3PjySCc+oki(J0+m+m|lLmdZM;UsuA4dY3= zHp)&=f5qaL3FA0qC*1#@Jn;ZlEC$bh?&v7Zm$KZ1b>k1@^f1_kTM(5HG1NFINoS?b z{7WF&iV#p?)@`)^21lS?Ec@-`xFy(3E!bS(hL>bwq$|V1+RS;z*Lh2b#>Ny{XvwX~ zxQ{&Y`~;_nc9i))jBs~-uVt7?t1d+^Frlz3C_LzUbB`=0aT9lm~$b#}T<%Xg=0 zM{WjmcGwFY7@R7$*4q%Cj6CwwZ6MCYP+;RXjl3>;Y>9)XEQ_^nPdNzV)oJzCyex_) z)Ratqf<2j$#3!9aD3o$?llA}cU9v8w=Eb7#&dCCZr8QF~-|8Go*zpkpepEMWD!?9SVk#B@gFz$MxisQ?Y3Ol#qPb$w*e z-GqYSy6CRlu$9axF1|30CIifym_ zgQGa_C#IhwXq>EW5(n!8Mld>groq@OoJB`UI%4$7^Sg+f@V_$yuC#5TZ}gI2V;|c&#E=6PX$T- z+h{gw@pY*bH*$*FJ}HIG@MwCpXZ-M~zCE~Mt`Hn;Pz!Q9BfOc1w}Nc#mAp;M>4?ej zNzx9kPm>liR5qX}jQ+85#|si_)k}RIeS=FGH#E+OXQAf@Z}cF$;lEk-4FAQlXP{^N z-_6MXI+K~0nE$tf|35wZzsxNE@;(3G_EPxIC2fGZuq z#^}u8Q(3C|_<@W;9zj0%#MaR}Gyh5Z-2~2KF8!=Tr&|1^V-fLd3Jgr9fyckuyL!_( zp@W?QR{}84#l?X!lLQ}GP;4J2iEYvLQwmmEZ#o`2dM+3_DlI4iYTd>!I$;p zp<<+>q9UWC?GL#v)MQ)R^!OH6_DBWjE66J?$RiuR^G&(S{a39FChG@> zgoVY)>K7gvd8w^tbK`2x-VWIFtF1JQ{6rT}<-1^fO@jmQi#s$heZM={_Ujl9u+f_$ z2KIIG2n6T?crry$!g0 zW~N*ps^<2;bkZ+Mz!qrEhguP6?y;L2wy8Vh(g&t*etH@6?uP>TX9JBBGf@1AaZwPN zGf?~r@c{U5Bw`=QJK@kEjA7D8$QlscLI4tPp!f;m0np#EAK}|?w4cIP z|LA}@AIRfhqMcU+n*XlyErMs=pwUm-i6R^R`_}eMt9N?4eYnpwBFg1i~YOSP>&z`fRNiu$6s9E)AM`C#$JoxTI^3B zulnA85A^Qe$UFUU+_SG)jbAtYsqNfdGuQ7?qkvxi-;wk}58^-}#X|0ZftrwZp-6do zsY|~!sv^k687xhN@6)t0t$GFxrvsjed7X7K<<=h|-|s=dG;`zZeN0~3kySbZ*75)ot*5y4tr!4T7H5VCYqCC_aVGoG26g-Wm;0z*7B@Rjui^YzFc8)!6e9#=ZoJEk^I#Xx2>cb-iseOVQ8;=kEWkFEP3zaP(DI)ID@S1PW$w^ax!uTRC)Jl z!gKOgGs4teUrT~HndD6LX?$ckn>8A@2ih%e`zCReEM84rz3rJ9ZdMXmPC-M9S8<`T45y>G4~BC zhS|OymTfGhw2+3MnV^Kh;FKYXHxAV(eC%G(bf`A+g~r#u$U;Gs{P||1)-A z-+ci+hoNo~Ihd?NpuIeV0qF=HQ4O#E$Gmo>@LGs5JHB{2;b5vqTP6RWKDG8SVs#2b zgYUlZy;GII9soln{}_J@Sf}tx~m@)ZCuBX?jQY%5IR;h zye~TY#@_Gc?g1~A(H?71Co`w1AP%^1I2beWFIlvY=f-JlI2Lv+ea88&j6DrzSw43^ z-S9{CE2BvMCs-MAbT=P8w`pi8O70pW6b(l5+lm4a!zR0bgT_3(l`pj!$q%QdAi*J1 zCq$YxqN86|l;_;}3xsHDp9haz&Ff^5icrLlv0eXCMMVh72TQzJ`2=5})cs!fSuKRq zy0#~XO>3W)gKWb8i0yK8BTbQZN-w^4UbwAB+jr6ED^US2m683$>_l+-Jow zv@W_d&Ro2cu`dmL*(n%%9mE2h$@kS*e2D%KaSd^kuAD!1iSH)7*p#(EF0C~3XglM} zhm3A_Qa;R5P%MU%L#B<<`F_|rBo)?N3G5Kvyofn@Hk9Wcdduh>OCQyPYc4%XR7`cz zJ(7&%>k>DJ%yi|0da<#x(W+MJh6g3dHNyQBe3mD7{wHGH<+3o!!Xqcbl7L_*#-VAf zxwQW#^J)ha75UxG{MdO|;&mRp<86MxHpS1VsbeOAWC{h7)#+*d1-HKYjJ{p|uqHz@ zn?XwFT*{g)ilmd~!UUjX1Y6#ey<;6|i#7nrarE(5fwzMlYn(X+i^W}Iv5ALiYURC6 zwK3)LRO-mI1dESm9ArR~^|x_=I_ioGpip)oDA~Ya`2pxnJq+EM#BXso8G^lg8tK6p z{8RqU?>kg`JuAcFUXPMdU~Cn)fz8NmbT-bSi z7or>A7>nO?K8o>8#KVy>gcd9{Tjh%XWi^#U1ArIbV|5;{9Un!Ckh{F;DjXm!iGJ|c zrj{(2@0o{7t$jiAh+M0IL^)jBX5|e4PdZkALD=-j#SK==u~5{Kw73Mjv7P0J#*5Y{ zmov)Fj6jk9RfFg-R(kSYp}e;=R_ziyeu1*j5edkd>4-VurKxBigDPl5Z|FZ?xByfU z|DIVjp}#G$*|QyJEh^EOy7O3qJ@ab&Dd_-@VoF46Gy9t^Zl;TWqqLvG?w3f9x$P9` zuh=o5ffpHQ6&NZH!9_HgM^ zQhQ5iq{FUXHPVJd5(S?{NP)2O7>8GCc%n;E){qV5ZW;r?zwTI!T)EOp!Z);P`}hRv zt$pqF#ky*rL$F!R1^vKvGCzU{&3bo+HTGn`sqAV-%j3T{ zx9l0&6v#Lva~V2J$F>qX? zW(f_+bnUyS8`JqPN2;v$>RVM20?}3rh3<6xEYfVfV`SHe2DB6Fa7!TW8>5@}B%On@ zz2F=A9)sW5+z+8YLjx#YSWb&~`0;e?c!3yLF=8lNzPgBVV|C*}6$IU{k?s5DkypE$5T z8#!qQ8jB|$oyn2`r5+weehpJArpyrYMr#XYWzg?XGwoZ4a0eQEvAUat8NUOMT67^V z`!vVa1?x9_52@wxxLB{~GI60H6JBGZ!6U8}MApW~E`$y59 zXDS#P?U4WAas&aK5@?wc62G>Skee-UIpIP%W8@k&c6aQO|7EZxdH?_?+abVfHc+d{ z8mYT9Pem`wk2DBfF)7ABtB9+e)tFr>AMxaH2!rA-klKKVQ98!y{I0vOtc;x> zEqG$q7qbS}NN$>Rj;ab}fQq2Y^Ng;Qi+If68KG%KC}uxQ2UCp70$3F{;Hii-xcchk zvtN<+Nc@RLCE*To3kdFR(1f<} zL|9uHpS#VdTL6=?p1Pn3r+llubzYYMErBRFlMQ&fsm^8P9b*7rzIr%Ou517cP5uh5 za;rc0%k-XR@!q?m`GD$iD*Tw+6s=prjmJQVvOM z&|D_0p1;=q5F@#=JlbhJBer`q5Ag|~pxqiE{dzp{5hZ(%MsI42wv%&u^q|ldg>q^` z%!uGUMV>PjHe(`=Eh3{apexzn5Mj)SW?9NkdkpBk2Nzm^qpn^)0n6_w&5?TZUBXpM z6p>?Z+wrQrKpVyi^c%`K7h&M*dgM?IMaMDSE1v^1RP+CVvX~K6+4pgyw?Do+58|n} zYl`~K7X}`WQotLY#OD)!|p{Grz0yecAc;A z=Qy^`U&VQ!a$-Jm=b3gW&uEx|Zo4C~hCBSoJ-?~dR(!$5rJwmVJKr4fe3m5GWSNq8^tZDWXR?WLs}Lt68h$o_4Q zpHTA7K#j_U3!StY`FlK#l?;*sroI-j$H}~`2J*-I)x6(aRZF$8D5Msfo-|s(EkTq8 z@ro-Y6OhIHVxuEfON#}wh9Z{9w_na9j&M1_(5`!<+j>z?s~Br;0r<>yAsgdR~-!p<;cpKf&s*iGx;XRRRfgsa}UHJnQ%qk974R z?##Qd937wP@OVQS;b(S0i<^u+qtaUsXLIV0>O)*wlV!z|ZU&_n-m}2YM#vOFxe6!f zcp)~cTs7`Cv8!ZW{r&3`-bU}6&1t$_h7x#dkKbRy8q&1K$S7kR*R(BQm}>0o3q~Cz z0?AvREcvd%qsbAkXG%jWipTzT0y|l2teKs3#*U-XX=B%rjA*}WoR=$&+ETxmB$`>n zt#QkjdajjJ^rv&=0iOu=-f4r(iSa znnepaOg$aJvv$S3h+rYR;e>)Z|KBLjMG^j7(s|8oSijMpm_E2=`N{wr!IVOw;!d0;>iy|p4CXJ2}Jn!phMHXuXpdx@V+@TK6CWH^ite!co0*}R4O->-vmpUcW& zrO;}3p?fUjReVM3xwybB*@@dHag03fRO5yDcqSUgk|toV4!cfMi-I4%uqM%d_nAQk->{SacSLuA;!KyYUmt{qs&?n^bZP7uwuc@} zraVU^CrGn_UzT5W_WVa(YU#A>^jxPwnM^56 zUW@Z8tCl!MCIoZ`jq2iAC)|2i^c2=5diI?FI-c!4v`O6JF8+&BTOt9!i| zmIKMs^#?#MmQ?Q(8F`5y=mSP7adDua+4j-4i|8iWTj(d6kUmd89!A4E2V-e5|6uQE z86Gdc_3Nvcc5dS0IE(aj`pO(fk;2PFgbxbMS8ASDvCK|>ai(3yYBFDmQxKr6DS%d&y7g{5+Ho;*TZ&XI!D1!U}mV9;0N(>$e3;LUG zTs*5oOE6t{iAN78wL&L1Pv~Pmd)-d>Yqo9W>t(<(Msgof3;J=M4j7bEz-oYr?fFBH zH@=I6oL{l0@K8-n7MFjhZelKDr3Qo?f|dkl z1RtV>^+j>jAVQK<_IE=ZWGyouLR%%#5^vCtg(F%p=wmmLl0U8?md4Z0YS%{w$*n0E z{W%tC{_8xwQ0-cllq?I1`3(}t?iHy;zK*C(DZcjGT`HgG#-83S0xh$cE0z;ee~B%& zpsVXWve$g>BWpz4j2I5)ou$nqJOVLj6rl!)*H%%?=9$c7C){awQDF$;m@#vwy|xFV zj-x0)X$K$?OY+%UZns4jTk71bp@1Jm07rY;MgttC`&Vo(&HorPHj7z_S-O|twZ%@{ zCK5(zlT7)xmE%srB%AP|*ZRI}r6|B7J}eEy?uck1v2fq`ghZcg>L}nhW>D?e9HCQV z>AOqbcg5zNpiPMoW+m-8gbUgwl->~g{t+C5g$|g&Lte=8`{07b6ERnlcDzDm zs$wgltJ@7LFD+UpL{7^iqLXigXbba4D^V;WuPTb5iEr=F9dT@%WUf-0=CWj2kDDiw zmzEJnb>n1OG;sU!oApGzytbA=_Mcn!f%3fy!;uSax8S2tQ2U!r_A)R7=dZ+V z6lfaDw1!EuweCoGk zi}u@8HyC!FdT=vRa#SMWpL3T6d?i$r8@;vBIcicQ{^3-#5WYZSE-hr#`BxNwKL0{* zVr*;HfbyR$YvH>S4SPy{o%+V|{}A+5@g-f>yfBrF`BR;`N1UYsRog}F0(kF8Oo3#y zQ-s$yny1X+!khIsh0exd??Z6f@iDyinY#4S!@#Z z^}#8h^;SVw+b8c_f5=cXyiu|TuV9p84u9Ie9SrQ(leUT0E|&5S7y#a@)N!jOBH}(o zWZJ_S3ZG`z9KkmQ#>+Q%&i;LNwm}v>fPMUHa-S0}S>?l37R$OEBZP?q8@Y4_k}zLZ!3|iFKcwLeu?5 z&4VuWr_|zP5=za`bvU%f552PbUYhPn_E{4XPT1+a!cBT4&Wm0D(zVJMB6V<-m#F-F z;qk;17X`&6Wch)OG3Y16U~_uG$NgoqXR=KLG8?xll8ZsrT$%y+n`)xG6eGCubQrck zQ*cz^HCy(?H(u2zh)Ioy;1f| zaqQ#ji8@p7!L>(p4j|K~tx8Of)WtRm*>Ye4HBtCHQxlkI-2B*0rvV?NzAMH`qJu-f zQv6AT=lH-BGrEu)fpK@sn63xT7*Tr2t3ux~^#YY_MU(?3y4q*rltZU!TYUhC>mPi_ zV;Oou#mh(?XtJ4EyZe5=!@me~5+qj+vU-dczCtAny8CK+;QVi5WqVbc4*4Pi2D|~|w(pJS){N{u69Aom)8n!} zeXmcn>70^lOyqkC1Vspz9K1{`3%hcOZCdX?$u#ccil`WF^~m;@?8@;EOb@0+_MN3A zKt)t4Es{9F2-#y39g@aLE!(fTGG?ycB1zp8o1$qv2xX*zekaOyt!_3SY#M7hTJwk< zWh_IKS|c-x4A$5`-=!uLK77LIGsiN{9ADvT-NhC3&KuHsAx|q2hony|L6DL2q;Y-G zm(C9x1;s)1&*<1Mbn5A!JD082;`jdW44M&Y^{GzG%a+=;v{YO6Q(Fzj_zcQ2TanJD z9I?~mezJfUJO)RuQ07~tCQ)%P^ZweDEt754dr8pPHDgWo+T;5DrH3*Tskr1`up}ze zB^FF4gpICEUGNNC$LE%6g>KFWzmcMhaC&hv)fD7jQqa(xv)b60FQ`jn)*|``ZrzMT z4f+uEz-*p)quLq^Dt1i|m0&=;ICrYb#M7EjQa{I)0(JSD>JXs;hb z@v$pP#PyI5UUcQ)Q0#qDw72v**c*C0l0Q~sUW?e zJg4I-gT#vm6?g1MRX6FyXiy5+Oe_LFL6Z`xldkP>sxqd#(~#$u(mS1AcPZCDZCE-? zxm?C8U9l0L*#m%ZG3mr@MPdvF8wX>95oQT#WO)bc-YI?cTl6EZCEv@JNz>4Si@zNb z$$OU(jsF3<_0i=&g|ySfgW=y()2zf?;z~r+XD;5QZTs;0Wc-;%!b`jMWBKfQtX5Cc zw8HbF&#i42S8kr_<95z*In*SzVcd6%%qMFn`AQ~(%89~jNHLhSBO62Z$gnXGq}JC* zWr$`c_b`X`xc>v$1NTcDap{@nh1n@i?kd# zOg#+|Hbt8vJcE(ImH&itkKlCg@uCuc*!$3_0X1?G6Qjg$~9$ zGACXljtR4Gh)&3|gH8ZKyyifUEv12hjp3N*p|3dn|e-#?lIJ^hHy0 z3FtAOBF0^0BXv#6)6pBY!?OXG*dt1e@0_rsV2;U+i2!QT<&y4hW**a z-tGO;z*~Q#L(AflvXru9GEJ#-+(i8YS#9m_xzs>6I9KsEb)R)tzgq}Y@EU!uJ8P31 zNmw_Z?PI=Y;zxxn~&-RQEaI74xV>2=itIJrxlee#aBLt(utnoBg2V*?KzR3 zD6sa8TGh5oicTV;13RWkvH_LcdC_$4$YwOd5&h24*;nq7bV1*#a_amJizJ?sbC)dE zpsU3iC8egTejY9lqs*)iUc;&v|*8f zMZw)ayBNYwG@fa@tXJCiTG4(4+lxpvBsRK$&vUvq)gO`mSe**MEeIkSIp=?;jt0`b zE8CRBjV(G%?6(mD`*|J>!p(7F(D};K98r8#acT9ph7 za8n4g`6NZQ)g=)8zNyZWwdU z!m7tNlRd|rx3zXHh|Lgf^4KAiV|AM&y)$wRA2Z_46-rdVv`VYK*?khv)YM?USj3#Q z7vu8lke-|3ZV3x81;yXA`56Ejyt4=idj|Ar86HcyJ{9#nTgN3(5FNSt(*CQ^9SB(H z{M9u*$8%{h^uNlmeIg{4I4UVLxC>KY;|Sw@-fJWs`C9@BY%zy?!(eqq^c3K1@BD-?vyx^z+B@lzeF4Syi(6EoE4c?zz5s(=)t;=tb+pE4xt= z>eb?BnYYMV-K#L8qR?|R?k_UcnG@GSyrQJif zlE&zsO8ZE?Q=x)GL3AWg`q3^wE}0CRCd>E#3yDDT-y~7z@#5ECRy8DZ6B^=tRx2o~ zni8tI#GW#y%?rla`?B_T6DwgNFZ#zv)_H2kP@p7H^8bATIoFfc#12tqI8kM_jo1QE zdNPnR`e470k(&9z7TTN9J2cAX_D95$pgOg>$VD!Ath2oq$dWYfx3mg$Z+({^K5iWj z{~%>=hn9_!Iv5BhZsg3o7!t*)6`3M}cNG$p$TkN7r zZ}*svE#008&7Rn78g^O>djlfI)4%e;JHPj(>#HA`_&}Od)L?8QoWIP|Y-ip-ckvg4 zZqss(atJ$lted1LEmk4va(?<8eKiYIFa2;r2$xqhgIX8qqdl_OFJIw z_@h{)Le^kb%tgH+Z>9L%Khh}_+1q2rGvHG%=Fw+Qwc5UG;y^SzzcF%$b9@0-uv)r< z*VR>rQk&GP&z{?JoQhM?{&Ax_m^Br>aU7d07RB=fh)kH^dxUSN{)N1MS}03%>~m;d zg5}Q?!8V1(dU^rM0bI7^cC9p5#(5)bO^Hn9ZE94L-{=Am3u?wJOqlSIAuJgc2wcxB zRQt4`8|?Rv6+`C6?0PY65>qM5POfTI40LSgFE{Esyz_5e;~zOOR5dTg$Whuu$3InD zw?DoIU~x2gDbfLLI8==1BKM#CMBbtg7gwj0un3RQFJsIu=#vg;f%t{>%6dR+_Yw?}Y7**X^+Bobc`*9zJ|j&NNbHp3c}v0-PwJcJXT>PQSU z1@b6;V_5JS9-3d2YkypZ01MevN5|X>H{zCygyE5W2}P zX*HRVNl$+o#i%nw9)nXv;_h(=R%gZwNe4M{+p#E-nddw*wDd5d3Zs3Zz_9}S*Lfiq zy4e-?^>A+~w@;@+U%Z}~$Ri{a0nXcZFI}T#^|c*`HjG^_#Vki!nDSuLAMj%9zEXdv zwnnVVR8vyXYTCLLjY=U|*bYW_UtkMzFH4eCx`8_|`3CDEH*$%1;H2Z*tjbw`B9sNu zGfE>7R_L;P$VAOBr^_ezTLB;?+|HriX=7dLtslToLolm&c_B?Z%e8h`N1nx?Ki-=Y zBzk%^y8shMFPe2#@eh^xT8**eRD!GOZE8{VO;%THK?+TxHyfU~N%GzDMal~iaPA8q zV=-9*Pj)>ZGK$oC@Tja%gLn9`Hezm#%QHrAg|1>da0V|TN zJwPF*WIw%+p7~f9cfZYlX0Ldr1ko|xZ@_iJWfhivzZImv*+uy?Y~i2Gs{Z3TdOB zUTPB*$*p?O%MxvC7I^1RNQvua21IkGIB`-9r+x~v(%jF1@qeDqb38Ns_MrWB?4el7 zwc4CnNM>Q5;#Io#^}pu~E&=x?k<10jQR`ipKgeb>_FvP11!c@ZrGBe5Z`T@r(cLK(*kaW;75K>IBcyXUFsJj)=G}3JhlFv0v{M zeMnr{Q5`TruUJl0L~Y;0r<#kK!6en~#dgiM?d<782#b);!Au#W*mn-q=0Yx3ecK~_ zIKSOCNIRyPHJKWZUZ9VM`M_<^+1fhk{o`CZ0k!$%mW5|EB;VZCU_&L zu6OZKeCVZ+=oU8IC$-wpNXXXMZdYFg+KY!5{saRR-@xQjj^0AXhl?lB zl{%2m6Kt7(s#iv-sw@j{C*;S0vKkqH>a|jiiwhgPor$PjxO;tvnh2l~*njhBtAAZ^ zXFxJTXRu9)=tzh6iM*98cNQ%Eop=bUGJ;d;FZcq^T?F&;pd zWV25ZPekM#CN1$AWqan?=MAEn4l;X=kf>*}UBdK3F82d&ci;&-hW|d$p;T7%U(aTLo2yFbrSiT3czcT5-$NI{D)GT41%37> zj7W3uExyx>?GDA;ONA$H&z^$mO%%YNVd%8ZiaGu-AY(*2Hn#j|fZgwtC#tU=+0p5z z^kx3Qwi%RVfG%>2;$xLiHNOdvA!tKUD0zxXS0SUg zfwUnI>=}r(&|+_v=NVGeInYC05J2%&2jtXvEbA+wnMS>sO1SBs*3N#xi0_tDteV5O zwi$-CQ&S(l8Lg&?SVDc^$SMLT2m)j*MsmTfjIoTasz7qAVbHjub9cj2Qj6dO^3LUsbY5u4ERKGaG0>)XB=V5Y={lv^w_yK2KkU zj@6psplm)-zj3xpxU~_ZMkacqZ5d&np<^YrTyn{l?L`k-j+;Xh7TZBW;8FS1ysvW! zfA&>MNoCJ%Ajd7#vCF>Y6WuYoG$XOmi}~o0B{#{sLD@IvpIUn7DKsM?W)YLp!XHfA z^S9-~gnuMsgpE4B8{i^O*(3MQ)ueiq`loJ3QUWQa_GE>X_ynlUtqLovRF0i=Z#4x$ zJ(qpVo?Oz=-7UE`$rx%h6q55W-NFt))swB>=RIp@?M?7mk$RWq_`(<8x$C%*_^-py zRq+YtzGB;P&qEoksH!*rqC+K76+~Dr;O4yR*H>|C@iD`Mt6}UHt zJ{w`JD&Vqmti=i=H07jy7`~j5EbQ9<3iNdZl>X9E*^2EMPG5Qs)CPZ`$jeX;^|!3S zmc_+SqCMw$C2I0zDEFV58t<{V1=2sfIA?hHsn%I59gYRR7WLdn#H(;QCK%T7d6xu0xT`aZ9S^j<%P-Cz=@@IhGH$7N)lL^LH$V&6athgOm`#%6&#cn5G1b=rpxf#>J z+EOWuzH%=Ic>*ri`N;bG$>Zp&O9hJdZ=|O62MScqM@`?IC5|QyF`zkg&7k>WAW^*K zd5ZE+kpKNbK>CkuV3J^!Ngu@lKug7Zs_oNpR^?G7i=8&p$1`Hgw0^-l@@?MIP+ovb zbMD2w18QV-;@r+f21zl5u>-rC?G3a994FP{3{CL|am^Q{>6rYTuEH>gElEjjaT{wy z&%BXwF-!%-R7SAHps-7xA`9n0LW>zQCHh4jKW4v2ClRu&Q;}bDaS$J6aSEugDK;J0 zW7YTjarpH!W@8(~(*g8`cDc|LO@R`4knBPD_H9T6k5Y$*9#@6thxo&$(5!j3Tyd9q}1p7Fi%JUwqEQaJ2V60>Tbn zEcpa_94J=0&VHL_N+(B=5O?%|Ic?3Nw^er54)q8P(^YmBMu6dgss=LKVpB&T<*(Of z3kVmY5s+})x3HRgW>~>xGG10&f9wo9v)9hibP6TUy!s> z-dsvD^QXgB1SEO-p!L*bvnSxWCM4NIVi6ev#I%KTbiUp>XN(r4AND`R@OJQ~UZ~rK z%$>}jhEWa4ZscxN5TeX&OlXbml$^=E*y-zzop{O#qL3~3@=8?! z7?)|8DoYA9v7DQn`R0k|sVMkXfY3B1UTV$NoWOTYofXgy(4E166xxU(gCR9tF?va* zv2*p-f4lc-I<5x!F?rDiUQAsZ{pYkueN_e2uh9p%6RZ7=-#=*Mp(4jULOXr4RW_P-MbR(`g@nHsolvMm~7_tg?tl(pc@uohUo-dRw&U!jOCDeq)x< z?1(KXeWdZtlOg_%k9IcH<9v=QH{&YCwsjI47H0|kT#)G#ruFmmu<;u*alK*{U$l}N z_y!}2lBaW;3E2|p0O7%B@h#?@;_Z(QuS%x2<6(1iSz&{fs-~wdb!ZceN(Rpxb{2vZ z#9~P2Cjti{dQp_5bp-c<2%$QzdgT=}MU9>&ON`)(&B$#5gKhB9#78(AlN3~`Os@EE z@Px!QtBj?7xZkNt8LxZ;uKL7KZ%(F?UF5#v#NfIGOgZ(=_*6$ zc0qZN^7ypQe86<789?WoXjCy9SEE(Zk@P8e3O7?HLW%&f=#cP& zku2!u?*u0bN0^$L9g>upqe3(A3b12*_0Y8?6gwvEk>~xJs~D6m9Zr3qy(~?5cSz=; z-q3k_Wzj9%RVlf+k80J3IkzinQ6(Ccsr8Nd+zJdAjBmE68?iHOC(}(^?lFK4;iw}b z(|#u5#T!P)rF>1b6J<}UB&y;f|98_S7&VTaimm4xEE?y?h5Hp`1?1OP{yALljGmxd@^)lRVpt$Vraeqeq&%b|cSqLHjRe z!@on;3-d&>w-2oPIsW2bYQdjPXM!k}W9BtA1IjARelIVNiA)7ZYj#kvq--_GqhIfB~PkQO6Y)%0=dgW15M ze*6ntGQ41H#_799wdflFU^a(&N%5qn4J^r<9puVmlq09R_``Vwg7c>$G#sI z=I_-SSz#gQb36X=BYcy3oK@+tU4!tH;}Y>O;)LJTB9rcc?@wXi`Ccs*CbM>(nQ=1; z2v6*rl$T9RwQpR|}{)YQvyum=q0iJ+qTHptXlD2PJT?XP=;+NO)mwhVp z#~;WFpQdk)`zPtD+j?D#l*JnV1i31GYf=0c|W{K#}y|g|!1=PpK})Dtu|ec{DoRN&L3(9^b2dV}*@Y zYMUw*0*|Q$v`+C|p?c50=?kw0G^_<6U<4OEXUrdDWJH1B1XKiuW!!ztq~b!Miv-)joT|Rb+AeTD%gL3 zDaMAA%LiE%&$*}P2%z#!nm^T0!}W-oZAxu%y_z3(|J|KU%?Zu*P|re9bt-^PHPh%l z>W}*c8F4A!YwEiOM#}aFDcY%^idF2JvWvmfWrZRF_d~}Nc2ei)VhFe zY!xx*H7Gz~@eO#{_y0|;>}E(sJsXUzWufM6iK*Vd>m>|R-bMN$RG{$G{$JH=w*OJR zW@hF7e_d-9B6e<;|4B>d;NtrKrlrTJfvct3w3hR#A0&cGtyd{&yr7FG$Hml)6TMgb-~p|NL$}?sl$p+pK(?Z2AcL^!oIEdI@My_>t;^Gi@Oh z!$c5!g1-eO1Cit7!y^MBQ4K+Y!JzzY#1TbiNEEaO(NK+yphQDR`EmdvM}&e3dY}$L zqRK_UgP41A28MzH1`{I(A0i793M4|Jx@RQX5=AM5dk7B(=J5rR=Yl(s?yCaxczg`x z;UQKU{klZ&Gn$1)N=!sLd{0AAat!knx)x>%M1a}{a}v+9M05tm>c1{R3f&cyag^dE zMzT--`VtTj@Fmhz6ljYmp`%3XgN$|r!4lykCfGq@+B@w7(o3X0dNuV0s{t~h1e`kb zB5wijgFXZTDIs72_`y!1ChmfRhzWp}_JK&@?E>?0!Cr7{zH$3N-&{C>fCYjAGCotj zn~>06Xt7Nl5Ix*L`@agABm+U0z(M9zmrq3BNIZdvu-+(O|4qQLkB}d5x)9nc7*Jn9Z$PhB$r*U~pzhaC`0oZ|Z+7wt zsGI1`F6u9DIRNSv91JQ7*b`hlkg5Yl7HCL`QTVr}7%}+g9OTWT3StTv0SV~m2E$GM z_hRi65t!>IG6eN**0{qF&4w5#zE|2F91VD*gaG8%q3T!WeHZJeY2sJ>;n!Abd2;wz zGxJdMD#G12MS3B3WiA%Ez1i$ z^gVE(_ghI(9l!`ygDAen`&~Ze&^xYJ*)C*+|blM7@1`hTk30KDGW3lu)h&nvE zOPok4V;gB;^JOKf0PTxgB}!qvwQz(DPjkHsJBs?0111 z>;SfbGBYQ9Q#MSn3N|37M!E2Le;X@lL|{Th0O<&yy0KsM2@or&E6+aRCs6+^<5s65 zw0tt}qbKfh6jPQ}4}AF?3-3R0+7(;186WFDzSw$tmSP2r={mJoI&JxGjvWn`Tt>ie z`SIjrN_cnN7tb$IQyO&Trq^U8VEa0uHq1u4bJ6pur23+pldLe{`Wr)BJY2WyDSCv< z?z4lrTKc!evpQ35+t!@^+#>_5QefGX)(`X>_GtSF-${|JTa+{YR+3~)z4YTeHO#46 z9ur2Y?op=uwec2gt#UhU7xYz)&c&SQ(p52UMe(&Jt8J^(fKA!s@EX&mx=dhZMiEac zjZmTTJ=>UF4;x&kDYG1wv!ojY}>YNn;qM>ZL4G3ww;{( z*V^aQuG;IZ+V6)^b=R!M3izk7a;e6~?uPH=QR_tOkw)rR2H6587#8r+1sTUtCe>rEk zD){_b(%eZ53|=5GwiP~&F+2@fPN6;`qKT=#hL%BoUWTA*GynBAug1Nr_4L_C^S-#N z1vC4shoaDXOpLi75jIn&IW8kG`+9uw{Pys7Hn&AV!XMWu*`4l|kAD;1SL>Iwv;D-bHXc* z3n@)D`@@wln8qagjojI1|9qJ=GQ zlKqgv8Y%HSBs1)?!-?p41#V9hL8D`XMPuRpp1M6bo}9_RKMcKHz2GttH!v6u%_{V+ zyFZ^En`GAUsj{5cDou|;9pcB(9+EFC;5?DrNw^YC6h|7PWd3HIK5!>`ao3>+9TgXqZ;Fv%Da@5soMrSLAz&N|8~V$Pvd zN@vmN^i7v|a`$EJfI6C_j?pAKMS$t+npssIW!sAumH%w@4K>8<;O5RH5)S!XLk7}) zhfEfhU#L^}^?B*@^rjM>?a6x|AhmwcbhO+k+%Xm#?8dV_?=9DjIQQvQnbf9TNM077 zHSY(#E)cvl+0ZsQ&sz3{B`{A{hj#yUfs6TRB^My5&7gmCoyAP!B+>Yp)2WkD!Mrv1 z(0Ny5yEy)LHB*M^$3|`7!n{3dR2T(TXLk}y^6c`e9s;ajj~bSEld}RqnjEN~%8M)i z6}7-pgGdU|`wEno=BLP)-9ZLrobos}o0h3$7`;8~`4A6lUf8XW?7|bM7@lLu>J@4q zFTX>|l~7U`veK0Psx13?zSH((6*_B*TT!=bUNUEg&2?UTfnGCssPm%X%6OR}0jfiX zhW#wg0kS`G@16WAYWp@zF?vh3?k zJVxTrP%xPjr|dt&3%AbsVBEax)vmnkx%;|i+m1OthVq#zDm@RAo(}hCSr2HWT(^NN zXqWg6NZ@E5)`s=8owVfRA{w~qG3Bh*7{ zQA_(^U2fb_G?}N2M9y>P;IWGSi-wFo6i-}j-lvm@VIBOW5HW=)9*l1$U_y`wd z^)mz&F}t$@f~Vm7`!^b_JoUet6g@p?OP^#XwSWLH)1=gM?F-1SXwyQ4TRGNLdtV$L zA>A3q)mGWA%LEZW%o%5U+Z?U z&5ziBXIPW;Nu(_V+z)J^!M-a7$FnVPt?Fm;Vc#w#GbO31zdqXpcZ6-)wNW^a(XCSa z;X?Y}*6L@g7SngfevOAo>Mj~VaMCPoeSp8DH5U>O)%P(ycZR~IcRMYV+;pWGusy_L z=dOD6%A^BDT1=&s3vNJ`-fpOT7@f73_Bp4RqrVKYPGfYDDXmmaYhGuq|D|BsLaT}R z0?2Dn6eH(x$*X*uJ_dLN$fF70O;Q)`{-|UvFN}^p8F%>%KCK*Q)xP0s>PH3>SiXWK zzH1gMx`P67hoeqOpoxLxqGLLfI%1X?5cD83=c|j_3T6@~w8rAbIR*#%bskU!yl#kd z#r+9YYXj+-+j3D}wkvZ~NOL8m!gwyZuPi{ZP#ahAG1#cT9DBEJ(PTLd{fa=AqF)o} zcb)XbPv>SaWh@}q87b_L%r*R2 zy(Ogxcms*kN1R>LcD4WlmWH3ayWe^lttx9+=Xoj^+eqj>#B!U1hLR5BwXB=VGP14N zXHo`_fdsL@YXJxHFYqYp{Vgn>?L;qiqbi?|VLi@xZia^(;FV>+28wVXBm(>#Z{3i9 zREgS_B1FtFR462xsOMqW(6i~%Y20|-lSHf+|J$K{E-~4}Igc`X>psOCd^i@ocbTnH z)M(t46_k1DY`VFv8ltav0b;D&%}$ z96mPC5pS?FyIzP+x1HmfnAhACMtPp`Cg%2jycvi7k%R;b-#sj7Q9e6e=*Y6~Apq5+ zLOS8q=&2xBz_af-`{ne2A= z$)xD*$~cV^(bNEK7?MEP9bYnMO}TUpy=ZV~y36eoE?+7rsi~yOj;Sfun{Ibjn3IES zatAu+fS5TjE}A>$97M<6FS5r}{ASrJvrpmJeCxZ@1@I8 z6*<)S4Q~(o%V8f$>|WD>d5%tlegI2edxOe6fVs3XO9Sx^E%W8rDsB6hRr5kdIIlZ% zgz#z_Ln^$#CFr^_Q_BT5uDBDzYWlTSO98AmcG&J!U@p*m8%wO}yXbq>^oA4emE?nc zONwBY`Z$w_^J|q_>BLCEW8@_s-c-Zv<+}`xml*)k;GvM4>8U>Q=ti*zlqiIgPG@c5 z`vB#w>z`9jDwp&n!RYa|fW&zqm6SB8crh#ke5vT@i^RaKhjD$YG-KOB1 zaEvwfy+X0l=NMd6&nl;XK5+ns(V01JRIApSt@gg z-caWOg6|$iPPva5?%o|P60IFuh4D_^OiDy_tTxVVTaT7Wj@kFho}+daJYXEQv@_Ww z_*yJ?_$=RNB9}+Tze_!{8%_xMBhY-zsU1h{A|YUF48xlIR+1=e{|@r;uA{EP@MOGb zOls0XE?R73;#b#-eeiiX;W}|qtW;*}_q6z#Ha5c5(?kbb1SY9N+p_yNmdyw`vepzW z$wA%?D<7IsfM`AXS+(iN|J?D?_#$&SDKoT#qTK?HjCPu+zgF00&uFX2b`(7`#=q-a zj#S7@*QrR=7|ZPDbe~{sg4pXg=nmvns);UZbtbD@IUg6v`>%&H9Q)aTPW-(0l&o|C2h;qrjtt%fX zH?D;FsaI&pn2qz{&RUcH!lFuw70a`fDndQu<@$I}>N(`a)w)Q8zo05NfA>SBPy2&H zQh~t8WYxi(yo*Hfdhk!!e+{~JP06m;&v_ig0MMHeWorhhptjGJ$^68ibvGdm2X#W- z5H>Sq#Gu!6Id9^(lco}2G7rVsNO0l_yB4;#NY*|)l5=8cMcQ75XP4khW$iSSZUB+S zhfwNjT|a2{{C7r=xe~=r1L_l4i`NS4d9mR{rtTbpYjjCgJaDeB{PeJSPP^$LJPFPI zUWm_k^J*g}k;QA(fX3bHLTV$8T-HXDe)9EH?-*S)A113ACa=bbB`z1tzy2V}XpWNAs5@0!YmE3dBI^^aaryh|l{m%387 z?^gS_0~|D1kx3ULOdtLB6pn~;9p>T;(a!p{lL!LNuW}_c%de9FIyhr*d@}RE?619<9sdntAg=y(u?I z_mWCu_n8y;#9m=eL=#~!xjO+($yHXn>lS47O7%WCOp z4489W2(Jnv%#>fZVoOb}GM>6k^$t)N7}lKC-r%wg7mA(&`0w7)W?!1eLw*U#y{{bi z<8R#xZE!H9jJU%d&Y!^X3~SW7qnqISy5RAA7N{x>em#qk#CqnnN}}KJC13YW61-*T zN+6-#^r^lw2T@!S@&V!tC=yCF*J`w43XtsWrJ5LYXr%^!qUQ#}S@xh}?`h4bxGAqhI2EHx69Rs3=DP@?<`Yf#=P;=tJ>NG}w22+pAJ=HoL9o0;|msCS~JTSsE zG|-~ii|e>bF!|iKf|M>I)o<)KCpBelb~?oJjjE@)W}_3Ff4%_6ds-^&yPsHBjbMod z#xjp^9nPNjqRQlaznADRxt_}sfb zS4|<+=~K?dc&gP-B*gf5g?c2Kw+6LV!0-Bg_I88*5YHDBo!h?+gFG_4%31ui zLt!VZE{%!@r0piU%cQY?$q%x2Sq6P$|DaF2eTQ@*i@iYeud{72v*kcPI-0!=%~_)8 zk(`(WmBxM=n{Yq`pWOtd_u^Ru?+{cV_fg7}!IU6<~EE|cAm$p=xG_=Df4F|(l z*k5a+hOmMi9bLUp6#Nh@6s?e5q`nL)Z^{FI!dDM1fso=_4CHPYf;i29IUu$C4xBO z*@CUw-TYNipPc>)aJ4HF<7|6LMqD^?(Kn8QuTRI)a;Ubsg1SMi@WDaLR7$$wHMS|> z62G7^+s&-7#Ld$@qNW3Ic}Y|J5+@8jezP-sBjVovdto0n3_SMU2h-#jJ7e(UGCOe{3PJ= z0l*#E_;ddOITVpp>Th2rntLG6R5wgF**YJ5-+jbJDjnunS+N@q(bbUp=Qx`nVGJZ> zpb4(NLwxH+j@V%RZRBQ0VnE!kUgi(8^$%bk?Hbb`&9S{IXDye5XZ+=JM+z1a`?U~5 z;+dc`*Sb7-$=HApW=HtVVtreK_vw3tfyJdFac($M=S+U zKLm?@W}_0~Pzs73mFkz72oRMQ{zTR2Bc$8hoa<9H_ZEjCFCE??lULmID$k}&h|Cv> z*}+#?X)NFeW?JwZlfZVG)jE}|*bCG?7-p&oPI55cSCn}(6^GrVbxJq$E}-;iN)%nZ z$BQ%`eTXK0wdMrY_7)XXbR)!?D;At&cGJp<{fkoyRPEgao=Kf(!lfLErI#^%)^l;l+6Fp9~#3 z8dZV}vQmw;hI8bG%;5Yk7+U)B3Yr{~Z0(vz6bc_Zm?DE5ZCZw}IegJBCbKLJR2Po_ z;I`DXM*#{09UiTjS4SJnMPFtH^o#&+U_-m!5Mdb>bh1=A__k9B-ZXEeagH6&!@#&h zX56Cw#AS#)pM6g=OuN3}!I55SpRoAD{~(~C{G&c{d#9P~a zzvqG8vLEi2SRK>E$F2!?*i^cU3sj$K1o{OAPXwj*-a4zSHZX@yjP>70=z_;novBCy z_;>hMay?6*na$tUJ$9jPH>8-616N5>XX-!i6zK15yb$AXg5Q*r^k72_WxEvQsfVBj zHslMiD`_hkEC5sjCi)9Xa8-?>J-jXFFu#iSx1+0rKUTvh<|L^Y zBleLc@Qv+uqs*ZTQBZX~!U$dE<}_R@Jfm)EQ6t(=vWg40in%vd{Qoc{`*P>;rGBDx z?dJuH-e*{^<*P zwbEqsKMmJd|Ko7&zh6bn!omLkQjY(7tT8JGBkR9XjsF+1#!=2-ii%f{tfDUY2{^<* zaDsCM5`F@Y{%-qe>`P!An%kZbmym!|fGyNUBFL})Tbxso&n)2!<7xBj%6m(FtJ%1c z>1g9^+7$gk;uE% zsR?U9JBQJN`2}C-d^51X{km4-^e||}VZy+tc+$RqAbt_k(hw8C`T_MJgwA*SnzEVk zK^}$$f~M*6;YRVd#M@KlX?d>yael-&XZ>mebG7qi z#K+PZ0_NAxSR{0GRB(hUpuV*s?Q0cxFMRX?o8oCYrltTOUi1cN-3TiXMBfG>-7nFP zb-gSIpuIysi0iklXrC(4pglam-;@6a4h{gPq+|aLLGd?=uSvn! zCJS63!rA#qAMyQ#5j3PL0Av{h>`Sv6b-$!4Bnb4|5@q#ls-}i#)@Q%@#@3;K?3@j@ zCjHCeLt_pikgYHHzMpyZ(78oG%k@kw3J{Upvr50SYww}xZ)a105o|&_HTB6OS9ID^ z?vL7WySm1l`BVr$T=b##+?^5Wn(ky2L|w2sKDbT(R7HLc3Gi@utsIB5!;Lm>!cG*8 zP|tlyD;XCyG77hGXIim+CFIZ3Fw8gqc!_a-f<-RH?ZG7H%sUh{>IEcCnQgTq8T{>S zjKpMS&5zD^Vv>5AR`H;J-4lmlyj0C)NjjM~8Dyq4u=V!-RbI^|wf{>ezgWHFmH-#I zvzk+6a;?CdGJ3L>2(LHv(tk1V*GnmKxq`Qa)LVEx0k zzH$omG>82I1a)o49@TN-jN~e&nweF8-E8vii1_z`gjDU>5>|Cyr##QKChlRK!NR4& z*+gs&Dn25jtz@LBV-y_B?C3d4e)ma*51@&G*k{(I^5S){2%8 zr3Rfy%~;!s+b*djUZa|Eij95vOeD*k&i=m89F{J?z*;D{m{4UR-M3t|Q~(OCVp}8_ zMa%?5mHHc_Z0zsZzdXkJI<>1LL_7eyqVX1^6V!I%)B`$Pji4n)%Tqc8Da@CDfXa~I zuv^tUdt2I%9&*|`6FSBSyX28WX6Ir(#u2TN--&mA*pN-_k`65Uq&PWZO+6dp{T-Vk zEwT2DMNX|KUqFpOn;ETjYX8uklvSa#zITIB^{1KA(cisE?zH*dngo>yyo8U3%db=x0K zOzGQ25ZDC=z}RM5G`TD|xU{$&NP-fFdz6qtAS-S?715Qtva1PuzMwi79u4H!>r%_y z9hSGF6T1uSn^zRZYP~H=tg_x!6Qm!FxXyeFjB8Ob4GI&bVr6MV%k$T#S@#jcy0xOr zm_E9yG2WWzPn(P>5hL6fk$5XRJN?;sY2NW*8OYDp4XO!uT{k@1aFnlkKpmGiL_aAb z4wn&h>yctXZt*SX)G3(Da~zAz>X7rzAMnJzBgKu4>#su3Z`O))u5zKS=a`EtJPSQzyNDa^Dve^3HF18>a}!={*+v$VX*q2W zC6D`1c~{Q-F^~0vec~$DYnQ~oDVaAwM)0D4JuH(SnnQjAMAhz2{2bjB{{+Id@n{Vw z^Ah4Ci)tDmhMHSTT^X?(25TEUxx$S{pDPWixI&J8*A~ALFxT}(=ichle-%%>y3g_i z9o0MU-SY}Y{TvokYFC(8;O0f5HqsiP|8V`72h*?6nN_XVMs+{*N5M*QdQx(2R!7yRZ`Hav8nF>oRWYWDr1rd02(AXCGL4s1zng7}z56a&~vYB zSUBUT&03T=>x@?A$kiBlVeOG1uqchVnd(AlIFXepT)g2iHL=*O>RB>5xk_8CmZW<| zpFY45OV134SA9TyeVwC>T3m91u1pVbSbQ}qjK4X*xNeg94<+iI z{>K&ehta-wW%xYTK;CN-x&c06C^Gq-onrz7HKicI%qvu$E~Cz02;3*LxuxOKlEGF% zVne#qjmUpms_n!oMSF5&)58_3m;gV?{J66m))q=N8L;9!7P^03#G@2{glJr`yn14o z5UTO@rS0cn&T^s;_jymoYoe99q9(yf5;G=Ios~k9 z=9tX&%rO}RvK&ux?*Nc-#~T&+HLFehSUdRr1iB~>Y*D25J+Zc58Atr6Hu-rju9ix!VQXNUZES?Vtc^_A05fLvcdip zB0sdj!tn+yFw`{Lc=9OM?G0ft7*x~DyV$b?k5zg-eB{r zW{yVcqd>2T!IScE8E51{;PJIg=;w|#M#;_fl#8%J@RSzt-r}5aBLF%H&T#!98fKl`%_6KZ7FH9Yfj4C9-~h4f(g@L-EC>wiVkI$fJDNs0|yFo{rlguWCU4J*=z21 zAXnNZ-xE2+Ul%NH#Fm;YtXZ6_StYBE(K@DT98uO&g@o+W_U21_mOKg#My8&gFLo=8 z#_!P3YWBSCioC%!Q{i#7>8mn;vPrQP3vRm63f#Ve2j`M8=d>z{mAP5uQtwkFxKl~> zW~MR#XTl77+hPk%R1zbW_?P{t8S0{!NQuE&LbSh?6*!1KauY;J1EIUJMwX7iP}h7| zG8u2q^=`ef-ika z4UWtYPwB~MxUG(M*ajr)ZNZuK*pse*G0@tj$iR!@z~TDfQXy=#Bd^!Jq1qHlQL3Uf zdo%a3m+F<6@~_PPdPcrco*0E5G%6IW6x%lGpWayEo0!y!2tPzS(-sQk8>l*}oDIbsrj5s#xkCZAz>I+Ba~=eu_@F6uc%R!;QLaUuzphpE z7fNzGqBuR}lLKj}-h#`cF`ApH+vfUZ2y#YN;jhLY!=~OhGIhVPc5`S>t3+KO4FPlu z-u_t7FN=ub$lR)TL&x1waua4Nw3n8XpB_dlbz2wK$TeX{#IW0wOi z;Uortq~j+0&y%La#f^|VmO$e%`${4bMU)J2K<6ze7W-+Wd98*p)# zce-o!?^u^&)c0yrhaxIGG;oQiN~>|RwHg6jeBsgx($J6jt|>Q{{L{3tpu>k#MVI?W zg??w^3DdI0P(ppVAlkL*;rOlox}Z&Ky}Q&#qbq_QkC3=5Hy(J$Yk5%1zg4nH+wNYh zm&Lwjb)t@93{fQyQ82``bNAST;~^(ul?q^studs#t)U*6`14&l(frJj+p~rPt*16B zTzjE9{oAjx(Q`B)qZw)&iVcut&LMK}LI8hc3jY*lc=mO8(Yf;t-Ul#JH}TDIsdXHG zO~mFOBG@n3AySaYd;NzX?v4QUOt0mlor8zl{zA?1pS9!t@ln+Iw+)?tia$GvxON?9 zv%9La*L{j51M2}2$aBI~IOSW%^2m9bES7ZE3_+A5EvrEtB-3@39_OW9y)z}tpVZrn zhe2m`Xh!$zMgyx;1WA3xeigeY>3DqgvC53urWUwTooE&9WPX<2*%V_QGkznU5l!2| z+5LYZ(#f3nrjacyyy)auDF-msXsCv@%QAfQNg2l? zVfmjNfQRI&J{F+A<{YQet$&eT<=+GQzFyQTeUEhW@^g4>1IXlmNJ^8VRf!5r>y>;^mR zb_v=<9WOe!%iWF<6%0@HE=nXu?sjZ`59a;m33e{7Q=Z{fJiy-k%Yqx*YO-sj%BwTd zd=1lptZPlAm9g$edxQjBmXJma4eLNthstpjzBBl$RkgQryX!5SS=Navqi>eQf`=FL z?qF$>x=+N~`a+JDb5(O+9cw96x1)tTyIuijp$plTTR&j^y=L6xJV`YSp?{{K?>q4r zHZ3+KR*5bDBK~*&C#6tr&94BF`vhT*k<7duunFajZOk?kcnez(Q8H>VUal3P7N}CR zCx|Gox7B?uWYz4`WW?&#y*D?T6h&^TYVk`RB77y8SljTSIu73bGOAoq(GI%5zdmPevk#|2;sTW0vKye^t zBHg(PcmiLpuz_RN*_N3BGF}*VuHWA;z9X=G$?mH>g9&;;A;eYTZ!IYX<|)vrTNVoU zyK7vcaZr;2b&$7HJUQ6zLHnBcZ539FUZ%|uly+lny$b&fomSOd$~iexnjqTBdQCm& zGaFkMzU)9V6ms4pEiUe1`te)H-e$0Ah?BhL;1LBvj?^LnhfaLXljG5XZEv6pNMH=QXliRym}TD$o2?GRSGS6!p<)$ z+Q}zPGTE@EIY6X6w~@yyHA~-4xLTyRk(`FXPYLC+)?qNCf}N!NFq^#nkH)zdQz_Or zA;;#&3%bh8I`$-KPKS8q7pK7qJ2E$I>Wignk6Gk<%61N71q?cy+oUPfr`IwDI(Vf` z_qg?(ll{A~L4xS>3#rHG-64pp%J$g4;m`I<8vIsSDAsn<8)GoSsJubg7ULcvFLpQ| z_LS1_s@(+FrdW~KV~^Uj(qrg4bcoTepEqlaCv+h9!^$n3kqXdi89`8;{tR8-+pH`h zPl_nU839=Yv3_ct6+1))a37Y2^8h8`mSH4V$u|!gp<~pL5*|73DGM0`9aVe_^3Bvs z3=ds?Qm)O-Qw!2MFMntQOi!X30O?#it zZJ<%@JJDGG*6tygyib5QV%xTp>WOTR4yp-n!S@}sQ3dhL%uo+f53an8_=xRzqq1A) zsOT>+@iJKR4RP%#tmT5aT{%Bx^)kR zuDaW$2ai8<_9V`ePhTe32Zy=Dd(CutMcgE(!^Vu%rmzW9v|%lSUasX0`5r0m-HXhd zwaL6Ix8n;z&KZf>KL6*0t4gTejdKN6*y@V<7ODexbKxxqBi(e+3_D!Nm%B>QruX1N zYaJ|xe@bf}N?oDa90obkTM@MGnoz57y6#Fu zK=~13wi4|YvG@2ZEf%(F1isWQVqDweDj@vKa8KnMYe;Po*Hq?$hL`DO6zLk7dvY=on&f%Z;?h_3L7@SZ z#oZR->~K#zkrK4vl#$#)k%-I&nYoosz4KI^=)6<7Hg%xkYD_*&@10hA@ub`Vf-g4?_x8Pyhh-Dfm=svW>R=l(EU)BYiVHl`d}#`Z)PlG)sO0Qox0;>^ zH(1$izXnFk4 z?LDijcgxv_yXI|l3?oto6@6K8BM3$4qRu+moOYYK?NNLx5?<}5-zP`w&Ynk&McCk% z3R>&G4SaSNY7!odT?i(&Xi-eF7}sLK8R;^YVF$l|I(|o=TeA0%WW7R723z%zf5$bx z<0_<){QU~}t2FujrS| z;TLt~M+&0(haT>F(fFjA^_C}*bfkP9O;WdpM_r^4T8V8m8zcYyp~S?CAu3{nJUq`T zmO^oi_fwnPT>MgGGSESM`Z=jdOBhBmP0GRLJUAO=DagB#__QwjB0 zBdJ$2Mic6%Ec$5m*rQ&9(b0+B#=Y{nw!3VT2px2Ioneovgpip1R5Z$LB%RQGYg>6! zv&qXC?)g;<;UzaH(QeuaWk#5;Kas_PG9fBxzq^G;8mZQ_QdriRHcs&+ouK4uJU)%- zgN7S92Ihpu;rr!@~Fdrh@KS8{}ZBCAIa6#yXSb z*EXiDjrd6qm1A`1;@>{4RhMNXDtnCdE;`(lopyp-UwXeaNoeu%1Tnu=EIiT2ER{l= zeGKnptZ%RwxNryU+_D7n+&7osp+8t*wQIGMyuIeSVMHg(#JwhZaQlM&UEM%xvnvEIyz5#SBOefZ%JrdIa3thJBs>xi>DU7;%+wI&0tu z6b8>j9jz}@A1vSu)eh(JG~*1`ws#pgd0hiUqYAlucN1;d4!75Q$|Fp{VFQ#6hsHQ9 z(nF4|q8FL8+zJ{tSYaF?f9D0086!&v<$0Sl0f62PJ%Q0K(Mp$MM1hWM5V}k+OzS*~ z;b1w0(YlPfM?-(0FWO9lVbDc`i9B4VY+93-{upOn?+<>4xi?eCV(?rGYmg@6va;Xe z(_{pbiF!6w+pPb=@r-&_{H9g=iQ`VWs3S{vMz`Im|3Px2=JVTgQH|eWkW*qkCfvz* zew>r()F?9;&u((1HzGb`XGUz2qh?(a86mv6kKXN@|U-FLR-ygY;VtRD$!*nHQ^ghKg-Mfyax|5i=ejjg0Om;Os(UFrB zfVDgJ;pwz*haHYde9~5ICz<1AKxG_=eQdEd6Ny5U=}&1K(v+p)IcaRocdf3y#a))n z!ok@)8IK``c06$U-ZTyXSu;ZT?zkJ;+0PHlq+dW6S;sy92~m#!i6|Q@)BhULL?sD} zH9mx{GZjmCzx^CnmxpU>`k&m?^bKO6QYV!ovz(~QaevPFKD}Iw4_wK)iNV8U@@>B3 zSWO-8F5LFWoSK=uZKqZuFx&5BF?rwQ9yceXHkFR@&17PR=8L*IaPgP#rj@WA^qW^W zb($wmCgYZ@oYu^6BxaL2diQX@s`kq`4Oy6%^ z-X5K+Hof3PEYs(D+q`=t)F|Iz67_tujWN=zymWW79IRo>nC%R+{;ioPqRwKRCQgbbJqMElo zN7008?ArLR$C|3JJBn#1?QBd7%f z)1RL@%F$u}pxCEE*)jD;_E+#{@^|o8ktREieK$|0O$u}uU!sF#iB0X#5s7oyPawKi zL~}KU=mHMI)|D#o{SBe4;vqT-89^2OtEx}{pQtYef{c_2A--)8xR;<;P)2fhX#bsK zkT_{~$xU{blT2LOL`<(61kNE(_Uqn^{7H%LGW=dN7LTH$a(aYd6=fzr6i@245Udx; zfJD|u>NH0T*HO^+{Fy$)y^O2lJ~ZCbFKHUqaAbS4|& z1F}?X_mIZVO+r*kK95FfL$miOv28`bJ9>*{Dpw?^f6#N4yyds4TuTAa$h3*oSdZW|D z5jyTr@8GDc;0Bn6dJxo-Fz9E+-B!q(^41B_jM<_Wx51n4AFr4eHa11&;6{6uTT3si zD6ehrriQgNANK-c;+xgIZtq-EIq_A#nu?DPi}2dVXW)*5uxlf(1x(A-fc+Xe$qMN_6ix;D&ygJx!KE05K z;V;hj9?zbN7n;wzRSo`r+IquX_^gzIXnjy<&E!par@`-COQ$xgpUE!6d9mOjj^WS@ zq^N6F^56w~Be|RcYZKKge&lkE)4g6s6KFACX&=_}ZoDO+neYz{X zc%O%p;Ze8flshY05%fOxX+>kqNeUUJa`{f^hSZVBL`gTbnzl?*q(_CKfWkyaLZL*N zo@KY<*E6$4gsDtctN|{DMYkk3)ZK3oH_=7WMFE2%1<&tWO*8p{Q)xkOZe7~D97knr z*=yQknu18bu5G2}(YWGeK_*6A@sIH~{$;!|U*tZPe~c%7zCf{Lu^nj#nc-jqXW1(K z?(c!U9d`zy%(W?z5q<{Oa%jphN4y@JAzsl=S~Y#S#X{HTXDIHp$h3GW0ulj)^X<=wdQe<+?-sQHX^SM&LK z1$H(SHucK1TR(}D2ECZN=Z#Xq^nC|p>bDP>??W9XNjehZm;gy}4p86!VvE=hRms~A zF)4~qE^CNSj?^b)gb{J{dr)u)_6pdx3j!WB4}gwTw=2KobhhkAz0D|i z+Q?0_hn0yvBXccPZ%gUk2`QGQH zj;boU{l0!%}KK!`o(hV%Y1{ic`zCJzj{(F8xS@}AI-bV z(u19wu?_dCs*fdkkrh%^Z02+lRLL;@NdCSch#(}ehWQ}YuK(MUs>bYn|2WZ+=;hT5 zk?9%f>tMj*{pIwn2AKeGi>Mf=&5Hlklg{hT|GmbruKw;xS1r5Q;)!=v@};o*2LDB< zq%Tn)>OX|qpD!>hQEdm>!DZOnK>b5#q=&_J#y6qp9m(t@OVHcl`GbPMh&_HbkDptjDQD?zg#da@R9j^v_6x=&=3CCvp$LuaJ95_M$FT^OakBT84pa{AjnKL&Vs z)n^PLw;c;q7o0_)bYGrrqXP=gPyQ34jQ3>Ev{Qn_J`#%uH=>ETmI)5V? z^Z$kD(?5uQa(1g^7u9aG*0<4Im9^*cc0YWJ)T_(!a_p6>)HcNXS?c?-vE4KzU2};)GbH>HvzBSM7i7|WQ#@ZDt z;6a_HBg^|Ai=J53xTbKjJ@o(H_)It4s%y`Xo`SngfMdm8XeH|&J@VMX$y9$=QLgTM zOO98NXk$Ik$K_(nPFs|ku(j<~KZ{addLXqGcpA3ZF)y+yIuxp@p}3{&yBo$n^^2eoc;@7S0vJ-4eQE}b=eys z7_hSNe+TTmi21`?^N%^ya?M26awWd`t0mbp@cfK{HQ3irj${}X{)bhDO%MgzV8^vU zhQqZ420Lntpr2H2W^^a4RIW8(1_1RYLm1vBeaX8M+H{Pksl~`#CW8-#N8<|KpS%Vi zj@?X)_yRIRugIrHACMg;6}%)oXELEvoC>CsswUxYv9*(-?rJ82ofUJ_M3Wpx*Krb) z*C`T{4FC1uXg`WMB}@Aa9xVsal%_pt^ghg0>pslKcV&Lp_c?Oiel+z^VsbkByVOL# zh5K(lpM&;cxP$g3JHJW(#`V8z6lxS-`@5#}2wvv?hC39cdSan4i`;@2?`kpFmw@GK zGZmK|+~>@J6q9a3R)afvq>}ms&qV}8>*92MY-?}P6yF5WzD`S=ys{212;jbhuu5Dh z{U=7h-btIcFGq;4m>FU=i8P48-7H6`W~{XW&_hvt|s%lXIn7W7Q_ z+)ds7S~>cWT;t{Nu$kHd;BVdQ6A1cKvftC)UCTMCIGb0HSf%Fq=EQ9vPhhCLhQE$H?R`7+y&7%`9 zS^w=?Pk-U}_{psdP@t&6X@dygck4nce(a0cOSv^64K;D-M4kDvuAP5G9QL}^SRAO{ z_t# z_j*nHSQZ#9t)<9S1CV>8jA$xmTICvbKfe8cug2z_j_aXx`6ojrC zRB-U9^tsU^iU{%+**=I^^NH<`*6Tfj{|1kCC~)vt_7Ct_AnK1M3>8Kbckko>^ldry zbSA<5Q&UU$+k(!{ugdunhSZ2&9$_9qkB6vC@(!Teqls}&rz=RgGFFWmO(HFiVT9^K1>Xq2+!>D2 zDuM$&Dz85h4^Ck8xwtT6xmb9x9&-BaGP6Cl&Aa88htrJZ~ z=Xh*dhoSaTL&!iL>ztG+&aN}+PQ6kx(Lw5$ADD?$#UKKSxc%u;un|57uO9Z*VkvIU zoQ%ecBr4jUn#qFbI5}h4%>3oCLHTrG>12Vbx`|a09=x3W#g8r9UUYvfi=~(aW7m3y zcwBg^lx16)VsqI$!Lhj#J2pNIzGxEPs3&Z;fuC`Z*m3o4M~pZp16=@IzkFA-8rhD9 z0|GF++L5^*wg5YS9>Y7bR`0P;p}zqCPM!WW9~hmG$bXI=opeDiFt|GH>HFZl`vLbV zGlpWmT7Ho#>}dSXzD-|A4M3=@i4pyDe?|GSR!;&SRIoADbB^VHbL1&D{idVi<<-~a zTnX>2zSi{Pn_on0Yr7`Cc8+4=#>UI`;u2C#i+$`JUS>DT%y0+E+2+^Wc5&0!V$DI! zqTbYhlIN8eAdjchraNhYc1>G&A(C4Buo8TqPDjwz-f;S0*paazXz4#k*;sjnysR zeJSNFIf1|f_LapG^zP^4v3y7FirHyd)a_~eq1XPdsB6cQ-NVfX8p!Lcr-dxv8GErB zs*hj$OP;8#oc_S0BwB< zBpnBu7?AWm<5X%$svi(33P{?EF<>_aktdsAMY!O}lj-6$7p|B<^d*}p0uB$jzDFr? z9{6ZX+u$uk+tB^canvy3+9pjAjm;*~1wA+yu>jkd<4*?k0FODRrZ&@9%S9LOShJk9 zl&TH!P0gHT0-RZ|*MG*8ovLe8FrJ5~g&f{&}~$irSClH{OwbyjR+UEhCZ1p)7+0NIojP5n)joe#)p$ zcE3bAYcdYcsBRzZSzO0^X;xcEK67)1gN;!8FF9_@wl}lX!@#0AL3Y#+Grnivziwt3 zqV)5*UBvfs{7E~T946^HN%%c;;J^N?2#W~+$EKeX9G$I*;`bcsH%22Id=`{q)aJrQF111yxkLt?oz*7|?!1VB z$hG6$-6Xd-3>?TLzm*1QAPB1m2Koz~Ej?+TpEB5hkgGwUv*_i?zw=vH{e?d0~>UC$=ZCBd?Jg z`|ALjb@c(^^sj*w>Mm@1C6H8}b983g?^14}xcBEZn&8rm7Y50JEgR-hmc0FE_!sOg zS?0$TSmfu}_K`Eiv|Y2i@j=}tgvhzH8_5-&{$$|mAt>9={u$W0K<~?e$)Sglxe+@u z@X#ae*vz->J6E50vsYG4MzNB8rD1m0rz<8z7s+TnW#YZG#Z#Ac*>5^dx6d0-V6D_( z%ccw{Q)cdXb&TcnVvbkO?%i&VamCx^QrbGw`D%mL`4$k2O3n~MX@w9@L<0oekQ+(_ z8tF|=3WUR|%nly}2LwtaDg+RYreRGaqBIT%GA_bAgGIGMlnl;*ptw)Q>mg!4)%P$9 z!&fCR>_iF@S%V>C=`jmo)!sxDJS@z1iy|}xiDRS?V`SIO9V)B{F5Gxrr?xphM4FHr zL)qj}iHjmbBnp&VL7Ym`!&*D(#Lbp+M8Pkj4iuUVsfM#??t*{H?L?1{sum9YzO4nX z99Uq~5g#fkgrT0L<-js6B%um!%C}J#l6PnvWxKs8GR=&biVO#pkQI97iFpdkZ#Xsb z1!lNRP$Jq`1?r*K*=Xls?nT|1$Ed8e#3Pj@f+I^c@8y)ys+V79^lxVWmKe#{_-*Ps z>yShmb5~2$Nq)$Vb4~H{{c5g-UXGfD0XsQjY-eMQb%lPq0ZRu@0?_0GwF zz6XvDX5P0GHL&#;2P{+%a{Pj^ySkRX1MoC-+oC=TFQ|lvv)`$IQcVg}$l92%Mczff zCY$(5K9e%7>pj!t=`%{hJ^-Z9MiEyS<}?V7*cON!pVcJ$b@Q{l$!)w|T* zOe7oj@t?xINA{Yg?TuLUCIw3g4L##c9{~T2N(%t~mr83wU93DUAy7J2S1W5>hyf=r zmjDkJA0Hbgw~VKUtqYWuja%2w!w~{M>v&q&Lo7YuB{?X>+yh>xW)5#c=WPeKHEn%e zAy6p9nvGi(;_K}KwQ^^L_wf%wI~Qkpa}Nj|tGp;551#;!0FNNA;NNVT>^yudJUlFL zIgpFh|0SXeHFtG|SkZ9<%^lq#nB1DW3I<$2Pe(@!b7$wj3(&Q-bEktJ|9>GIbb1h| zJA7z5elA`CUiffAg8ZC(Ttfe~LU;rC+|}&7Aaw9q@o`&0ytw5d7Ix;&Y;+E;<{q~0 z5OX@OfA%57#m^=1SA-2yQu6Pf{W+Ckkt z=m5OJ|80^B2nqi)ob$KV(E~nlZlEK4cjO_KE>@7gy}NtBch?Ei=f{w-lRG6K?WrEj zOS`?2cJ}183(a>NiS<4iv|(DdGO1=aqEKB`DorY-66=2|aK`4@%%#7(hB6VL@FW7g zODKIp5Z|@sA7@gS@RYm(BWV=_}UYXX1GL0(%M z3uZ;gce@`#f%ha@{G-GSThRNfPqn!yBcgyL{Rgz^;^8QDrV2b=o_ruNjiD9cpBMGB zKQ?_azG_ClqL&LpjVYOywTo1fhe>Y}8Fem^S26Nc@lSk1#__F{i~eym!G`LjyT>6a zMCVRZhx58ufQEd{my(*V9BXimbpW5kp5zEK#G| zO+DXKGulVE*YXyXWmOm?KrW6EMkT~3!9m1D3Y4R_JR<^zB@;MU@FUU4S-X0qOBi(&D+3dXJ86gO=!k zV1K&x>+g3buv&0)gZuo^Q-G+i=<{4}dZp_qwM+?@ktfmY0irPHr?5K39gPB4?#XWN zIJrG1mY}Cy+I)9Knm+P2ku=xF<&*jO1L+l+gql0pjx}__n;GECZ&>$d2)k)us6nc( zPs9+UCm|d68g~#&Xzp&6xdxZ5;9O?KLdjFIUp5+<=3%V7 zzARG5S-)~mG$c#ly}qB?5#s$Ym6ZVUyRd0-PM7Z4oLs?Qi(O^KZ3r>}v|!nT6H3(X zLXap^0k!wxXuA69+ko3-n~}KPimrOy0uYo*t0c|PO7h{s+U>m0Uq6wd;D)xs=5fWP zpuo%FNp85xa>K1m1b+imf6oylv~e_Q&&!l0k#;6GgC1=8B%mV!>G<{5d*9A}aL4^e z6oPWMT}akqOkM>w7L%zO>G%1T@1sZ{yulh}wg}|&n}fSU=%@or^w45U%iW!a*XMZF zMSM0l@NcN7n$jtDq<+@yEbwH8W*zW&_CawhHR80E^yO2;Vg5_gE4g1*vJMCf5!QX( z(d3Ei?eruC_Cv4wofVd;tCfW0Z3C*vb!^8lCTUOhJC4cPPso5`M(%^<+`(ny3mruF zzso$5Q6y&x`c+>> z;0&wOX;#heBjL;YN^~N`Z-O{KoQkthVdwkltIXxzw8?kY3lomZA$Z|kGS(V_@l#MZ z5dMgcX@ifIousut2y62gCs}n+k2<031X3X|qzCY$p&)ziBByvp5cr`>mkL{&i1St4 z2wEwD%|_%RgVmg#g8AFXyGhdPbF{OR%X75x_(7H`Co@rOBiW97UC$f3PcQ0dfmezf z!Szvir+YMrmbKYtcy@2|zt#?hDbSADkhByIq1eknObmC=KI_`0XA4h>{L9C8%6H0K z^m1GLP-dLA^~`o_`b$ZqVtfb*A}5ltWjn_94z)DA0>hSIioOW-+Cl40b&S_Ts4hXE zd~1wtXdReJKU(QTJIkt0d7pn87*LBCEq_1Wgw{hSRIvRcb&)!NPE|#qL{-IBAti?; zSmn50fkl&vrRPD@QX%mjtSp4kzP7Rn+C!%)%SqIxIVY=XO3C_xq{rVeQw(&{N?D;G zDyY;{^iukXRW%eBTbIp@DXxmhmfvVJMusU|y~=`mtWz2AiRGQbzI z_XX6ah`Z`bWU`X)G#E5dvgV1Pk6e_@w^W!A5me|xeQkMwsTPUOSi_MgnEmu%orI0f$5Jr1Ofyd1oXwM`LOG8CyYCdms-r$f0;4Z|vNZ4rY@7q_;W!Ly6%v6LEqE65_tAU6;9F~!(Qb!wW|Kjp>KdN)={pV`1^1vK^`?;JK`Xx7XS8>Z7!S1jj5r^tUh+CfaW%Pe zofswAht}aG11|su1|F;^t)0joWHTx1){}jSXc{qVPw5U8wm*eoWLho_o(3}$ZU`ea zdxt}F5Pk_$HVb6s5V#-tkwqviNG6&Y-J|j4Vm^wu#WDcruO4E|>}<{d=V-(s#HmLt z{0#8nk3e&YTG|{>q3AIL5JdovqQcIsBbOrp?9I$QhFkPo;|G_5pW zq`=@APLe2qVi6` z@1aYyq7;zzH*W85XwK4JkzhM~Tfi1Mbg}}MES+b6p#J$#8#u@%$~b9RZ8rlEX649ljbW-9N` zlS7ix?m=HnH?;frjQ-=FB6N;or^xAB`(~P4mEGij>y29KqzK(0PTub>Tllr)aPt*S zc88p51pPUv~E(i<(5R?3s}atoqqZk&{2vaOyusznS2S z0lSqrmP8}=&$OVHnmYT=1!d^blCI`NliC2&^yuu=T{CzRb6z2N+X;jO9 zo;yn%qlJy$+sps456n?P3SvDaC!1*+_D#BcaP*$yt|+`l33?LRu8iBb9|{Pxy^@Q% z&b0}Cyj$rA_PzddrP|>x4hm5f>k_dc|CV5RknW^7J0i4CEb%rO$#}ptDct@b!iH*Y z)Pnc<1SE^$4$M8a8~An)LTYH-NgT))7VD)$hKSjC675q)aS{TXrynA`b`??_YlRM z%}t(HH)BaT$T20MmRL2S=r0y-2^Boln~AGEj?d#*#0S~)T?Jl!A0ZY;ZBO5j%7t8@ z@#>a;q`;`S;j`pb!4>I35go&=2=?(tLH^^>e0+zyDyh``GdaLGt0Ql_syNA^BCbp1 zO>3?<$+y5-+MiMr<&})lA2$TEf@3RN?e(>)G`XuI>f&Dq8P8n0DxbKwqDKv(W=igAwH7gA_F8E1MuH>I-jdnx*ROVb~xZ!Oe^6)vCI_hjH>j%}LnA+=LClm(&f7v`p#jX%1@H zm+}&-eV=BWc~3iH;v3#O{adVS|9CDbv%Ou{fiu2zwZbmHNhw7T>Oet#h;!ZC$ldT8 z%fEwDl{{;^ewB17C9DX(RM7rJCC|$v+vEk?Z(NDoQLNlJ@(=|WG`aOD$^-a)a zy2Wmzfut>#@*dO#y^{2=Pw48e-yB^#`Rh8A=>L>lP|EG*C_fBgZ7K8@6YjRso&RM= zn!f5BEtVkJyOOi&8rT}gQJZUY6Gh<|aYZlymMAQwE~sUWpD*ERC|uL$MjTC^W9Yh= z*R|E%QIE!yBW|i{)J=sB?L0nsU4aKC`Dvz`^a~gUYYwhF+NRIZt`5o*_GWjN=dJwK zxMODNAkS4&-6n`Sv|KKs1Ehtt)7*`}TMiuCvI{qUHvnlo?NScVTF4G|Av#e;Y(kJ3 zm2!}|@e9ng%Z5OOn$%@oi<6bfgtK%fUOXn+t{^2-^gM2*D!pPtno}k27Nk{oyRFT-qiLOgN z2A|l+_&bv2i61}YOpC^gBFT$qb|Pbf2eSIF&YXV5O^Ep;iOM2ddP~>YybSqsHzX5< z#{grUDtbS-L}&fBo%_$Cv>I##0*?9kdwwS{xGmtpAi&$dH-IHogkZ8zT#LzF z^V0Ft!T(g7TieCO1J3-L)l2(t3u_nn)nBjT-z#}KV{u^_J^>kiSrI{?pe&yPKv+&r zUWQK=pdbqrr1TZXP4s&?0`s^y$Qi z!6^R8B+aStl3%B_Mqa-PJ-6z;H3j&!O->bhMYNv*o}fYF zeC4MvwPVJKm-kP;w`0N2H|q{{7vSe!jIbg*VNQ$yW=1+f^G(7UTAY}iuWbY(O5r5X zi`bc0X#ArlibS$h^{)WQtjO66c_3#lf|f`jO1V3|V#b6JFQ|J=GaY4Snq>$NI`9i0 zbdhjZmS$BkX>=ffHH3J_nt)iAAd6$B<;<0cNKUz^-<-6-Pt-Nk*ha7tDwATV#gq_= zx!#M({8`r)DpUKtfZelceSjn}Dg)~txtk*#S{d4;iM3sXJ1i$5@Cn5>B9@1|T)GWQ zL&_@r2cJPs;V=^xCTH^>kmuHvk-xL(TbywoWY*Y@^V*np{`R#xt{$EN(-!L1x?UQR zFF1`D&Jjbd{2Z=ZyF&g>FBr0rF8p$Dm^*Qtqj#qe^Ia?A_XJkDJ7h^$VK8z^PH)mx zoSRR**!J_C15Bd&=P?yxy?)+_y;}zcg{Nuh-;UF0PwezG#Qu0>`2y+5IfZ$Y;xm}W@J(2iycYxshDZbdI zX=xqXW(eJXFo|Vof?1fwi+4nkSD4$2|G~Lfq8FC#37ZAMS`-J@DViEc(Bw}go1W#| z%zAJ02x;H4_bt7`ts?+Svf_HjFr2_@gwC%V-8{;Lg|sdOW45vV=(*H|;#``yDsS60 z0&c=?gW7J*Ki;~<3b&~}c=YcVvIG?{2eE|&owIlIG@4*L6IXc0ZNvnz04{5ViNH0SUC5S>N(^#LYr4%y$r3RV4nA>{_7o_x#*NgmpL1KT*@ zVSFmd(`P+C+xesrdd&c3OKsOJwfXEuAjbBEpI(xcPZ!2|5f`Id!}^{Lh(fR0qOknh zAcJ2a!I9u&y!<*ceW47NDM{pHEIqV@hIGhXew0JYhy~b^IVY<%9QJK54)a7&w~8ii zI3vEAPixICa?|zVjV4Z>c7e{f#jeWoAsX_%;&v^ zE9~tV3w&mBzd`3RtVB~Mxrv#>)T%OKssY6Oh%a7GQgV4V5zc);+8jI26Di;yasTNv zK{fe)`y|EAdlVRmHM-EZ8LWkhs`IbkUG5&{P!At?r~wne4*&@AVKOl(XaF()A2-W> Aa{vGU literal 0 HcmV?d00001 diff --git a/audits/Sigma Prime - Core Audit - v2.0 FINAL - Feb'24.pdf b/audits/M2 Mainnet - Sigma Prime - Feb 2024.pdf similarity index 100% rename from audits/Sigma Prime - Core Audit - v2.0 FINAL - Feb'24.pdf rename to audits/M2 Mainnet - Sigma Prime - Feb 2024.pdf diff --git a/certora/harnesses/DelegationManagerHarness.sol b/certora/harnesses/DelegationManagerHarness.sol index 9f01df08c..9f2366ee6 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.12; import "../../src/contracts/core/DelegationManager.sol"; @@ -25,4 +25,4 @@ contract DelegationManagerHarness is DelegationManager { return strategyManager.stakerStrategyShares(staker, strategy); } } -} \ No newline at end of file +} diff --git a/certora/harnesses/EigenPodHarness.sol b/certora/harnesses/EigenPodHarness.sol index 720a8b4aa..0462b9e1a 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.12; import "../../src/contracts/pods/EigenPod.sol"; @@ -37,4 +37,4 @@ contract EigenPodHarness is EigenPod { function get_ETH_Balance() public view returns (uint256) { return address(this).balance; } -} \ No newline at end of file +} diff --git a/certora/harnesses/EigenPodManagerHarness.sol b/certora/harnesses/EigenPodManagerHarness.sol index a09ae9b92..84576ec9f 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.12; import "../../src/contracts/pods/EigenPodManager.sol"; @@ -21,4 +21,4 @@ contract EigenPodManagerHarness is EigenPodManager { function get_podByOwner(address podOwner) public view returns (IEigenPod) { return ownerToPod[podOwner]; } -} \ No newline at end of file +} diff --git a/certora/harnesses/PausableHarness.sol b/certora/harnesses/PausableHarness.sol index a631315ec..fc0095ebe 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.12; import "../../src/contracts/permissions/Pausable.sol"; @@ -21,4 +21,4 @@ contract PausableHarness is Pausable { function bitwise_and(uint256 input_1, uint256 input_2) external pure returns (uint256) { return (input_1 & input_2); } -} \ No newline at end of file +} diff --git a/certora/harnesses/SlasherHarness.sol b/certora/harnesses/SlasherHarness.sol index a7c1a461e..519895780 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.12; import "../../src/contracts/core/Slasher.sol"; @@ -82,4 +82,4 @@ contract SlasherHarness is Slasher { // get_linked_list_entry(operator, get_previous_node(operator, node), true) == node && get_linked_list_entry(operator, get_next_node(operator, node), false) == node // ); // } -} \ No newline at end of file +} diff --git a/certora/harnesses/StrategyManagerHarness.sol b/certora/harnesses/StrategyManagerHarness.sol index 50274b47d..441037032 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.12; import "../../src/contracts/core/StrategyManager.sol"; @@ -55,4 +55,4 @@ contract StrategyManagerHarness is StrategyManager { function get_stakerStrategyShares(address staker, IStrategy strategy) public view returns (uint256) { return stakerStrategyShares[staker][strategy]; } -} \ No newline at end of file +} diff --git a/certora/scripts/core/verifyDelegationManager.sh b/certora/scripts/core/verifyDelegationManager.sh index a735cb785..23c3c124a 100644 --- a/certora/scripts/core/verifyDelegationManager.sh +++ b/certora/scripts/core/verifyDelegationManager.sh @@ -11,7 +11,7 @@ certoraRun certora/harnesses/DelegationManagerHarness.sol \ src/contracts/core/Slasher.sol src/contracts/permissions/PauserRegistry.sol \ --verify DelegationManagerHarness:certora/specs/core/DelegationManager.spec \ --optimistic_loop \ - --prover_args '-optimisticFallback true' \ + --optimistic_fallback \ --optimistic_hashing \ --parametric_contracts DelegationManagerHarness \ $RULE \ diff --git a/certora/scripts/core/verifyStrategyManager.sh b/certora/scripts/core/verifyStrategyManager.sh index 049cd198f..52a1aa25d 100644 --- a/certora/scripts/core/verifyStrategyManager.sh +++ b/certora/scripts/core/verifyStrategyManager.sh @@ -12,7 +12,7 @@ certoraRun certora/harnesses/StrategyManagerHarness.sol \ src/contracts/core/Slasher.sol src/contracts/permissions/PauserRegistry.sol \ --verify StrategyManagerHarness:certora/specs/core/StrategyManager.spec \ --optimistic_loop \ - --prover_args '-optimisticFallback true' \ + --optimistic_fallback \ --optimistic_hashing \ --parametric_contracts StrategyManagerHarness \ $RULE \ diff --git a/certora/scripts/libraries/verifyStructuredLinkedList.sh b/certora/scripts/libraries/verifyStructuredLinkedList.sh index d6d25bf35..0097243f3 100644 --- a/certora/scripts/libraries/verifyStructuredLinkedList.sh +++ b/certora/scripts/libraries/verifyStructuredLinkedList.sh @@ -8,7 +8,7 @@ solc-select use 0.8.12 certoraRun certora/harnesses/StructuredLinkedListHarness.sol \ --verify StructuredLinkedListHarness:certora/specs/libraries/StructuredLinkedList.spec \ --optimistic_loop \ - --prover_args '-optimisticFallback true' \ + --optimistic_fallback \ --parametric_contracts StructuredLinkedListHarness \ $RULE \ --rule_sanity \ diff --git a/certora/scripts/permissions/verifyPausable.sh b/certora/scripts/permissions/verifyPausable.sh index 6a405dd88..2eeb1de18 100644 --- a/certora/scripts/permissions/verifyPausable.sh +++ b/certora/scripts/permissions/verifyPausable.sh @@ -9,7 +9,8 @@ certoraRun certora/harnesses/PausableHarness.sol \ src/contracts/permissions/PauserRegistry.sol \ --verify PausableHarness:certora/specs/permissions/Pausable.spec \ --optimistic_loop \ - --prover_args '-optimisticFallback true -recursionErrorAsAssert false -recursionEntryLimit 3' \ + --optimistic_fallback \ + --prover_args '-recursionErrorAsAssert false -recursionEntryLimit 3' \ --loop_iter 3 \ --link PausableHarness:pauserRegistry=PauserRegistry \ $RULE \ diff --git a/certora/scripts/pods/verifyEigenPodManager.sh b/certora/scripts/pods/verifyEigenPodManager.sh index 3be6ce7a2..be315b558 100644 --- a/certora/scripts/pods/verifyEigenPodManager.sh +++ b/certora/scripts/pods/verifyEigenPodManager.sh @@ -10,7 +10,7 @@ certoraRun certora/harnesses/EigenPodManagerHarness.sol \ src/contracts/core/Slasher.sol src/contracts/permissions/PauserRegistry.sol \ --verify EigenPodManagerHarness:certora/specs/pods/EigenPodManager.spec \ --optimistic_loop \ - --prover_args '-optimisticFallback true' \ + --optimistic_fallback \ --optimistic_hashing \ --parametric_contracts EigenPodManagerHarness \ $RULE \ diff --git a/certora/scripts/strategies/verifyStrategyBase.sh b/certora/scripts/strategies/verifyStrategyBase.sh index d75dadd5b..c490041bc 100644 --- a/certora/scripts/strategies/verifyStrategyBase.sh +++ b/certora/scripts/strategies/verifyStrategyBase.sh @@ -12,7 +12,8 @@ certoraRun src/contracts/strategies/StrategyBase.sol \ src/contracts/core/Slasher.sol \ --verify StrategyBase:certora/specs/strategies/StrategyBase.spec \ --optimistic_loop \ - --prover_args '-optimisticFallback true -recursionErrorAsAssert false -recursionEntryLimit 3' \ + --optimistic_fallback \ + --prover_args '-recursionErrorAsAssert false -recursionEntryLimit 3' \ --loop_iter 3 \ --packages @openzeppelin=lib/openzeppelin-contracts @openzeppelin-upgrades=lib/openzeppelin-contracts-upgradeable \ --link StrategyBase:strategyManager=StrategyManager \ diff --git a/certora/specs/libraries/StructuredLinkedList.spec b/certora/specs/libraries/StructuredLinkedList.spec index 0f1a6fcd1..8b6ae0bd9 100644 --- a/certora/specs/libraries/StructuredLinkedList.spec +++ b/certora/specs/libraries/StructuredLinkedList.spec @@ -16,7 +16,7 @@ ghost mapping(uint256 => bool) connectsToHead { init_state axiom connectsToHead[0] == true; } -hook Sstore currentContract.listStorage.list[KEY uint256 node][KEY bool direction] uint256 link (uint256 old_link) STORAGE { +hook Sstore currentContract.listStorage.list[KEY uint256 node][KEY bool direction] uint256 link (uint256 old_link) { connectsToHead[link] = connectsToHead[node]; connectsToHead[old_link] = old_link == 0; } diff --git a/certora/specs/pods/EigenPod.spec b/certora/specs/pods/EigenPod.spec index 019c2f0d1..17296dcfd 100644 --- a/certora/specs/pods/EigenPod.spec +++ b/certora/specs/pods/EigenPod.spec @@ -168,7 +168,7 @@ ghost mathint sumOfValidatorRestakedbalancesWei { init_state axiom sumOfValidatorRestakedbalancesWei == 0; } -hook Sstore _validatorPubkeyHashToInfo[KEY bytes32 validatorPubkeyHash].restakedBalanceGwei uint64 newValue (uint64 oldValue) STORAGE { +hook Sstore _validatorPubkeyHashToInfo[KEY bytes32 validatorPubkeyHash].restakedBalanceGwei uint64 newValue (uint64 oldValue) { sumOfValidatorRestakedbalancesWei = ( sumOfValidatorRestakedbalancesWei + to_mathint(newValue) * 1000000000 - diff --git a/docs/README.md b/docs/README.md index 5854dbcf9..d6791a119 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,8 +2,6 @@ ## EigenLayer M2 Docs -**EigenLayer M2** extends the functionality of EigenLayer M1 (which is live on mainnet). M2 is currently on the Goerli testnet, and will eventually be released on mainnet. - This repo contains the EigenLayer core contracts, which enable restaking of liquid staking tokens (LSTs) and beacon chain ETH to secure new services, called AVSs (actively validated services). For more info on AVSs, check out the EigenLayer middleware contracts [here][middleware-repo]. This document provides an overview of system components, contracts, and user roles. Further documentation on the major system contracts can be found in [/core](./core/). diff --git a/docs/core/AVSDirectory.md b/docs/core/AVSDirectory.md index e025345b5..c135d2653 100644 --- a/docs/core/AVSDirectory.md +++ b/docs/core/AVSDirectory.md @@ -4,7 +4,7 @@ | File | Type | Proxy | | -------- | -------- | -------- | -| [`AVSDirectory.sol`](../src/contracts/core/AVSDirectory.sol) | Singleton | Transparent proxy | +| [`AVSDirectory.sol`](../../src/contracts/core/AVSDirectory.sol) | Singleton | Transparent proxy | The `AVSDirectory` handles interactions between AVSs and the EigenLayer core contracts. Once registered as an Operator in EigenLayer core (via the `DelegationManager`), Operators can register with one or more AVSs (via the AVS's contracts) to begin providing services to them offchain. As a part of registering with an AVS, the AVS will record this registration in the core contracts by calling into the `AVSDirectory`. diff --git a/docs/core/DelegationManager.md b/docs/core/DelegationManager.md index 28c18547f..54c4d312b 100644 --- a/docs/core/DelegationManager.md +++ b/docs/core/DelegationManager.md @@ -73,7 +73,7 @@ Registers the caller as an Operator in EigenLayer. The new Operator provides the * Sets `OperatorDetails` for the Operator in question * Delegates the Operator to itself * If the Operator has shares in the `EigenPodManager`, the `DelegationManager` adds these shares to the Operator's shares for the beacon chain ETH strategy. -* For each of the three strategies in the `StrategyManager`, if the Operator holds shares in that strategy they are added to the Operator's shares under the corresponding strategy. +* For each of the strategies in the `StrategyManager`, if the Operator holds shares in that strategy they are added to the Operator's shares under the corresponding strategy. *Requirements*: * Caller MUST NOT already be an Operator @@ -132,7 +132,7 @@ Allows the caller (a Staker) to delegate their shares to an Operator. Delegation *Effects*: * Records the Staker as being delegated to the Operator * If the Staker has shares in the `EigenPodManager`, the `DelegationManager` adds these shares to the Operator's shares for the beacon chain ETH strategy. -* For each of the three strategies in the `StrategyManager`, if the Staker holds shares in that strategy they are added to the Operator's shares under the corresponding strategy. +* For each of the strategies in the `StrategyManager`, if the Staker holds shares in that strategy they are added to the Operator's shares under the corresponding strategy. *Requirements*: * Pause status MUST NOT be set: `PAUSED_NEW_DELEGATION` diff --git a/docs/core/StrategyManager.md b/docs/core/StrategyManager.md index a6fdb4cbd..2b9f8aee1 100644 --- a/docs/core/StrategyManager.md +++ b/docs/core/StrategyManager.md @@ -7,7 +7,7 @@ The primary function of the `StrategyManager` is to handle accounting for individual Stakers as they deposit and withdraw LSTs from their corresponding strategies. It is responsible for (i) allowing Stakers to deposit LSTs into the corresponding strategy, (ii) allowing the `DelegationManager` to remove shares when a Staker queues a withdrawal, and (iii) allowing the `DelegationManager` to complete a withdrawal by either adding shares back to the Staker or withdrawing the shares as tokens via the corresponding strategy. -As of M2, three LSTs are supported and each has its own instance of `StrategyBaseTVLLimits`: cbETH, rETH, and stETH. Each `StrategyBaseTVLLimits` has two main functions (`deposit` and `withdraw`), both of which can only be called by the `StrategyManager`. These `StrategyBaseTVLLimits` contracts are fairly simple deposit/withdraw contracts that hold tokens deposited by Stakers. Because these strategies are essentially extensions of the `StrategyManager`, their functions are documented in this file (see below). +As of M2, several LSTs are supported and each has its own instance of `StrategyBaseTVLLimits`. Each `StrategyBaseTVLLimits` has two main functions (`deposit` and `withdraw`), both of which can only be called by the `StrategyManager`. These `StrategyBaseTVLLimits` contracts are fairly simple deposit/withdraw contracts that hold tokens deposited by Stakers. Because these strategies are essentially extensions of the `StrategyManager`, their functions are documented in this file (see below). #### High-level Concepts @@ -59,7 +59,7 @@ function depositIntoStrategy( returns (uint256 shares) ``` -Allows a Staker to deposit some `amount` of `token` into the specified `strategy` in exchange for shares of that strategy. The underlying `strategy` must be one of the three whitelisted `StrategyBaseTVLLimits` instances, and the `token` being deposited must correspond to that `strategy's` underlying token (cbETH, rETH, or stETH). +Allows a Staker to deposit some `amount` of `token` into the specified `strategy` in exchange for shares of that strategy. The underlying `strategy` must be one of the whitelisted `StrategyBaseTVLLimits` instances, and the `token` being deposited must correspond to that `strategy's` underlying token (cbETH, rETH, or stETH). The number of shares received is calculated by the `strategy` using an internal exchange rate that depends on the previous number of tokens deposited. diff --git a/foundry.toml b/foundry.toml index 2d98e3d27..8a79acefa 100644 --- a/foundry.toml +++ b/foundry.toml @@ -4,6 +4,8 @@ out = 'out' libs = ['lib'] fs_permissions = [{ access = "read-write", path = "./"}] gas_reports = ["*"] +# ignore upgrade testing in scripts by default +no_match_test = "queueUpgrade" # A list of ignored solc error codes @@ -18,6 +20,7 @@ solc_version = '0.8.12' [rpc_endpoints] mainnet = "${RPC_MAINNET}" +holesky = "${RPC_HOLESKY}" [fmt] bracket_spacing = false @@ -28,4 +31,7 @@ number_underscore = "thousands" quote_style = "double" tab_width = 4 -# See more config options https://github.com/gakonst/foundry/tree/master/config \ No newline at end of file +# See more config options https://github.com/gakonst/foundry/tree/master/config + +[profile.forktest.fuzz] +runs=20 \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 000000000..1c07f30d8 --- /dev/null +++ b/go.mod @@ -0,0 +1,34 @@ +module github.com/Layr-Labs/eigenlayer-contracts + +go 1.22.2 + +require github.com/ethereum/go-ethereum v1.14.0 + +require ( + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/StackExchange/wmi v1.2.1 // indirect + github.com/bits-and-blooms/bitset v1.10.0 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect + github.com/consensys/bavard v0.1.13 // indirect + github.com/consensys/gnark-crypto v0.12.1 // indirect + github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect + github.com/deckarep/golang-set/v2 v2.1.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect + github.com/ethereum/c-kzg-4844 v1.0.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/gorilla/websocket v1.4.2 // indirect + github.com/holiman/uint256 v1.2.4 // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect + github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect + github.com/supranational/blst v0.3.11 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect + golang.org/x/crypto v0.22.0 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.19.0 // indirect + golang.org/x/tools v0.20.0 // indirect + rsc.io/tmplfunc v0.0.3 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 000000000..c6cccc4af --- /dev/null +++ b/go.sum @@ -0,0 +1,192 @@ +github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= +github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= +github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= +github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88= +github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= +github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= +github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/pebble v1.1.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= +github.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= +github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= +github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ= +github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= +github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI= +github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= +github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/ethereum/c-kzg-4844 v1.0.0 h1:0X1LBXxaEtYD9xsyj9B9ctQEZIpnvVDeoBx8aHEwTNA= +github.com/ethereum/c-kzg-4844 v1.0.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-ethereum v1.14.0 h1:xRWC5NlB6g1x7vNy4HDBLuqVNbtLrc7v8S6+Uxim1LU= +github.com/ethereum/go-ethereum v1.14.0/go.mod h1:1STrq471D0BQbCX9He0hUj4bHxX2k6mt5nOQJhDNOJ8= +github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= +github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= +github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc= +github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0= +github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= +github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= +github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4= +github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= +github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= +github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= +github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= +github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= +github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.12.0 h1:C+UIj/QWtmqY13Arb8kwMt5j34/0Z2iKamrJ+ryC0Gg= +github.com/prometheus/client_golang v1.12.0/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_model v0.2.1-0.20210607210712-147c58e9608a h1:CmF68hwI0XsOQ5UwlBopMi2Ow4Pbg32akc4KIVCOm+Y= +github.com/prometheus/client_model v0.2.1-0.20210607210712-147c58e9608a/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= +github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= +github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= +github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= +github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= +golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= diff --git a/lib/openzeppelin-contracts-upgradeable-v4.9.0 b/lib/openzeppelin-contracts-upgradeable-v4.9.0 new file mode 160000 index 000000000..f6febd79e --- /dev/null +++ b/lib/openzeppelin-contracts-upgradeable-v4.9.0 @@ -0,0 +1 @@ +Subproject commit f6febd79e2a3a17e26969dd0d450c6ebd64bf459 diff --git a/lib/openzeppelin-contracts-v4.9.0 b/lib/openzeppelin-contracts-v4.9.0 new file mode 160000 index 000000000..54b3f1434 --- /dev/null +++ b/lib/openzeppelin-contracts-v4.9.0 @@ -0,0 +1 @@ +Subproject commit 54b3f14346da01ba0d159114b399197fea8b7cda diff --git a/pkg/bindings/AVSDirectory/binding.go b/pkg/bindings/AVSDirectory/binding.go new file mode 100644 index 000000000..dc15d2dca --- /dev/null +++ b/pkg/bindings/AVSDirectory/binding.go @@ -0,0 +1,1793 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package AVSDirectory + +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 +) + +// ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithSaltAndExpiry struct { + Signature []byte + Salt [32]byte + Expiry *big.Int +} + +// 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: "0x60c06040523480156200001157600080fd5b5060405162001f7838038062001f78833981016040819052620000349162000118565b6001600160a01b0381166080526200004b62000056565b504660a0526200014a565b600054610100900460ff1615620000c35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000116576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012b57600080fd5b81516001600160a01b03811681146200014357600080fd5b9392505050565b60805160a051611e01620001776000396000610ea801526000818161032401526109830152611e016000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b14610359578063f698da251461036c578063fabc1cbc1461037457600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a6101553660046118ab565b610387565b005b61015a61016a3660046118cf565b610443565b61015a61017d3660046118e8565b610582565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611929565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b610228610208366004611955565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906119a4565b61015a6106ac565b6101ea61024b3660046119cc565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a610773565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba366004611a5f565b610787565b6101a96102cd366004611b46565b610b1a565b61015a6102e03660046118ab565b610bd3565b61015a6102f3366004611b8c565b610d3c565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000000000000000000000000000000000000000000081565b61015a6103543660046118cf565b610d83565b61015a6103673660046118ab565b610e2e565b6101a9610ea4565b61015a6103823660046118cf565b610ee2565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fe9190611bfe565b6001600160a01b0316336001600160a01b0316146104375760405162461bcd60e51b815260040161042e90611c1b565b60405180910390fd5b6104408161103e565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561048b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104af9190611c65565b6104cb5760405162461bcd60e51b815260040161042e90611c87565b606654818116146105445760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105a25750600054600160ff909116105b806105bc5750303b1580156105bc575060005460ff166001145b61061f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161042e565b6000805460ff191660011790558015610642576000805461ff0019166101001790555b61064c8383611135565b61065461121f565b609755610660846112b6565b80156106a6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190611c65565b6107345760405162461bcd60e51b815260040161042e90611c87565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61077b611308565b61078560006112b6565b565b606654600090600190811614156107dc5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b42826040015110156108445760405162461bcd60e51b815260206004820152603e6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72207369676e617475726520657870697265640000606482015260840161042e565b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff16600181111561087e5761087e61198e565b14156108e05760405162461bcd60e51b815260206004820152603f6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f7220616c7265616479207265676973746572656400606482015260840161042e565b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff16156109645760405162461bcd60e51b81526020600482015260366024820152600080516020611dac8339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b606482015260840161042e565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190611c65565b610a645760405162461bcd60e51b815260206004820152604d6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a40161042e565b6000610a7a843385602001518660400151610b1a565b9050610a8b84828560000151611362565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b0c91906119a4565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610b90610ea4565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b60665460009060019081161415610c285760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610c6257610c6261198e565b14610cd55760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f74207265676973746572656400606482015260840161042e565b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610d3091906119a4565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610d77929190611ccf565b60405180910390a25050565b33600090815260996020908152604080832084845290915290205460ff1615610e085760405162461bcd60e51b815260206004820152603160248201527f4156534469726563746f72792e63616e63656c53616c743a2063616e6e6f742060448201527018d85b98d95b081cdc195b9d081cd85b1d607a1b606482015260840161042e565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b610e36611308565b6001600160a01b038116610e9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042e565b610440816112b6565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610ed5575060975490565b610edd61121f565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f599190611bfe565b6001600160a01b0316336001600160a01b031614610f895760405162461bcd60e51b815260040161042e90611c1b565b6066541981196066541916146110075760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610577565b6001600160a01b0381166110cc5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161042e565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561115657506001600160a01b03821615155b6111d85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261121b8261103e565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107855760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042e565b6001600160a01b0383163b1561148157604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906113a29086908690600401611cfe565b602060405180830381865afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e39190611d5b565b6001600160e01b0319161461147c5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161042e565b505050565b826001600160a01b03166114958383611521565b6001600160a01b03161461147c5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161042e565b60008060006115308585611545565b9150915061153d816115b5565b509392505050565b60008082516041141561157c5760208301516040840151606085015160001a61157087828585611770565b945094505050506115ae565b8251604014156115a6576020830151604084015161159b86838361185d565b9350935050506115ae565b506000905060025b9250929050565b60008160048111156115c9576115c961198e565b14156115d25750565b60018160048111156115e6576115e661198e565b14156116345760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161042e565b60028160048111156116485761164861198e565b14156116965760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161042e565b60038160048111156116aa576116aa61198e565b14156117035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161042e565b60048160048111156117175761171761198e565b14156104405760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161042e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117a75750600090506003611854565b8460ff16601b141580156117bf57508460ff16601c14155b156117d05750600090506004611854565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611824573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184d57600060019250925050611854565b9150600090505b94509492505050565b6000806001600160ff1b0383168161187a60ff86901c601b611d85565b905061188887828885611770565b935093505050935093915050565b6001600160a01b038116811461044057600080fd5b6000602082840312156118bd57600080fd5b81356118c881611896565b9392505050565b6000602082840312156118e157600080fd5b5035919050565b6000806000606084860312156118fd57600080fd5b833561190881611896565b9250602084013561191881611896565b929592945050506040919091013590565b6000806040838503121561193c57600080fd5b823561194781611896565b946020939093013593505050565b6000806040838503121561196857600080fd5b823561197381611896565b9150602083013561198381611896565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106119c657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156119de57600080fd5b813560ff811681146118c857600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611a2857611a286119ef565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a5757611a576119ef565b604052919050565b60008060408385031215611a7257600080fd5b8235611a7d81611896565b915060208381013567ffffffffffffffff80821115611a9b57600080fd5b9085019060608288031215611aaf57600080fd5b611ab7611a05565b823582811115611ac657600080fd5b8301601f81018913611ad757600080fd5b803583811115611ae957611ae96119ef565b611afb601f8201601f19168701611a2e565b93508084528986828401011115611b1157600080fd5b808683018786013760008682860101525050818152838301358482015260408301356040820152809450505050509250929050565b60008060008060808587031215611b5c57600080fd5b8435611b6781611896565b93506020850135611b7781611896565b93969395505050506040820135916060013590565b60008060208385031215611b9f57600080fd5b823567ffffffffffffffff80821115611bb757600080fd5b818501915085601f830112611bcb57600080fd5b813581811115611bda57600080fd5b866020828501011115611bec57600080fd5b60209290920196919550909350505050565b600060208284031215611c1057600080fd5b81516118c881611896565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611c7757600080fd5b815180151581146118c857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b82815260006020604081840152835180604085015260005b81811015611d3257858101830151858201606001528201611d16565b81811115611d44576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215611d6d57600080fd5b81516001600160e01b0319811681146118c857600080fd5b60008219821115611da657634e487b7160e01b600052601160045260246000fd5b50019056fe4156534469726563746f72792e72656769737465724f70657261746f72546f41a264697066735822122056888f7076d0665392753ed570f021d907e3c78ecc6d1d829bb6c138a69c54d364736f6c634300080c0033", +} + +// AVSDirectoryABI is the input ABI used to generate the binding from. +// Deprecated: Use AVSDirectoryMetaData.ABI instead. +var AVSDirectoryABI = AVSDirectoryMetaData.ABI + +// AVSDirectoryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use AVSDirectoryMetaData.Bin instead. +var AVSDirectoryBin = AVSDirectoryMetaData.Bin + +// DeployAVSDirectory deploys a new Ethereum contract, binding an instance of AVSDirectory to it. +func DeployAVSDirectory(auth *bind.TransactOpts, backend bind.ContractBackend, _delegation common.Address) (common.Address, *types.Transaction, *AVSDirectory, error) { + parsed, err := AVSDirectoryMetaData.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(AVSDirectoryBin), backend, _delegation) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &AVSDirectory{AVSDirectoryCaller: AVSDirectoryCaller{contract: contract}, AVSDirectoryTransactor: AVSDirectoryTransactor{contract: contract}, AVSDirectoryFilterer: AVSDirectoryFilterer{contract: contract}}, nil +} + +// AVSDirectory is an auto generated Go binding around an Ethereum contract. +type AVSDirectory struct { + AVSDirectoryCaller // Read-only binding to the contract + AVSDirectoryTransactor // Write-only binding to the contract + AVSDirectoryFilterer // Log filterer for contract events +} + +// AVSDirectoryCaller is an auto generated read-only Go binding around an Ethereum contract. +type AVSDirectoryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AVSDirectoryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AVSDirectoryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AVSDirectoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AVSDirectoryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AVSDirectorySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AVSDirectorySession struct { + Contract *AVSDirectory // 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 +} + +// AVSDirectoryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AVSDirectoryCallerSession struct { + Contract *AVSDirectoryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AVSDirectoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AVSDirectoryTransactorSession struct { + Contract *AVSDirectoryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AVSDirectoryRaw is an auto generated low-level Go binding around an Ethereum contract. +type AVSDirectoryRaw struct { + Contract *AVSDirectory // Generic contract binding to access the raw methods on +} + +// AVSDirectoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AVSDirectoryCallerRaw struct { + Contract *AVSDirectoryCaller // Generic read-only contract binding to access the raw methods on +} + +// AVSDirectoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AVSDirectoryTransactorRaw struct { + Contract *AVSDirectoryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewAVSDirectory creates a new instance of AVSDirectory, bound to a specific deployed contract. +func NewAVSDirectory(address common.Address, backend bind.ContractBackend) (*AVSDirectory, error) { + contract, err := bindAVSDirectory(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &AVSDirectory{AVSDirectoryCaller: AVSDirectoryCaller{contract: contract}, AVSDirectoryTransactor: AVSDirectoryTransactor{contract: contract}, AVSDirectoryFilterer: AVSDirectoryFilterer{contract: contract}}, nil +} + +// NewAVSDirectoryCaller creates a new read-only instance of AVSDirectory, bound to a specific deployed contract. +func NewAVSDirectoryCaller(address common.Address, caller bind.ContractCaller) (*AVSDirectoryCaller, error) { + contract, err := bindAVSDirectory(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AVSDirectoryCaller{contract: contract}, nil +} + +// NewAVSDirectoryTransactor creates a new write-only instance of AVSDirectory, bound to a specific deployed contract. +func NewAVSDirectoryTransactor(address common.Address, transactor bind.ContractTransactor) (*AVSDirectoryTransactor, error) { + contract, err := bindAVSDirectory(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AVSDirectoryTransactor{contract: contract}, nil +} + +// NewAVSDirectoryFilterer creates a new log filterer instance of AVSDirectory, bound to a specific deployed contract. +func NewAVSDirectoryFilterer(address common.Address, filterer bind.ContractFilterer) (*AVSDirectoryFilterer, error) { + contract, err := bindAVSDirectory(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AVSDirectoryFilterer{contract: contract}, nil +} + +// bindAVSDirectory binds a generic wrapper to an already deployed contract. +func bindAVSDirectory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := AVSDirectoryMetaData.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 (_AVSDirectory *AVSDirectoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AVSDirectory.Contract.AVSDirectoryCaller.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 (_AVSDirectory *AVSDirectoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AVSDirectory.Contract.AVSDirectoryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AVSDirectory *AVSDirectoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AVSDirectory.Contract.AVSDirectoryTransactor.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 (_AVSDirectory *AVSDirectoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AVSDirectory.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 (_AVSDirectory *AVSDirectoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AVSDirectory.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AVSDirectory *AVSDirectoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AVSDirectory.Contract.contract.Transact(opts, method, params...) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCaller) DOMAINTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "DOMAIN_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectorySession) DOMAINTYPEHASH() ([32]byte, error) { + return _AVSDirectory.Contract.DOMAINTYPEHASH(&_AVSDirectory.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCallerSession) DOMAINTYPEHASH() ([32]byte, error) { + return _AVSDirectory.Contract.DOMAINTYPEHASH(&_AVSDirectory.CallOpts) +} + +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCaller) OPERATORAVSREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "OPERATOR_AVS_REGISTRATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectorySession) OPERATORAVSREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectory.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) +} + +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCallerSession) OPERATORAVSREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectory.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_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) +func (_AVSDirectory *AVSDirectoryCaller) CalculateOperatorAVSRegistrationDigestHash(opts *bind.CallOpts, operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "calculateOperatorAVSRegistrationDigestHash", operator, avs, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// 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) +func (_AVSDirectory *AVSDirectorySession) CalculateOperatorAVSRegistrationDigestHash(operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectory.Contract.CalculateOperatorAVSRegistrationDigestHash(&_AVSDirectory.CallOpts, operator, avs, 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) +func (_AVSDirectory *AVSDirectoryCallerSession) CalculateOperatorAVSRegistrationDigestHash(operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectory.Contract.CalculateOperatorAVSRegistrationDigestHash(&_AVSDirectory.CallOpts, operator, avs, salt, expiry) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_AVSDirectory *AVSDirectoryCaller) Delegation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "delegation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_AVSDirectory *AVSDirectorySession) Delegation() (common.Address, error) { + return _AVSDirectory.Contract.Delegation(&_AVSDirectory.CallOpts) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_AVSDirectory *AVSDirectoryCallerSession) Delegation() (common.Address, error) { + return _AVSDirectory.Contract.Delegation(&_AVSDirectory.CallOpts) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _AVSDirectory.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 + +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_AVSDirectory *AVSDirectorySession) DomainSeparator() ([32]byte, error) { + return _AVSDirectory.Contract.DomainSeparator(&_AVSDirectory.CallOpts) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCallerSession) DomainSeparator() ([32]byte, error) { + return _AVSDirectory.Contract.DomainSeparator(&_AVSDirectory.CallOpts) +} + +// 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) +} + +// 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") + + 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) +} + +// 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) +} + +// 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. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectory *AVSDirectorySession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _AVSDirectory.Contract.DeregisterOperatorFromAVS(&_AVSDirectory.TransactOpts, operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _AVSDirectory.Contract.DeregisterOperatorFromAVS(&_AVSDirectory.TransactOpts, operator) +} + +// 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) +} + +// 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) +} + +// 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) +} + +// 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) +} + +// 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) +} + +// 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 +} + +// 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 +} + +// 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 +} + +// 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 + + 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 *AVSDirectoryOwnershipTransferredIterator) 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(AVSDirectoryOwnershipTransferred) + 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(AVSDirectoryOwnershipTransferred) + 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 *AVSDirectoryOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryOwnershipTransferred represents a OwnershipTransferred event raised by the AVSDirectory contract. +type AVSDirectoryOwnershipTransferred 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 (_AVSDirectory *AVSDirectoryFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*AVSDirectoryOwnershipTransferredIterator, 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 := _AVSDirectory.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &AVSDirectoryOwnershipTransferredIterator{contract: _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOwnershipTransferred, 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 := _AVSDirectory.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(AVSDirectoryOwnershipTransferred) + if err := _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) ParseOwnershipTransferred(log types.Log) (*AVSDirectoryOwnershipTransferred, error) { + event := new(AVSDirectoryOwnershipTransferred) + if err := _AVSDirectory.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the AVSDirectory contract. +type AVSDirectoryPausedIterator struct { + Event *AVSDirectoryPaused // 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 *AVSDirectoryPausedIterator) 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(AVSDirectoryPaused) + 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(AVSDirectoryPaused) + 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 *AVSDirectoryPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryPaused represents a Paused event raised by the AVSDirectory contract. +type AVSDirectoryPaused 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 (_AVSDirectory *AVSDirectoryFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*AVSDirectoryPausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &AVSDirectoryPausedIterator{contract: _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *AVSDirectoryPaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _AVSDirectory.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(AVSDirectoryPaused) + if err := _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) ParsePaused(log types.Log) (*AVSDirectoryPaused, error) { + event := new(AVSDirectoryPaused) + if err := _AVSDirectory.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the AVSDirectory contract. +type AVSDirectoryPauserRegistrySetIterator struct { + Event *AVSDirectoryPauserRegistrySet // 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 *AVSDirectoryPauserRegistrySetIterator) 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(AVSDirectoryPauserRegistrySet) + 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(AVSDirectoryPauserRegistrySet) + 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 *AVSDirectoryPauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryPauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryPauserRegistrySet represents a PauserRegistrySet event raised by the AVSDirectory contract. +type AVSDirectoryPauserRegistrySet 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 (_AVSDirectory *AVSDirectoryFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*AVSDirectoryPauserRegistrySetIterator, error) { + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &AVSDirectoryPauserRegistrySetIterator{contract: _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryPauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _AVSDirectory.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(AVSDirectoryPauserRegistrySet) + if err := _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) ParsePauserRegistrySet(log types.Log) (*AVSDirectoryPauserRegistrySet, error) { + event := new(AVSDirectoryPauserRegistrySet) + if err := _AVSDirectory.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the AVSDirectory contract. +type AVSDirectoryUnpausedIterator struct { + Event *AVSDirectoryUnpaused // 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 *AVSDirectoryUnpausedIterator) 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(AVSDirectoryUnpaused) + 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(AVSDirectoryUnpaused) + 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 *AVSDirectoryUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryUnpaused represents a Unpaused event raised by the AVSDirectory contract. +type AVSDirectoryUnpaused 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 (_AVSDirectory *AVSDirectoryFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*AVSDirectoryUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &AVSDirectoryUnpausedIterator{contract: _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *AVSDirectoryUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _AVSDirectory.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(AVSDirectoryUnpaused) + if err := _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) ParseUnpaused(log types.Log) (*AVSDirectoryUnpaused, error) { + event := new(AVSDirectoryUnpaused) + if err := _AVSDirectory.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/AVSDirectory/tmp.abi b/pkg/bindings/AVSDirectory/tmp.abi new file mode 100644 index 000000000..02b9c609d --- /dev/null +++ b/pkg/bindings/AVSDirectory/tmp.abi @@ -0,0 +1,501 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_delegation", + "type": "address", + "internalType": "contract IDelegationManager" + } + ], + "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": "enum IAVSDirectory.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": "contract IDelegationManager" + } + ], + "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": "contract IPauserRegistry" + }, + { + "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": "contract IPauserRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registerOperatorToAVS", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "operatorSignature", + "type": "tuple", + "internalType": "struct ISignatureUtils.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": "contract IPauserRegistry" + } + ], + "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": "enum IAVSDirectory.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": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "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 + } +] diff --git a/pkg/bindings/AVSDirectory/tmp.bin b/pkg/bindings/AVSDirectory/tmp.bin new file mode 100644 index 000000000..cadac4b9e --- /dev/null +++ b/pkg/bindings/AVSDirectory/tmp.bin @@ -0,0 +1 @@ +0x60c06040523480156200001157600080fd5b5060405162001f7838038062001f78833981016040819052620000349162000118565b6001600160a01b0381166080526200004b62000056565b504660a0526200014a565b600054610100900460ff1615620000c35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000116576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012b57600080fd5b81516001600160a01b03811681146200014357600080fd5b9392505050565b60805160a051611e01620001776000396000610ea801526000818161032401526109830152611e016000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b14610359578063f698da251461036c578063fabc1cbc1461037457600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a6101553660046118ab565b610387565b005b61015a61016a3660046118cf565b610443565b61015a61017d3660046118e8565b610582565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611929565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b610228610208366004611955565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906119a4565b61015a6106ac565b6101ea61024b3660046119cc565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a610773565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba366004611a5f565b610787565b6101a96102cd366004611b46565b610b1a565b61015a6102e03660046118ab565b610bd3565b61015a6102f3366004611b8c565b610d3c565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000000000000000000000000000000000000000000081565b61015a6103543660046118cf565b610d83565b61015a6103673660046118ab565b610e2e565b6101a9610ea4565b61015a6103823660046118cf565b610ee2565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fe9190611bfe565b6001600160a01b0316336001600160a01b0316146104375760405162461bcd60e51b815260040161042e90611c1b565b60405180910390fd5b6104408161103e565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561048b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104af9190611c65565b6104cb5760405162461bcd60e51b815260040161042e90611c87565b606654818116146105445760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105a25750600054600160ff909116105b806105bc5750303b1580156105bc575060005460ff166001145b61061f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161042e565b6000805460ff191660011790558015610642576000805461ff0019166101001790555b61064c8383611135565b61065461121f565b609755610660846112b6565b80156106a6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190611c65565b6107345760405162461bcd60e51b815260040161042e90611c87565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61077b611308565b61078560006112b6565b565b606654600090600190811614156107dc5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b42826040015110156108445760405162461bcd60e51b815260206004820152603e6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72207369676e617475726520657870697265640000606482015260840161042e565b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff16600181111561087e5761087e61198e565b14156108e05760405162461bcd60e51b815260206004820152603f6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f7220616c7265616479207265676973746572656400606482015260840161042e565b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff16156109645760405162461bcd60e51b81526020600482015260366024820152600080516020611dac8339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b606482015260840161042e565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190611c65565b610a645760405162461bcd60e51b815260206004820152604d6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a40161042e565b6000610a7a843385602001518660400151610b1a565b9050610a8b84828560000151611362565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b0c91906119a4565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610b90610ea4565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b60665460009060019081161415610c285760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610c6257610c6261198e565b14610cd55760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f74207265676973746572656400606482015260840161042e565b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610d3091906119a4565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610d77929190611ccf565b60405180910390a25050565b33600090815260996020908152604080832084845290915290205460ff1615610e085760405162461bcd60e51b815260206004820152603160248201527f4156534469726563746f72792e63616e63656c53616c743a2063616e6e6f742060448201527018d85b98d95b081cdc195b9d081cd85b1d607a1b606482015260840161042e565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b610e36611308565b6001600160a01b038116610e9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042e565b610440816112b6565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610ed5575060975490565b610edd61121f565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f599190611bfe565b6001600160a01b0316336001600160a01b031614610f895760405162461bcd60e51b815260040161042e90611c1b565b6066541981196066541916146110075760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610577565b6001600160a01b0381166110cc5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161042e565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561115657506001600160a01b03821615155b6111d85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261121b8261103e565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107855760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042e565b6001600160a01b0383163b1561148157604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906113a29086908690600401611cfe565b602060405180830381865afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e39190611d5b565b6001600160e01b0319161461147c5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161042e565b505050565b826001600160a01b03166114958383611521565b6001600160a01b03161461147c5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161042e565b60008060006115308585611545565b9150915061153d816115b5565b509392505050565b60008082516041141561157c5760208301516040840151606085015160001a61157087828585611770565b945094505050506115ae565b8251604014156115a6576020830151604084015161159b86838361185d565b9350935050506115ae565b506000905060025b9250929050565b60008160048111156115c9576115c961198e565b14156115d25750565b60018160048111156115e6576115e661198e565b14156116345760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161042e565b60028160048111156116485761164861198e565b14156116965760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161042e565b60038160048111156116aa576116aa61198e565b14156117035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161042e565b60048160048111156117175761171761198e565b14156104405760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161042e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117a75750600090506003611854565b8460ff16601b141580156117bf57508460ff16601c14155b156117d05750600090506004611854565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611824573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184d57600060019250925050611854565b9150600090505b94509492505050565b6000806001600160ff1b0383168161187a60ff86901c601b611d85565b905061188887828885611770565b935093505050935093915050565b6001600160a01b038116811461044057600080fd5b6000602082840312156118bd57600080fd5b81356118c881611896565b9392505050565b6000602082840312156118e157600080fd5b5035919050565b6000806000606084860312156118fd57600080fd5b833561190881611896565b9250602084013561191881611896565b929592945050506040919091013590565b6000806040838503121561193c57600080fd5b823561194781611896565b946020939093013593505050565b6000806040838503121561196857600080fd5b823561197381611896565b9150602083013561198381611896565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106119c657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156119de57600080fd5b813560ff811681146118c857600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611a2857611a286119ef565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a5757611a576119ef565b604052919050565b60008060408385031215611a7257600080fd5b8235611a7d81611896565b915060208381013567ffffffffffffffff80821115611a9b57600080fd5b9085019060608288031215611aaf57600080fd5b611ab7611a05565b823582811115611ac657600080fd5b8301601f81018913611ad757600080fd5b803583811115611ae957611ae96119ef565b611afb601f8201601f19168701611a2e565b93508084528986828401011115611b1157600080fd5b808683018786013760008682860101525050818152838301358482015260408301356040820152809450505050509250929050565b60008060008060808587031215611b5c57600080fd5b8435611b6781611896565b93506020850135611b7781611896565b93969395505050506040820135916060013590565b60008060208385031215611b9f57600080fd5b823567ffffffffffffffff80821115611bb757600080fd5b818501915085601f830112611bcb57600080fd5b813581811115611bda57600080fd5b866020828501011115611bec57600080fd5b60209290920196919550909350505050565b600060208284031215611c1057600080fd5b81516118c881611896565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611c7757600080fd5b815180151581146118c857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b82815260006020604081840152835180604085015260005b81811015611d3257858101830151858201606001528201611d16565b81811115611d44576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215611d6d57600080fd5b81516001600160e01b0319811681146118c857600080fd5b60008219821115611da657634e487b7160e01b600052601160045260246000fd5b50019056fe4156534469726563746f72792e72656769737465724f70657261746f72546f41a264697066735822122056888f7076d0665392753ed570f021d907e3c78ecc6d1d829bb6c138a69c54d364736f6c634300080c0033 diff --git a/pkg/bindings/AVSDirectoryStorage/binding.go b/pkg/bindings/AVSDirectoryStorage/binding.go new file mode 100644 index 000000000..2070a8e69 --- /dev/null +++ b/pkg/bindings/AVSDirectoryStorage/binding.go @@ -0,0 +1,736 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package AVSDirectoryStorage + +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 +) + +// ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithSaltAndExpiry struct { + Signature []byte + Salt [32]byte + Expiry *big.Int +} + +// 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}]", +} + +// AVSDirectoryStorageABI is the input ABI used to generate the binding from. +// Deprecated: Use AVSDirectoryStorageMetaData.ABI instead. +var AVSDirectoryStorageABI = AVSDirectoryStorageMetaData.ABI + +// AVSDirectoryStorage is an auto generated Go binding around an Ethereum contract. +type AVSDirectoryStorage struct { + AVSDirectoryStorageCaller // Read-only binding to the contract + AVSDirectoryStorageTransactor // Write-only binding to the contract + AVSDirectoryStorageFilterer // Log filterer for contract events +} + +// AVSDirectoryStorageCaller is an auto generated read-only Go binding around an Ethereum contract. +type AVSDirectoryStorageCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AVSDirectoryStorageTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AVSDirectoryStorageTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AVSDirectoryStorageFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AVSDirectoryStorageFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AVSDirectoryStorageSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AVSDirectoryStorageSession struct { + Contract *AVSDirectoryStorage // 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 +} + +// AVSDirectoryStorageCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AVSDirectoryStorageCallerSession struct { + Contract *AVSDirectoryStorageCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AVSDirectoryStorageTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AVSDirectoryStorageTransactorSession struct { + Contract *AVSDirectoryStorageTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AVSDirectoryStorageRaw is an auto generated low-level Go binding around an Ethereum contract. +type AVSDirectoryStorageRaw struct { + Contract *AVSDirectoryStorage // Generic contract binding to access the raw methods on +} + +// AVSDirectoryStorageCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AVSDirectoryStorageCallerRaw struct { + Contract *AVSDirectoryStorageCaller // Generic read-only contract binding to access the raw methods on +} + +// AVSDirectoryStorageTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AVSDirectoryStorageTransactorRaw struct { + Contract *AVSDirectoryStorageTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewAVSDirectoryStorage creates a new instance of AVSDirectoryStorage, bound to a specific deployed contract. +func NewAVSDirectoryStorage(address common.Address, backend bind.ContractBackend) (*AVSDirectoryStorage, error) { + contract, err := bindAVSDirectoryStorage(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &AVSDirectoryStorage{AVSDirectoryStorageCaller: AVSDirectoryStorageCaller{contract: contract}, AVSDirectoryStorageTransactor: AVSDirectoryStorageTransactor{contract: contract}, AVSDirectoryStorageFilterer: AVSDirectoryStorageFilterer{contract: contract}}, nil +} + +// NewAVSDirectoryStorageCaller creates a new read-only instance of AVSDirectoryStorage, bound to a specific deployed contract. +func NewAVSDirectoryStorageCaller(address common.Address, caller bind.ContractCaller) (*AVSDirectoryStorageCaller, error) { + contract, err := bindAVSDirectoryStorage(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AVSDirectoryStorageCaller{contract: contract}, nil +} + +// NewAVSDirectoryStorageTransactor creates a new write-only instance of AVSDirectoryStorage, bound to a specific deployed contract. +func NewAVSDirectoryStorageTransactor(address common.Address, transactor bind.ContractTransactor) (*AVSDirectoryStorageTransactor, error) { + contract, err := bindAVSDirectoryStorage(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AVSDirectoryStorageTransactor{contract: contract}, nil +} + +// NewAVSDirectoryStorageFilterer creates a new log filterer instance of AVSDirectoryStorage, bound to a specific deployed contract. +func NewAVSDirectoryStorageFilterer(address common.Address, filterer bind.ContractFilterer) (*AVSDirectoryStorageFilterer, error) { + contract, err := bindAVSDirectoryStorage(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AVSDirectoryStorageFilterer{contract: contract}, nil +} + +// bindAVSDirectoryStorage binds a generic wrapper to an already deployed contract. +func bindAVSDirectoryStorage(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := AVSDirectoryStorageMetaData.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 (_AVSDirectoryStorage *AVSDirectoryStorageRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AVSDirectoryStorage.Contract.AVSDirectoryStorageCaller.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 (_AVSDirectoryStorage *AVSDirectoryStorageRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.AVSDirectoryStorageTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AVSDirectoryStorage *AVSDirectoryStorageRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.AVSDirectoryStorageTransactor.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 (_AVSDirectoryStorage *AVSDirectoryStorageCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.contract.Transact(opts, method, params...) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) DOMAINTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "DOMAIN_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) DOMAINTYPEHASH() ([32]byte, error) { + return _AVSDirectoryStorage.Contract.DOMAINTYPEHASH(&_AVSDirectoryStorage.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) DOMAINTYPEHASH() ([32]byte, error) { + return _AVSDirectoryStorage.Contract.DOMAINTYPEHASH(&_AVSDirectoryStorage.CallOpts) +} + +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OPERATORAVSREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "OPERATOR_AVS_REGISTRATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OPERATORAVSREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectoryStorage.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) +} + +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OPERATORAVSREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectoryStorage.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_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) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) CalculateOperatorAVSRegistrationDigestHash(opts *bind.CallOpts, operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "calculateOperatorAVSRegistrationDigestHash", operator, avs, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// 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) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CalculateOperatorAVSRegistrationDigestHash(operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectoryStorage.Contract.CalculateOperatorAVSRegistrationDigestHash(&_AVSDirectoryStorage.CallOpts, operator, avs, 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) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) CalculateOperatorAVSRegistrationDigestHash(operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectoryStorage.Contract.CalculateOperatorAVSRegistrationDigestHash(&_AVSDirectoryStorage.CallOpts, operator, avs, salt, expiry) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) Delegation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "delegation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) Delegation() (common.Address, error) { + return _AVSDirectoryStorage.Contract.Delegation(&_AVSDirectoryStorage.CallOpts) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) Delegation() (common.Address, error) { + return _AVSDirectoryStorage.Contract.Delegation(&_AVSDirectoryStorage.CallOpts) +} + +// 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) +} + +// 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) +} + +// 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) +} + +// 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 +} + +// 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 +} diff --git a/pkg/bindings/AVSDirectoryStorage/tmp.abi b/pkg/bindings/AVSDirectoryStorage/tmp.abi new file mode 100644 index 000000000..ad466ac0a --- /dev/null +++ b/pkg/bindings/AVSDirectoryStorage/tmp.abi @@ -0,0 +1,228 @@ +[ + { + "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": "enum IAVSDirectory.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": "contract IDelegationManager" + } + ], + "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": "struct ISignatureUtils.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": "enum IAVSDirectory.OperatorAVSRegistrationStatus" + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/AVSDirectoryStorage/tmp.bin b/pkg/bindings/AVSDirectoryStorage/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/AVSDirectoryStorage/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/BackingEigen/binding.go b/pkg/bindings/BackingEigen/binding.go new file mode 100644 index 000000000..2ed34f20f --- /dev/null +++ b/pkg/bindings/BackingEigen/binding.go @@ -0,0 +1,2816 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package BackingEigen + +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 +) + +// ERC20VotesUpgradeableCheckpoint is an auto generated low-level Go binding around an user-defined struct. +type ERC20VotesUpgradeableCheckpoint struct { + FromBlock uint32 + Votes *big.Int +} + +// 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: "0x60a06040523480156200001157600080fd5b5060405162002b4438038062002b44833981016040819052620000349162000113565b6001600160a01b0381166080526200004b62000052565b5062000145565b600054610100900460ff1615620000bf5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161462000111576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012657600080fd5b81516001600160a01b03811681146200013e57600080fd5b9392505050565b6080516129c76200017d6000396000818161056f01528181610c5b01528181610c8601528181610cb10152610cd201526129c76000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806384b0196e11610125578063b8c25594116100ad578063dd62ed3e1161007c578063dd62ed3e146104ff578063eb415f4514610512578063f1127ed81461051a578063f2fde38b14610557578063fdc371ce1461056a57600080fd5b8063b8c25594146104b3578063c3cda520146104c6578063c4d66de8146104d9578063d505accf146104ec57600080fd5b806395d89b41116100f457806395d89b41146104685780639ab24eb0146104705780639aec4bae14610483578063a457c2d71461048d578063a9059cbb146104a057600080fd5b806384b0196e1461040a5780638da5cb5b146104255780638e539e8c1461043657806391ddadf41461044957600080fd5b80633a46b1a8116101a85780636fcfff45116101775780636fcfff451461037a57806370a08231146103a2578063715018a6146103cb57806378aa33ba146103d35780637ecebe00146103f757600080fd5b80633a46b1a8146102e65780634bf5d7e9146102f9578063587cde1e146103235780635c19a95c1461036757600080fd5b80631ffacdef116101ef5780631ffacdef1461029457806323b872dd146102a9578063313ce567146102bc5780633644e515146102cb57806339509351146102d357600080fd5b80630455e6941461022157806306fdde031461025a578063095ea7b31461026f57806318160ddd14610282575b600080fd5b61024561022f366004612548565b6101316020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610262610591565b60405161025191906125b0565b61024561027d3660046125c3565b610623565b6067545b604051908152602001610251565b6102a76102a23660046125ed565b61063b565b005b6102456102b7366004612629565b610651565b60405160128152602001610251565b610286610675565b6102456102e13660046125c3565b610684565b6102866102f43660046125c3565b6106a6565b60408051808201909152600e81526d06d6f64653d74696d657374616d760941b6020820152610262565b61034f610331366004612548565b6001600160a01b03908116600090815260fe60205260409020541690565b6040516001600160a01b039091168152602001610251565b6102a7610375366004612548565b610730565b61038d610388366004612548565b61073d565b60405163ffffffff9091168152602001610251565b6102866103b0366004612548565b6001600160a01b031660009081526065602052604090205490565b6102a7610765565b6102456103e1366004612548565b6101326020526000908152604090205460ff1681565b610286610405366004612548565b610779565b610412610797565b6040516102519796959493929190612665565b6033546001600160a01b031661034f565b6102866104443660046126fb565b610835565b61045161089d565b60405165ffffffffffff9091168152602001610251565b6102626108a8565b61028661047e366004612548565b6108b7565b6102866101305481565b61024561049b3660046125c3565b610939565b6102456104ae3660046125c3565b6109b4565b6102a76104c13660046125ed565b6109c2565b6102a76104d4366004612725565b6109d4565b6102a76104e7366004612548565b610b0a565b6102a76104fa36600461277d565b610dc9565b61028661050d3660046127e7565b610f2d565b6102a7610f58565b61052d61052836600461281a565b611028565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610251565b6102a7610565366004612548565b6110ac565b61034f7f000000000000000000000000000000000000000000000000000000000000000081565b6060606880546105a09061284f565b80601f01602080910402602001604051908101604052809291908181526020018280546105cc9061284f565b80156106195780601f106105ee57610100808354040283529160200191610619565b820191906000526020600020905b8154815290600101906020018083116105fc57829003601f168201915b5050505050905090565b600033610631818585611122565b5060019392505050565b610643611246565b61064d82826112a0565b5050565b60003361065f858285611301565b61066a85858561137b565b506001949350505050565b600061067f611537565b905090565b6000336106318185856106978383610f2d565b6106a1919061289a565b611122565b60006106b061089d565b65ffffffffffff1682106107075760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b60448201526064015b60405180910390fd5b6001600160a01b038316600090815260ff602052604090206107299083611541565b9392505050565b61073a338261162a565b50565b6001600160a01b038116600090815260ff602052604081205461075f906116a4565b92915050565b61076d611246565b610777600061170d565b565b6001600160a01b038116600090815260cb602052604081205461075f565b6000606080600080600060606097546000801b1480156107b75750609854155b6107fb5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016106fe565b61080361175f565b61080b61176e565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600061083f61089d565b65ffffffffffff1682106108915760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b60448201526064016106fe565b61075f61010083611541565b600061067f4261177d565b6060606980546105a09061284f565b6001600160a01b038116600090815260ff60205260408120548015610926576001600160a01b038316600090815260ff6020526040902080546000198301908110610904576109046128b2565b60009182526020909120015464010000000090046001600160e01b0316610929565b60005b6001600160e01b03169392505050565b600033816109478286610f2d565b9050838110156109a75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106fe565b61066a8286868403611122565b60003361063181858561137b565b6109ca611246565b61064d82826117e4565b83421115610a245760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e6174757265206578706972656400000060448201526064016106fe565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a9e90610a969060a0016040516020818303038152906040528051906020012061183d565b85858561186a565b9050610aa981611892565b8614610af75760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e63650000000000000060448201526064016106fe565b610b01818861162a565b50505050505050565b600054610100900460ff1615808015610b2a5750600054600160ff909116105b80610b445750303b158015610b44575060005460ff166001145b610ba75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106fe565b6000805460ff191660011790558015610bca576000805461ff0019166101001790555b610bd26118ba565b610c1f6040518060400160405280600d81526020016c2130b1b5b4b7339022b4b3b2b760991b815250604051806040016040528060068152602001653122a4a3a2a760d11b8152506118e9565b610c288261170d565b610c4f604051806040016040528060068152602001653122a4a3a2a760d11b81525061191a565b60001961013055610c817f000000000000000000000000000000000000000000000000000000000000000060016112a0565b610cac7f000000000000000000000000000000000000000000000000000000000000000060016117e4565b610d577f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5291906128c8565b611964565b6040517fb7c23c1e2e36f298e9879a88ecfcd07e28fbb439bcfa9c78ca1363ca14370d2690600090a1801561064d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b83421115610e195760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106fe565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610e488c611892565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610ea38261183d565b90506000610eb38287878761186a565b9050896001600160a01b0316816001600160a01b031614610f165760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106fe565b610f218a8a8a611122565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b610f60611246565b6000196101305414610ff75760405162461bcd60e51b815260206004820152605460248201527f4261636b696e67456967656e2e64697361626c655472616e736665725265737460448201527f72696374696f6e733a207472616e73666572207265737472696374696f6e7320606482015273185c9948185b1c9958591e48191a5cd8589b195960621b608482015260a4016106fe565b60006101308190556040517f2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f649190a1565b60408051808201909152600080825260208201526001600160a01b038316600090815260ff60205260409020805463ffffffff841690811061106c5761106c6128b2565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6110b4611246565b6001600160a01b0381166111195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106fe565b61073a8161170d565b6001600160a01b0383166111845760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106fe565b6001600160a01b0382166111e55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106fe565b6001600160a01b0383811660008181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6033546001600160a01b031633146107775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106fe565b6001600160a01b03821660008181526101316020908152604091829020805460ff191685151590811790915591519182527fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed284362227191015b60405180910390a25050565b600061130d8484610f2d565b9050600019811461137557818110156113685760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106fe565b6113758484848403611122565b50505050565b6001600160a01b0383166113df5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106fe565b6001600160a01b0382166114415760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106fe565b61144c8383836119ef565b6001600160a01b038316600090815260656020526040902054818110156114c45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106fe565b6001600160a01b0380851660008181526065602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115249086815260200190565b60405180910390a3611375848484611acd565b600061067f611aff565b81546000908181600581111561159b57600061155c84611b73565b61156690856128e1565b600088815260209020909150869082015463ffffffff16111561158b57809150611599565b61159681600161289a565b92505b505b808210156115e85760006115af8383611c58565b600088815260209020909150869082015463ffffffff1611156115d4578091506115e2565b6115df81600161289a565b92505b5061159b565b8015611614576000868152602090208101600019015464010000000090046001600160e01b0316611617565b60005b6001600160e01b03169695505050505050565b6001600160a01b03828116600081815260fe6020818152604080842080546065845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611375828483611c73565b600063ffffffff8211156117095760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016106fe565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060609980546105a09061284f565b6060609a80546105a09061284f565b600065ffffffffffff8211156117095760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b60648201526084016106fe565b6001600160a01b03821660008181526101326020908152604091829020805460ff191685151590811790915591519182527f72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b91016112f5565b600061075f61184a611537565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600061187b87878787611db0565b9150915061188881611e74565b5095945050505050565b6001600160a01b038116600090815260cb602052604090208054600181018255905b50919050565b600054610100900460ff166118e15760405162461bcd60e51b81526004016106fe906128f8565b610777611fc2565b600054610100900460ff166119105760405162461bcd60e51b81526004016106fe906128f8565b61064d8282611ff2565b600054610100900460ff166119415760405162461bcd60e51b81526004016106fe906128f8565b61073a81604051806040016040528060018152602001603160f81b815250612040565b61196e828261209d565b6067546001600160e01b0310156119e05760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b60648201526084016106fe565b6113756101006121728361217e565b610130544211611ac8576001600160a01b0383166000908152610131602052604090205460ff1680611a3a57506001600160a01b0382166000908152610132602052604090205460ff165b80611a4c57506001600160a01b038316155b611ac85760405162461bcd60e51b815260206004820152604160248201527f4261636b696e67456967656e2e5f6265666f7265546f6b656e5472616e73666560448201527f723a2066726f6d206f7220746f206d7573742062652077686974656c697374656064820152601960fa1b608482015260a4016106fe565b505050565b6001600160a01b03838116600090815260fe6020526040808220548584168352912054611ac892918216911683611c73565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611b2a6122f3565b611b3261234c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600081611b8257506000919050565b60006001611b8f8461237d565b901c6001901b90506001818481611ba857611ba8612943565b048201901c90506001818481611bc057611bc0612943565b048201901c90506001818481611bd857611bd8612943565b048201901c90506001818481611bf057611bf0612943565b048201901c90506001818481611c0857611c08612943565b048201901c90506001818481611c2057611c20612943565b048201901c90506001818481611c3857611c38612943565b048201901c905061072981828581611c5257611c52612943565b04612411565b6000611c676002848418612959565b6107299084841661289a565b816001600160a01b0316836001600160a01b031614158015611c955750600081115b15611ac8576001600160a01b03831615611d23576001600160a01b038316600090815260ff602052604081208190611cd0906124278561217e565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611d18929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611ac8576001600160a01b038216600090815260ff602052604081208190611d59906121728561217e565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611da1929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611de75750600090506003611e6b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611e3b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611e6457600060019250925050611e6b565b9150600090505b94509492505050565b6000816004811115611e8857611e8861297b565b1415611e915750565b6001816004811115611ea557611ea561297b565b1415611ef35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106fe565b6002816004811115611f0757611f0761297b565b1415611f555760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106fe565b6003816004811115611f6957611f6961297b565b141561073a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106fe565b600054610100900460ff16611fe95760405162461bcd60e51b81526004016106fe906128f8565b6107773361170d565b600054610100900460ff166120195760405162461bcd60e51b81526004016106fe906128f8565b815161202c90606890602085019061249c565b508051611ac890606990602084019061249c565b600054610100900460ff166120675760405162461bcd60e51b81526004016106fe906128f8565b815161207a90609990602085019061249c565b50805161208e90609a90602084019061249c565b50506000609781905560985550565b6001600160a01b0382166120f35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106fe565b6120ff600083836119ef565b8060676000828254612111919061289a565b90915550506001600160a01b0382166000818152606560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361064d60008383611acd565b6000610729828461289a565b825460009081908181156121cb5760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b031660208201526121e0565b60408051808201909152600080825260208201525b905080602001516001600160e01b0316935061220084868863ffffffff16565b925060008211801561222a575061221561089d565b65ffffffffffff16816000015163ffffffff16145b1561226f5761223883612433565b60008881526020902083016000190180546001600160e01b03929092166401000000000263ffffffff9092169190911790556122e9565b86604051806040016040528061229361228661089d565b65ffffffffffff166116a4565b63ffffffff1681526020016122a786612433565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b6000806122fe61175f565b805190915015612315578051602090910120919050565b60975480156123245792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b60008061235761176e565b80519091501561236e578051602090910120919050565b60985480156123245792915050565b600080608083901c1561239257608092831c92015b604083901c156123a457604092831c92015b602083901c156123b657602092831c92015b601083901c156123c857601092831c92015b600883901c156123da57600892831c92015b600483901c156123ec57600492831c92015b600283901c156123fe57600292831c92015b600183901c1561075f5760010192915050565b60008183106124205781610729565b5090919050565b600061072982846128e1565b60006001600160e01b038211156117095760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016106fe565b8280546124a89061284f565b90600052602060002090601f0160209004810192826124ca5760008555612510565b82601f106124e357805160ff1916838001178555612510565b82800160010185558215612510579182015b828111156125105782518255916020019190600101906124f5565b506117099291505b808211156117095760008155600101612518565b80356001600160a01b038116811461254357600080fd5b919050565b60006020828403121561255a57600080fd5b6107298261252c565b6000815180845260005b818110156125895760208185018101518683018201520161256d565b8181111561259b576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006107296020830184612563565b600080604083850312156125d657600080fd5b6125df8361252c565b946020939093013593505050565b6000806040838503121561260057600080fd5b6126098361252c565b91506020830135801515811461261e57600080fd5b809150509250929050565b60008060006060848603121561263e57600080fd5b6126478461252c565b92506126556020850161252c565b9150604084013590509250925092565b60ff60f81b881681526000602060e08184015261268560e084018a612563565b8381036040850152612697818a612563565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156126e9578351835292840192918401916001016126cd565b50909c9b505050505050505050505050565b60006020828403121561270d57600080fd5b5035919050565b803560ff8116811461254357600080fd5b60008060008060008060c0878903121561273e57600080fd5b6127478761252c565b9550602087013594506040870135935061276360608801612714565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561279857600080fd5b6127a18861252c565b96506127af6020890161252c565b955060408801359450606088013593506127cb60808901612714565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156127fa57600080fd5b6128038361252c565b91506128116020840161252c565b90509250929050565b6000806040838503121561282d57600080fd5b6128368361252c565b9150602083013563ffffffff8116811461261e57600080fd5b600181811c9082168061286357607f821691505b602082108114156118b457634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156128ad576128ad612884565b500190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156128da57600080fd5b5051919050565b6000828210156128f3576128f3612884565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261297657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220efc3f106504e0c28cb8cafc81d7a3da2bf482a3d97d965d614af2702bacb7b2e64736f6c634300080c0033", +} + +// BackingEigenABI is the input ABI used to generate the binding from. +// Deprecated: Use BackingEigenMetaData.ABI instead. +var BackingEigenABI = BackingEigenMetaData.ABI + +// BackingEigenBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use BackingEigenMetaData.Bin instead. +var BackingEigenBin = BackingEigenMetaData.Bin + +// DeployBackingEigen deploys a new Ethereum contract, binding an instance of BackingEigen to it. +func DeployBackingEigen(auth *bind.TransactOpts, backend bind.ContractBackend, _EIGEN common.Address) (common.Address, *types.Transaction, *BackingEigen, error) { + parsed, err := BackingEigenMetaData.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(BackingEigenBin), backend, _EIGEN) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &BackingEigen{BackingEigenCaller: BackingEigenCaller{contract: contract}, BackingEigenTransactor: BackingEigenTransactor{contract: contract}, BackingEigenFilterer: BackingEigenFilterer{contract: contract}}, nil +} + +// BackingEigen is an auto generated Go binding around an Ethereum contract. +type BackingEigen struct { + BackingEigenCaller // Read-only binding to the contract + BackingEigenTransactor // Write-only binding to the contract + BackingEigenFilterer // Log filterer for contract events +} + +// BackingEigenCaller is an auto generated read-only Go binding around an Ethereum contract. +type BackingEigenCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BackingEigenTransactor is an auto generated write-only Go binding around an Ethereum contract. +type BackingEigenTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BackingEigenFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type BackingEigenFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BackingEigenSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type BackingEigenSession struct { + Contract *BackingEigen // 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 +} + +// BackingEigenCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type BackingEigenCallerSession struct { + Contract *BackingEigenCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// BackingEigenTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type BackingEigenTransactorSession struct { + Contract *BackingEigenTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BackingEigenRaw is an auto generated low-level Go binding around an Ethereum contract. +type BackingEigenRaw struct { + Contract *BackingEigen // Generic contract binding to access the raw methods on +} + +// BackingEigenCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type BackingEigenCallerRaw struct { + Contract *BackingEigenCaller // Generic read-only contract binding to access the raw methods on +} + +// BackingEigenTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type BackingEigenTransactorRaw struct { + Contract *BackingEigenTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewBackingEigen creates a new instance of BackingEigen, bound to a specific deployed contract. +func NewBackingEigen(address common.Address, backend bind.ContractBackend) (*BackingEigen, error) { + contract, err := bindBackingEigen(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &BackingEigen{BackingEigenCaller: BackingEigenCaller{contract: contract}, BackingEigenTransactor: BackingEigenTransactor{contract: contract}, BackingEigenFilterer: BackingEigenFilterer{contract: contract}}, nil +} + +// NewBackingEigenCaller creates a new read-only instance of BackingEigen, bound to a specific deployed contract. +func NewBackingEigenCaller(address common.Address, caller bind.ContractCaller) (*BackingEigenCaller, error) { + contract, err := bindBackingEigen(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BackingEigenCaller{contract: contract}, nil +} + +// NewBackingEigenTransactor creates a new write-only instance of BackingEigen, bound to a specific deployed contract. +func NewBackingEigenTransactor(address common.Address, transactor bind.ContractTransactor) (*BackingEigenTransactor, error) { + contract, err := bindBackingEigen(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BackingEigenTransactor{contract: contract}, nil +} + +// NewBackingEigenFilterer creates a new log filterer instance of BackingEigen, bound to a specific deployed contract. +func NewBackingEigenFilterer(address common.Address, filterer bind.ContractFilterer) (*BackingEigenFilterer, error) { + contract, err := bindBackingEigen(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &BackingEigenFilterer{contract: contract}, nil +} + +// bindBackingEigen binds a generic wrapper to an already deployed contract. +func bindBackingEigen(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := BackingEigenMetaData.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 (_BackingEigen *BackingEigenRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BackingEigen.Contract.BackingEigenCaller.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 (_BackingEigen *BackingEigenRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BackingEigen.Contract.BackingEigenTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BackingEigen *BackingEigenRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BackingEigen.Contract.BackingEigenTransactor.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 (_BackingEigen *BackingEigenCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BackingEigen.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 (_BackingEigen *BackingEigenTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BackingEigen.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BackingEigen *BackingEigenTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BackingEigen.Contract.contract.Transact(opts, method, params...) +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() pure returns(string) +func (_BackingEigen *BackingEigenCaller) CLOCKMODE(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "CLOCK_MODE") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() pure returns(string) +func (_BackingEigen *BackingEigenSession) CLOCKMODE() (string, error) { + return _BackingEigen.Contract.CLOCKMODE(&_BackingEigen.CallOpts) +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() pure returns(string) +func (_BackingEigen *BackingEigenCallerSession) CLOCKMODE() (string, error) { + return _BackingEigen.Contract.CLOCKMODE(&_BackingEigen.CallOpts) +} + +// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515. +// +// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32) +func (_BackingEigen *BackingEigenCaller) DOMAINSEPARATOR(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "DOMAIN_SEPARATOR") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515. +// +// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32) +func (_BackingEigen *BackingEigenSession) DOMAINSEPARATOR() ([32]byte, error) { + return _BackingEigen.Contract.DOMAINSEPARATOR(&_BackingEigen.CallOpts) +} + +// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515. +// +// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32) +func (_BackingEigen *BackingEigenCallerSession) DOMAINSEPARATOR() ([32]byte, error) { + return _BackingEigen.Contract.DOMAINSEPARATOR(&_BackingEigen.CallOpts) +} + +// EIGEN is a free data retrieval call binding the contract method 0xfdc371ce. +// +// Solidity: function EIGEN() view returns(address) +func (_BackingEigen *BackingEigenCaller) EIGEN(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "EIGEN") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EIGEN is a free data retrieval call binding the contract method 0xfdc371ce. +// +// Solidity: function EIGEN() view returns(address) +func (_BackingEigen *BackingEigenSession) EIGEN() (common.Address, error) { + return _BackingEigen.Contract.EIGEN(&_BackingEigen.CallOpts) +} + +// EIGEN is a free data retrieval call binding the contract method 0xfdc371ce. +// +// Solidity: function EIGEN() view returns(address) +func (_BackingEigen *BackingEigenCallerSession) EIGEN() (common.Address, error) { + return _BackingEigen.Contract.EIGEN(&_BackingEigen.CallOpts) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_BackingEigen *BackingEigenCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "allowance", owner, spender) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_BackingEigen *BackingEigenSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _BackingEigen.Contract.Allowance(&_BackingEigen.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_BackingEigen *BackingEigenCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _BackingEigen.Contract.Allowance(&_BackingEigen.CallOpts, owner, spender) +} + +// AllowedFrom is a free data retrieval call binding the contract method 0x0455e694. +// +// Solidity: function allowedFrom(address ) view returns(bool) +func (_BackingEigen *BackingEigenCaller) AllowedFrom(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "allowedFrom", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedFrom is a free data retrieval call binding the contract method 0x0455e694. +// +// Solidity: function allowedFrom(address ) view returns(bool) +func (_BackingEigen *BackingEigenSession) AllowedFrom(arg0 common.Address) (bool, error) { + return _BackingEigen.Contract.AllowedFrom(&_BackingEigen.CallOpts, arg0) +} + +// AllowedFrom is a free data retrieval call binding the contract method 0x0455e694. +// +// Solidity: function allowedFrom(address ) view returns(bool) +func (_BackingEigen *BackingEigenCallerSession) AllowedFrom(arg0 common.Address) (bool, error) { + return _BackingEigen.Contract.AllowedFrom(&_BackingEigen.CallOpts, arg0) +} + +// AllowedTo is a free data retrieval call binding the contract method 0x78aa33ba. +// +// Solidity: function allowedTo(address ) view returns(bool) +func (_BackingEigen *BackingEigenCaller) AllowedTo(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "allowedTo", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedTo is a free data retrieval call binding the contract method 0x78aa33ba. +// +// Solidity: function allowedTo(address ) view returns(bool) +func (_BackingEigen *BackingEigenSession) AllowedTo(arg0 common.Address) (bool, error) { + return _BackingEigen.Contract.AllowedTo(&_BackingEigen.CallOpts, arg0) +} + +// AllowedTo is a free data retrieval call binding the contract method 0x78aa33ba. +// +// Solidity: function allowedTo(address ) view returns(bool) +func (_BackingEigen *BackingEigenCallerSession) AllowedTo(arg0 common.Address) (bool, error) { + return _BackingEigen.Contract.AllowedTo(&_BackingEigen.CallOpts, arg0) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_BackingEigen *BackingEigenCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "balanceOf", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_BackingEigen *BackingEigenSession) BalanceOf(account common.Address) (*big.Int, error) { + return _BackingEigen.Contract.BalanceOf(&_BackingEigen.CallOpts, account) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_BackingEigen *BackingEigenCallerSession) BalanceOf(account common.Address) (*big.Int, error) { + return _BackingEigen.Contract.BalanceOf(&_BackingEigen.CallOpts, account) +} + +// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8. +// +// Solidity: function checkpoints(address account, uint32 pos) view returns((uint32,uint224)) +func (_BackingEigen *BackingEigenCaller) Checkpoints(opts *bind.CallOpts, account common.Address, pos uint32) (ERC20VotesUpgradeableCheckpoint, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "checkpoints", account, pos) + + if err != nil { + return *new(ERC20VotesUpgradeableCheckpoint), err + } + + out0 := *abi.ConvertType(out[0], new(ERC20VotesUpgradeableCheckpoint)).(*ERC20VotesUpgradeableCheckpoint) + + return out0, err + +} + +// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8. +// +// Solidity: function checkpoints(address account, uint32 pos) view returns((uint32,uint224)) +func (_BackingEigen *BackingEigenSession) Checkpoints(account common.Address, pos uint32) (ERC20VotesUpgradeableCheckpoint, error) { + return _BackingEigen.Contract.Checkpoints(&_BackingEigen.CallOpts, account, pos) +} + +// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8. +// +// Solidity: function checkpoints(address account, uint32 pos) view returns((uint32,uint224)) +func (_BackingEigen *BackingEigenCallerSession) Checkpoints(account common.Address, pos uint32) (ERC20VotesUpgradeableCheckpoint, error) { + return _BackingEigen.Contract.Checkpoints(&_BackingEigen.CallOpts, account, pos) +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_BackingEigen *BackingEigenCaller) Clock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "clock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_BackingEigen *BackingEigenSession) Clock() (*big.Int, error) { + return _BackingEigen.Contract.Clock(&_BackingEigen.CallOpts) +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_BackingEigen *BackingEigenCallerSession) Clock() (*big.Int, error) { + return _BackingEigen.Contract.Clock(&_BackingEigen.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_BackingEigen *BackingEigenCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_BackingEigen *BackingEigenSession) Decimals() (uint8, error) { + return _BackingEigen.Contract.Decimals(&_BackingEigen.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_BackingEigen *BackingEigenCallerSession) Decimals() (uint8, error) { + return _BackingEigen.Contract.Decimals(&_BackingEigen.CallOpts) +} + +// Delegates is a free data retrieval call binding the contract method 0x587cde1e. +// +// Solidity: function delegates(address account) view returns(address) +func (_BackingEigen *BackingEigenCaller) Delegates(opts *bind.CallOpts, account common.Address) (common.Address, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "delegates", account) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegates is a free data retrieval call binding the contract method 0x587cde1e. +// +// Solidity: function delegates(address account) view returns(address) +func (_BackingEigen *BackingEigenSession) Delegates(account common.Address) (common.Address, error) { + return _BackingEigen.Contract.Delegates(&_BackingEigen.CallOpts, account) +} + +// Delegates is a free data retrieval call binding the contract method 0x587cde1e. +// +// Solidity: function delegates(address account) view returns(address) +func (_BackingEigen *BackingEigenCallerSession) Delegates(account common.Address) (common.Address, error) { + return _BackingEigen.Contract.Delegates(&_BackingEigen.CallOpts, account) +} + +// Eip712Domain is a free data retrieval call binding the contract method 0x84b0196e. +// +// Solidity: function eip712Domain() view returns(bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions) +func (_BackingEigen *BackingEigenCaller) Eip712Domain(opts *bind.CallOpts) (struct { + Fields [1]byte + Name string + Version string + ChainId *big.Int + VerifyingContract common.Address + Salt [32]byte + Extensions []*big.Int +}, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "eip712Domain") + + outstruct := new(struct { + Fields [1]byte + Name string + Version string + ChainId *big.Int + VerifyingContract common.Address + Salt [32]byte + Extensions []*big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.Fields = *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + outstruct.Name = *abi.ConvertType(out[1], new(string)).(*string) + outstruct.Version = *abi.ConvertType(out[2], new(string)).(*string) + outstruct.ChainId = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.VerifyingContract = *abi.ConvertType(out[4], new(common.Address)).(*common.Address) + outstruct.Salt = *abi.ConvertType(out[5], new([32]byte)).(*[32]byte) + outstruct.Extensions = *abi.ConvertType(out[6], new([]*big.Int)).(*[]*big.Int) + + return *outstruct, err + +} + +// Eip712Domain is a free data retrieval call binding the contract method 0x84b0196e. +// +// Solidity: function eip712Domain() view returns(bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions) +func (_BackingEigen *BackingEigenSession) Eip712Domain() (struct { + Fields [1]byte + Name string + Version string + ChainId *big.Int + VerifyingContract common.Address + Salt [32]byte + Extensions []*big.Int +}, error) { + return _BackingEigen.Contract.Eip712Domain(&_BackingEigen.CallOpts) +} + +// Eip712Domain is a free data retrieval call binding the contract method 0x84b0196e. +// +// Solidity: function eip712Domain() view returns(bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions) +func (_BackingEigen *BackingEigenCallerSession) Eip712Domain() (struct { + Fields [1]byte + Name string + Version string + ChainId *big.Int + VerifyingContract common.Address + Salt [32]byte + Extensions []*big.Int +}, error) { + return _BackingEigen.Contract.Eip712Domain(&_BackingEigen.CallOpts) +} + +// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c. +// +// Solidity: function getPastTotalSupply(uint256 timepoint) view returns(uint256) +func (_BackingEigen *BackingEigenCaller) GetPastTotalSupply(opts *bind.CallOpts, timepoint *big.Int) (*big.Int, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "getPastTotalSupply", timepoint) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c. +// +// Solidity: function getPastTotalSupply(uint256 timepoint) view returns(uint256) +func (_BackingEigen *BackingEigenSession) GetPastTotalSupply(timepoint *big.Int) (*big.Int, error) { + return _BackingEigen.Contract.GetPastTotalSupply(&_BackingEigen.CallOpts, timepoint) +} + +// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c. +// +// Solidity: function getPastTotalSupply(uint256 timepoint) view returns(uint256) +func (_BackingEigen *BackingEigenCallerSession) GetPastTotalSupply(timepoint *big.Int) (*big.Int, error) { + return _BackingEigen.Contract.GetPastTotalSupply(&_BackingEigen.CallOpts, timepoint) +} + +// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8. +// +// Solidity: function getPastVotes(address account, uint256 timepoint) view returns(uint256) +func (_BackingEigen *BackingEigenCaller) GetPastVotes(opts *bind.CallOpts, account common.Address, timepoint *big.Int) (*big.Int, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "getPastVotes", account, timepoint) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8. +// +// Solidity: function getPastVotes(address account, uint256 timepoint) view returns(uint256) +func (_BackingEigen *BackingEigenSession) GetPastVotes(account common.Address, timepoint *big.Int) (*big.Int, error) { + return _BackingEigen.Contract.GetPastVotes(&_BackingEigen.CallOpts, account, timepoint) +} + +// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8. +// +// Solidity: function getPastVotes(address account, uint256 timepoint) view returns(uint256) +func (_BackingEigen *BackingEigenCallerSession) GetPastVotes(account common.Address, timepoint *big.Int) (*big.Int, error) { + return _BackingEigen.Contract.GetPastVotes(&_BackingEigen.CallOpts, account, timepoint) +} + +// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0. +// +// Solidity: function getVotes(address account) view returns(uint256) +func (_BackingEigen *BackingEigenCaller) GetVotes(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "getVotes", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0. +// +// Solidity: function getVotes(address account) view returns(uint256) +func (_BackingEigen *BackingEigenSession) GetVotes(account common.Address) (*big.Int, error) { + return _BackingEigen.Contract.GetVotes(&_BackingEigen.CallOpts, account) +} + +// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0. +// +// Solidity: function getVotes(address account) view returns(uint256) +func (_BackingEigen *BackingEigenCallerSession) GetVotes(account common.Address) (*big.Int, error) { + return _BackingEigen.Contract.GetVotes(&_BackingEigen.CallOpts, account) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_BackingEigen *BackingEigenCaller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_BackingEigen *BackingEigenSession) Name() (string, error) { + return _BackingEigen.Contract.Name(&_BackingEigen.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_BackingEigen *BackingEigenCallerSession) Name() (string, error) { + return _BackingEigen.Contract.Name(&_BackingEigen.CallOpts) +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address owner) view returns(uint256) +func (_BackingEigen *BackingEigenCaller) Nonces(opts *bind.CallOpts, owner common.Address) (*big.Int, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "nonces", owner) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address owner) view returns(uint256) +func (_BackingEigen *BackingEigenSession) Nonces(owner common.Address) (*big.Int, error) { + return _BackingEigen.Contract.Nonces(&_BackingEigen.CallOpts, owner) +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address owner) view returns(uint256) +func (_BackingEigen *BackingEigenCallerSession) Nonces(owner common.Address) (*big.Int, error) { + return _BackingEigen.Contract.Nonces(&_BackingEigen.CallOpts, owner) +} + +// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45. +// +// Solidity: function numCheckpoints(address account) view returns(uint32) +func (_BackingEigen *BackingEigenCaller) NumCheckpoints(opts *bind.CallOpts, account common.Address) (uint32, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "numCheckpoints", account) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45. +// +// Solidity: function numCheckpoints(address account) view returns(uint32) +func (_BackingEigen *BackingEigenSession) NumCheckpoints(account common.Address) (uint32, error) { + return _BackingEigen.Contract.NumCheckpoints(&_BackingEigen.CallOpts, account) +} + +// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45. +// +// Solidity: function numCheckpoints(address account) view returns(uint32) +func (_BackingEigen *BackingEigenCallerSession) NumCheckpoints(account common.Address) (uint32, error) { + return _BackingEigen.Contract.NumCheckpoints(&_BackingEigen.CallOpts, account) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_BackingEigen *BackingEigenCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BackingEigen.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 (_BackingEigen *BackingEigenSession) Owner() (common.Address, error) { + return _BackingEigen.Contract.Owner(&_BackingEigen.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_BackingEigen *BackingEigenCallerSession) Owner() (common.Address, error) { + return _BackingEigen.Contract.Owner(&_BackingEigen.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_BackingEigen *BackingEigenCaller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_BackingEigen *BackingEigenSession) Symbol() (string, error) { + return _BackingEigen.Contract.Symbol(&_BackingEigen.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_BackingEigen *BackingEigenCallerSession) Symbol() (string, error) { + return _BackingEigen.Contract.Symbol(&_BackingEigen.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_BackingEigen *BackingEigenCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_BackingEigen *BackingEigenSession) TotalSupply() (*big.Int, error) { + return _BackingEigen.Contract.TotalSupply(&_BackingEigen.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_BackingEigen *BackingEigenCallerSession) TotalSupply() (*big.Int, error) { + return _BackingEigen.Contract.TotalSupply(&_BackingEigen.CallOpts) +} + +// TransferRestrictionsDisabledAfter is a free data retrieval call binding the contract method 0x9aec4bae. +// +// Solidity: function transferRestrictionsDisabledAfter() view returns(uint256) +func (_BackingEigen *BackingEigenCaller) TransferRestrictionsDisabledAfter(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BackingEigen.contract.Call(opts, &out, "transferRestrictionsDisabledAfter") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TransferRestrictionsDisabledAfter is a free data retrieval call binding the contract method 0x9aec4bae. +// +// Solidity: function transferRestrictionsDisabledAfter() view returns(uint256) +func (_BackingEigen *BackingEigenSession) TransferRestrictionsDisabledAfter() (*big.Int, error) { + return _BackingEigen.Contract.TransferRestrictionsDisabledAfter(&_BackingEigen.CallOpts) +} + +// TransferRestrictionsDisabledAfter is a free data retrieval call binding the contract method 0x9aec4bae. +// +// Solidity: function transferRestrictionsDisabledAfter() view returns(uint256) +func (_BackingEigen *BackingEigenCallerSession) TransferRestrictionsDisabledAfter() (*big.Int, error) { + return _BackingEigen.Contract.TransferRestrictionsDisabledAfter(&_BackingEigen.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_BackingEigen *BackingEigenTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _BackingEigen.contract.Transact(opts, "approve", spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_BackingEigen *BackingEigenSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _BackingEigen.Contract.Approve(&_BackingEigen.TransactOpts, spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_BackingEigen *BackingEigenTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _BackingEigen.Contract.Approve(&_BackingEigen.TransactOpts, spender, amount) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_BackingEigen *BackingEigenTransactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _BackingEigen.contract.Transact(opts, "decreaseAllowance", spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_BackingEigen *BackingEigenSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _BackingEigen.Contract.DecreaseAllowance(&_BackingEigen.TransactOpts, spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_BackingEigen *BackingEigenTransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _BackingEigen.Contract.DecreaseAllowance(&_BackingEigen.TransactOpts, spender, subtractedValue) +} + +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. +// +// Solidity: function delegate(address delegatee) returns() +func (_BackingEigen *BackingEigenTransactor) Delegate(opts *bind.TransactOpts, delegatee common.Address) (*types.Transaction, error) { + return _BackingEigen.contract.Transact(opts, "delegate", delegatee) +} + +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. +// +// Solidity: function delegate(address delegatee) returns() +func (_BackingEigen *BackingEigenSession) Delegate(delegatee common.Address) (*types.Transaction, error) { + return _BackingEigen.Contract.Delegate(&_BackingEigen.TransactOpts, delegatee) +} + +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. +// +// Solidity: function delegate(address delegatee) returns() +func (_BackingEigen *BackingEigenTransactorSession) Delegate(delegatee common.Address) (*types.Transaction, error) { + return _BackingEigen.Contract.Delegate(&_BackingEigen.TransactOpts, delegatee) +} + +// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520. +// +// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns() +func (_BackingEigen *BackingEigenTransactor) DelegateBySig(opts *bind.TransactOpts, delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _BackingEigen.contract.Transact(opts, "delegateBySig", delegatee, nonce, expiry, v, r, s) +} + +// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520. +// +// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns() +func (_BackingEigen *BackingEigenSession) DelegateBySig(delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _BackingEigen.Contract.DelegateBySig(&_BackingEigen.TransactOpts, delegatee, nonce, expiry, v, r, s) +} + +// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520. +// +// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns() +func (_BackingEigen *BackingEigenTransactorSession) DelegateBySig(delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _BackingEigen.Contract.DelegateBySig(&_BackingEigen.TransactOpts, delegatee, nonce, expiry, v, r, s) +} + +// DisableTransferRestrictions is a paid mutator transaction binding the contract method 0xeb415f45. +// +// Solidity: function disableTransferRestrictions() returns() +func (_BackingEigen *BackingEigenTransactor) DisableTransferRestrictions(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BackingEigen.contract.Transact(opts, "disableTransferRestrictions") +} + +// DisableTransferRestrictions is a paid mutator transaction binding the contract method 0xeb415f45. +// +// Solidity: function disableTransferRestrictions() returns() +func (_BackingEigen *BackingEigenSession) DisableTransferRestrictions() (*types.Transaction, error) { + return _BackingEigen.Contract.DisableTransferRestrictions(&_BackingEigen.TransactOpts) +} + +// DisableTransferRestrictions is a paid mutator transaction binding the contract method 0xeb415f45. +// +// Solidity: function disableTransferRestrictions() returns() +func (_BackingEigen *BackingEigenTransactorSession) DisableTransferRestrictions() (*types.Transaction, error) { + return _BackingEigen.Contract.DisableTransferRestrictions(&_BackingEigen.TransactOpts) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_BackingEigen *BackingEigenTransactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _BackingEigen.contract.Transact(opts, "increaseAllowance", spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_BackingEigen *BackingEigenSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _BackingEigen.Contract.IncreaseAllowance(&_BackingEigen.TransactOpts, spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_BackingEigen *BackingEigenTransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _BackingEigen.Contract.IncreaseAllowance(&_BackingEigen.TransactOpts, spender, addedValue) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address initialOwner) returns() +func (_BackingEigen *BackingEigenTransactor) Initialize(opts *bind.TransactOpts, initialOwner common.Address) (*types.Transaction, error) { + return _BackingEigen.contract.Transact(opts, "initialize", initialOwner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address initialOwner) returns() +func (_BackingEigen *BackingEigenSession) Initialize(initialOwner common.Address) (*types.Transaction, error) { + return _BackingEigen.Contract.Initialize(&_BackingEigen.TransactOpts, initialOwner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address initialOwner) returns() +func (_BackingEigen *BackingEigenTransactorSession) Initialize(initialOwner common.Address) (*types.Transaction, error) { + return _BackingEigen.Contract.Initialize(&_BackingEigen.TransactOpts, initialOwner) +} + +// Permit is a paid mutator transaction binding the contract method 0xd505accf. +// +// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns() +func (_BackingEigen *BackingEigenTransactor) Permit(opts *bind.TransactOpts, owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _BackingEigen.contract.Transact(opts, "permit", owner, spender, value, deadline, v, r, s) +} + +// Permit is a paid mutator transaction binding the contract method 0xd505accf. +// +// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns() +func (_BackingEigen *BackingEigenSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _BackingEigen.Contract.Permit(&_BackingEigen.TransactOpts, owner, spender, value, deadline, v, r, s) +} + +// Permit is a paid mutator transaction binding the contract method 0xd505accf. +// +// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns() +func (_BackingEigen *BackingEigenTransactorSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _BackingEigen.Contract.Permit(&_BackingEigen.TransactOpts, owner, spender, value, deadline, v, r, s) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_BackingEigen *BackingEigenTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BackingEigen.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_BackingEigen *BackingEigenSession) RenounceOwnership() (*types.Transaction, error) { + return _BackingEigen.Contract.RenounceOwnership(&_BackingEigen.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_BackingEigen *BackingEigenTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _BackingEigen.Contract.RenounceOwnership(&_BackingEigen.TransactOpts) +} + +// SetAllowedFrom is a paid mutator transaction binding the contract method 0x1ffacdef. +// +// Solidity: function setAllowedFrom(address from, bool isAllowedFrom) returns() +func (_BackingEigen *BackingEigenTransactor) SetAllowedFrom(opts *bind.TransactOpts, from common.Address, isAllowedFrom bool) (*types.Transaction, error) { + return _BackingEigen.contract.Transact(opts, "setAllowedFrom", from, isAllowedFrom) +} + +// SetAllowedFrom is a paid mutator transaction binding the contract method 0x1ffacdef. +// +// Solidity: function setAllowedFrom(address from, bool isAllowedFrom) returns() +func (_BackingEigen *BackingEigenSession) SetAllowedFrom(from common.Address, isAllowedFrom bool) (*types.Transaction, error) { + return _BackingEigen.Contract.SetAllowedFrom(&_BackingEigen.TransactOpts, from, isAllowedFrom) +} + +// SetAllowedFrom is a paid mutator transaction binding the contract method 0x1ffacdef. +// +// Solidity: function setAllowedFrom(address from, bool isAllowedFrom) returns() +func (_BackingEigen *BackingEigenTransactorSession) SetAllowedFrom(from common.Address, isAllowedFrom bool) (*types.Transaction, error) { + return _BackingEigen.Contract.SetAllowedFrom(&_BackingEigen.TransactOpts, from, isAllowedFrom) +} + +// SetAllowedTo is a paid mutator transaction binding the contract method 0xb8c25594. +// +// Solidity: function setAllowedTo(address to, bool isAllowedTo) returns() +func (_BackingEigen *BackingEigenTransactor) SetAllowedTo(opts *bind.TransactOpts, to common.Address, isAllowedTo bool) (*types.Transaction, error) { + return _BackingEigen.contract.Transact(opts, "setAllowedTo", to, isAllowedTo) +} + +// SetAllowedTo is a paid mutator transaction binding the contract method 0xb8c25594. +// +// Solidity: function setAllowedTo(address to, bool isAllowedTo) returns() +func (_BackingEigen *BackingEigenSession) SetAllowedTo(to common.Address, isAllowedTo bool) (*types.Transaction, error) { + return _BackingEigen.Contract.SetAllowedTo(&_BackingEigen.TransactOpts, to, isAllowedTo) +} + +// SetAllowedTo is a paid mutator transaction binding the contract method 0xb8c25594. +// +// Solidity: function setAllowedTo(address to, bool isAllowedTo) returns() +func (_BackingEigen *BackingEigenTransactorSession) SetAllowedTo(to common.Address, isAllowedTo bool) (*types.Transaction, error) { + return _BackingEigen.Contract.SetAllowedTo(&_BackingEigen.TransactOpts, to, isAllowedTo) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_BackingEigen *BackingEigenTransactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _BackingEigen.contract.Transact(opts, "transfer", to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_BackingEigen *BackingEigenSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _BackingEigen.Contract.Transfer(&_BackingEigen.TransactOpts, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_BackingEigen *BackingEigenTransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _BackingEigen.Contract.Transfer(&_BackingEigen.TransactOpts, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_BackingEigen *BackingEigenTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _BackingEigen.contract.Transact(opts, "transferFrom", from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_BackingEigen *BackingEigenSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _BackingEigen.Contract.TransferFrom(&_BackingEigen.TransactOpts, from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_BackingEigen *BackingEigenTransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _BackingEigen.Contract.TransferFrom(&_BackingEigen.TransactOpts, from, to, amount) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_BackingEigen *BackingEigenTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _BackingEigen.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_BackingEigen *BackingEigenSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _BackingEigen.Contract.TransferOwnership(&_BackingEigen.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_BackingEigen *BackingEigenTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _BackingEigen.Contract.TransferOwnership(&_BackingEigen.TransactOpts, newOwner) +} + +// BackingEigenApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the BackingEigen contract. +type BackingEigenApprovalIterator struct { + Event *BackingEigenApproval // 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 *BackingEigenApprovalIterator) 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(BackingEigenApproval) + 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(BackingEigenApproval) + 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 *BackingEigenApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BackingEigenApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BackingEigenApproval represents a Approval event raised by the BackingEigen contract. +type BackingEigenApproval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_BackingEigen *BackingEigenFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*BackingEigenApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _BackingEigen.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &BackingEigenApprovalIterator{contract: _BackingEigen.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_BackingEigen *BackingEigenFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *BackingEigenApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _BackingEigen.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + 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(BackingEigenApproval) + if err := _BackingEigen.contract.UnpackLog(event, "Approval", 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 +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_BackingEigen *BackingEigenFilterer) ParseApproval(log types.Log) (*BackingEigenApproval, error) { + event := new(BackingEigenApproval) + if err := _BackingEigen.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BackingEigenBackedIterator is returned from FilterBacked and is used to iterate over the raw logs and unpacked data for Backed events raised by the BackingEigen contract. +type BackingEigenBackedIterator struct { + Event *BackingEigenBacked // 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 *BackingEigenBackedIterator) 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(BackingEigenBacked) + 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(BackingEigenBacked) + 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 *BackingEigenBackedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BackingEigenBackedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BackingEigenBacked represents a Backed event raised by the BackingEigen contract. +type BackingEigenBacked struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBacked is a free log retrieval operation binding the contract event 0xb7c23c1e2e36f298e9879a88ecfcd07e28fbb439bcfa9c78ca1363ca14370d26. +// +// Solidity: event Backed() +func (_BackingEigen *BackingEigenFilterer) FilterBacked(opts *bind.FilterOpts) (*BackingEigenBackedIterator, error) { + + logs, sub, err := _BackingEigen.contract.FilterLogs(opts, "Backed") + if err != nil { + return nil, err + } + return &BackingEigenBackedIterator{contract: _BackingEigen.contract, event: "Backed", logs: logs, sub: sub}, nil +} + +// WatchBacked is a free log subscription operation binding the contract event 0xb7c23c1e2e36f298e9879a88ecfcd07e28fbb439bcfa9c78ca1363ca14370d26. +// +// Solidity: event Backed() +func (_BackingEigen *BackingEigenFilterer) WatchBacked(opts *bind.WatchOpts, sink chan<- *BackingEigenBacked) (event.Subscription, error) { + + logs, sub, err := _BackingEigen.contract.WatchLogs(opts, "Backed") + 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(BackingEigenBacked) + if err := _BackingEigen.contract.UnpackLog(event, "Backed", 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 +} + +// ParseBacked is a log parse operation binding the contract event 0xb7c23c1e2e36f298e9879a88ecfcd07e28fbb439bcfa9c78ca1363ca14370d26. +// +// Solidity: event Backed() +func (_BackingEigen *BackingEigenFilterer) ParseBacked(log types.Log) (*BackingEigenBacked, error) { + event := new(BackingEigenBacked) + if err := _BackingEigen.contract.UnpackLog(event, "Backed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BackingEigenDelegateChangedIterator is returned from FilterDelegateChanged and is used to iterate over the raw logs and unpacked data for DelegateChanged events raised by the BackingEigen contract. +type BackingEigenDelegateChangedIterator struct { + Event *BackingEigenDelegateChanged // 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 *BackingEigenDelegateChangedIterator) 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(BackingEigenDelegateChanged) + 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(BackingEigenDelegateChanged) + 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 *BackingEigenDelegateChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BackingEigenDelegateChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BackingEigenDelegateChanged represents a DelegateChanged event raised by the BackingEigen contract. +type BackingEigenDelegateChanged struct { + Delegator common.Address + FromDelegate common.Address + ToDelegate common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDelegateChanged is a free log retrieval operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f. +// +// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate) +func (_BackingEigen *BackingEigenFilterer) FilterDelegateChanged(opts *bind.FilterOpts, delegator []common.Address, fromDelegate []common.Address, toDelegate []common.Address) (*BackingEigenDelegateChangedIterator, error) { + + var delegatorRule []interface{} + for _, delegatorItem := range delegator { + delegatorRule = append(delegatorRule, delegatorItem) + } + var fromDelegateRule []interface{} + for _, fromDelegateItem := range fromDelegate { + fromDelegateRule = append(fromDelegateRule, fromDelegateItem) + } + var toDelegateRule []interface{} + for _, toDelegateItem := range toDelegate { + toDelegateRule = append(toDelegateRule, toDelegateItem) + } + + logs, sub, err := _BackingEigen.contract.FilterLogs(opts, "DelegateChanged", delegatorRule, fromDelegateRule, toDelegateRule) + if err != nil { + return nil, err + } + return &BackingEigenDelegateChangedIterator{contract: _BackingEigen.contract, event: "DelegateChanged", logs: logs, sub: sub}, nil +} + +// WatchDelegateChanged is a free log subscription operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f. +// +// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate) +func (_BackingEigen *BackingEigenFilterer) WatchDelegateChanged(opts *bind.WatchOpts, sink chan<- *BackingEigenDelegateChanged, delegator []common.Address, fromDelegate []common.Address, toDelegate []common.Address) (event.Subscription, error) { + + var delegatorRule []interface{} + for _, delegatorItem := range delegator { + delegatorRule = append(delegatorRule, delegatorItem) + } + var fromDelegateRule []interface{} + for _, fromDelegateItem := range fromDelegate { + fromDelegateRule = append(fromDelegateRule, fromDelegateItem) + } + var toDelegateRule []interface{} + for _, toDelegateItem := range toDelegate { + toDelegateRule = append(toDelegateRule, toDelegateItem) + } + + logs, sub, err := _BackingEigen.contract.WatchLogs(opts, "DelegateChanged", delegatorRule, fromDelegateRule, toDelegateRule) + 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(BackingEigenDelegateChanged) + if err := _BackingEigen.contract.UnpackLog(event, "DelegateChanged", 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 +} + +// ParseDelegateChanged is a log parse operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f. +// +// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate) +func (_BackingEigen *BackingEigenFilterer) ParseDelegateChanged(log types.Log) (*BackingEigenDelegateChanged, error) { + event := new(BackingEigenDelegateChanged) + if err := _BackingEigen.contract.UnpackLog(event, "DelegateChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BackingEigenDelegateVotesChangedIterator is returned from FilterDelegateVotesChanged and is used to iterate over the raw logs and unpacked data for DelegateVotesChanged events raised by the BackingEigen contract. +type BackingEigenDelegateVotesChangedIterator struct { + Event *BackingEigenDelegateVotesChanged // 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 *BackingEigenDelegateVotesChangedIterator) 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(BackingEigenDelegateVotesChanged) + 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(BackingEigenDelegateVotesChanged) + 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 *BackingEigenDelegateVotesChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BackingEigenDelegateVotesChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BackingEigenDelegateVotesChanged represents a DelegateVotesChanged event raised by the BackingEigen contract. +type BackingEigenDelegateVotesChanged struct { + Delegate common.Address + PreviousBalance *big.Int + NewBalance *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDelegateVotesChanged is a free log retrieval operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724. +// +// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance) +func (_BackingEigen *BackingEigenFilterer) FilterDelegateVotesChanged(opts *bind.FilterOpts, delegate []common.Address) (*BackingEigenDelegateVotesChangedIterator, error) { + + var delegateRule []interface{} + for _, delegateItem := range delegate { + delegateRule = append(delegateRule, delegateItem) + } + + logs, sub, err := _BackingEigen.contract.FilterLogs(opts, "DelegateVotesChanged", delegateRule) + if err != nil { + return nil, err + } + return &BackingEigenDelegateVotesChangedIterator{contract: _BackingEigen.contract, event: "DelegateVotesChanged", logs: logs, sub: sub}, nil +} + +// WatchDelegateVotesChanged is a free log subscription operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724. +// +// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance) +func (_BackingEigen *BackingEigenFilterer) WatchDelegateVotesChanged(opts *bind.WatchOpts, sink chan<- *BackingEigenDelegateVotesChanged, delegate []common.Address) (event.Subscription, error) { + + var delegateRule []interface{} + for _, delegateItem := range delegate { + delegateRule = append(delegateRule, delegateItem) + } + + logs, sub, err := _BackingEigen.contract.WatchLogs(opts, "DelegateVotesChanged", delegateRule) + 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(BackingEigenDelegateVotesChanged) + if err := _BackingEigen.contract.UnpackLog(event, "DelegateVotesChanged", 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 +} + +// ParseDelegateVotesChanged is a log parse operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724. +// +// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance) +func (_BackingEigen *BackingEigenFilterer) ParseDelegateVotesChanged(log types.Log) (*BackingEigenDelegateVotesChanged, error) { + event := new(BackingEigenDelegateVotesChanged) + if err := _BackingEigen.contract.UnpackLog(event, "DelegateVotesChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BackingEigenEIP712DomainChangedIterator is returned from FilterEIP712DomainChanged and is used to iterate over the raw logs and unpacked data for EIP712DomainChanged events raised by the BackingEigen contract. +type BackingEigenEIP712DomainChangedIterator struct { + Event *BackingEigenEIP712DomainChanged // 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 *BackingEigenEIP712DomainChangedIterator) 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(BackingEigenEIP712DomainChanged) + 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(BackingEigenEIP712DomainChanged) + 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 *BackingEigenEIP712DomainChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BackingEigenEIP712DomainChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BackingEigenEIP712DomainChanged represents a EIP712DomainChanged event raised by the BackingEigen contract. +type BackingEigenEIP712DomainChanged struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterEIP712DomainChanged is a free log retrieval operation binding the contract event 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31. +// +// Solidity: event EIP712DomainChanged() +func (_BackingEigen *BackingEigenFilterer) FilterEIP712DomainChanged(opts *bind.FilterOpts) (*BackingEigenEIP712DomainChangedIterator, error) { + + logs, sub, err := _BackingEigen.contract.FilterLogs(opts, "EIP712DomainChanged") + if err != nil { + return nil, err + } + return &BackingEigenEIP712DomainChangedIterator{contract: _BackingEigen.contract, event: "EIP712DomainChanged", logs: logs, sub: sub}, nil +} + +// WatchEIP712DomainChanged is a free log subscription operation binding the contract event 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31. +// +// Solidity: event EIP712DomainChanged() +func (_BackingEigen *BackingEigenFilterer) WatchEIP712DomainChanged(opts *bind.WatchOpts, sink chan<- *BackingEigenEIP712DomainChanged) (event.Subscription, error) { + + logs, sub, err := _BackingEigen.contract.WatchLogs(opts, "EIP712DomainChanged") + 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(BackingEigenEIP712DomainChanged) + if err := _BackingEigen.contract.UnpackLog(event, "EIP712DomainChanged", 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 +} + +// ParseEIP712DomainChanged is a log parse operation binding the contract event 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31. +// +// Solidity: event EIP712DomainChanged() +func (_BackingEigen *BackingEigenFilterer) ParseEIP712DomainChanged(log types.Log) (*BackingEigenEIP712DomainChanged, error) { + event := new(BackingEigenEIP712DomainChanged) + if err := _BackingEigen.contract.UnpackLog(event, "EIP712DomainChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BackingEigenInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the BackingEigen contract. +type BackingEigenInitializedIterator struct { + Event *BackingEigenInitialized // 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 *BackingEigenInitializedIterator) 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(BackingEigenInitialized) + 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(BackingEigenInitialized) + 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 *BackingEigenInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BackingEigenInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BackingEigenInitialized represents a Initialized event raised by the BackingEigen contract. +type BackingEigenInitialized 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 (_BackingEigen *BackingEigenFilterer) FilterInitialized(opts *bind.FilterOpts) (*BackingEigenInitializedIterator, error) { + + logs, sub, err := _BackingEigen.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &BackingEigenInitializedIterator{contract: _BackingEigen.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 (_BackingEigen *BackingEigenFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *BackingEigenInitialized) (event.Subscription, error) { + + logs, sub, err := _BackingEigen.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(BackingEigenInitialized) + if err := _BackingEigen.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 (_BackingEigen *BackingEigenFilterer) ParseInitialized(log types.Log) (*BackingEigenInitialized, error) { + event := new(BackingEigenInitialized) + if err := _BackingEigen.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BackingEigenOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the BackingEigen contract. +type BackingEigenOwnershipTransferredIterator struct { + Event *BackingEigenOwnershipTransferred // 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 *BackingEigenOwnershipTransferredIterator) 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(BackingEigenOwnershipTransferred) + 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(BackingEigenOwnershipTransferred) + 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 *BackingEigenOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BackingEigenOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BackingEigenOwnershipTransferred represents a OwnershipTransferred event raised by the BackingEigen contract. +type BackingEigenOwnershipTransferred 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 (_BackingEigen *BackingEigenFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*BackingEigenOwnershipTransferredIterator, 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 := _BackingEigen.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &BackingEigenOwnershipTransferredIterator{contract: _BackingEigen.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 (_BackingEigen *BackingEigenFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *BackingEigenOwnershipTransferred, 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 := _BackingEigen.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(BackingEigenOwnershipTransferred) + if err := _BackingEigen.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 (_BackingEigen *BackingEigenFilterer) ParseOwnershipTransferred(log types.Log) (*BackingEigenOwnershipTransferred, error) { + event := new(BackingEigenOwnershipTransferred) + if err := _BackingEigen.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BackingEigenSetAllowedFromIterator is returned from FilterSetAllowedFrom and is used to iterate over the raw logs and unpacked data for SetAllowedFrom events raised by the BackingEigen contract. +type BackingEigenSetAllowedFromIterator struct { + Event *BackingEigenSetAllowedFrom // 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 *BackingEigenSetAllowedFromIterator) 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(BackingEigenSetAllowedFrom) + 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(BackingEigenSetAllowedFrom) + 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 *BackingEigenSetAllowedFromIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BackingEigenSetAllowedFromIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BackingEigenSetAllowedFrom represents a SetAllowedFrom event raised by the BackingEigen contract. +type BackingEigenSetAllowedFrom struct { + From common.Address + IsAllowedFrom bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSetAllowedFrom is a free log retrieval operation binding the contract event 0xcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed2843622271. +// +// Solidity: event SetAllowedFrom(address indexed from, bool isAllowedFrom) +func (_BackingEigen *BackingEigenFilterer) FilterSetAllowedFrom(opts *bind.FilterOpts, from []common.Address) (*BackingEigenSetAllowedFromIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _BackingEigen.contract.FilterLogs(opts, "SetAllowedFrom", fromRule) + if err != nil { + return nil, err + } + return &BackingEigenSetAllowedFromIterator{contract: _BackingEigen.contract, event: "SetAllowedFrom", logs: logs, sub: sub}, nil +} + +// WatchSetAllowedFrom is a free log subscription operation binding the contract event 0xcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed2843622271. +// +// Solidity: event SetAllowedFrom(address indexed from, bool isAllowedFrom) +func (_BackingEigen *BackingEigenFilterer) WatchSetAllowedFrom(opts *bind.WatchOpts, sink chan<- *BackingEigenSetAllowedFrom, from []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _BackingEigen.contract.WatchLogs(opts, "SetAllowedFrom", fromRule) + 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(BackingEigenSetAllowedFrom) + if err := _BackingEigen.contract.UnpackLog(event, "SetAllowedFrom", 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 +} + +// ParseSetAllowedFrom is a log parse operation binding the contract event 0xcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed2843622271. +// +// Solidity: event SetAllowedFrom(address indexed from, bool isAllowedFrom) +func (_BackingEigen *BackingEigenFilterer) ParseSetAllowedFrom(log types.Log) (*BackingEigenSetAllowedFrom, error) { + event := new(BackingEigenSetAllowedFrom) + if err := _BackingEigen.contract.UnpackLog(event, "SetAllowedFrom", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BackingEigenSetAllowedToIterator is returned from FilterSetAllowedTo and is used to iterate over the raw logs and unpacked data for SetAllowedTo events raised by the BackingEigen contract. +type BackingEigenSetAllowedToIterator struct { + Event *BackingEigenSetAllowedTo // 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 *BackingEigenSetAllowedToIterator) 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(BackingEigenSetAllowedTo) + 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(BackingEigenSetAllowedTo) + 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 *BackingEigenSetAllowedToIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BackingEigenSetAllowedToIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BackingEigenSetAllowedTo represents a SetAllowedTo event raised by the BackingEigen contract. +type BackingEigenSetAllowedTo struct { + To common.Address + IsAllowedTo bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSetAllowedTo is a free log retrieval operation binding the contract event 0x72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b. +// +// Solidity: event SetAllowedTo(address indexed to, bool isAllowedTo) +func (_BackingEigen *BackingEigenFilterer) FilterSetAllowedTo(opts *bind.FilterOpts, to []common.Address) (*BackingEigenSetAllowedToIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BackingEigen.contract.FilterLogs(opts, "SetAllowedTo", toRule) + if err != nil { + return nil, err + } + return &BackingEigenSetAllowedToIterator{contract: _BackingEigen.contract, event: "SetAllowedTo", logs: logs, sub: sub}, nil +} + +// WatchSetAllowedTo is a free log subscription operation binding the contract event 0x72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b. +// +// Solidity: event SetAllowedTo(address indexed to, bool isAllowedTo) +func (_BackingEigen *BackingEigenFilterer) WatchSetAllowedTo(opts *bind.WatchOpts, sink chan<- *BackingEigenSetAllowedTo, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BackingEigen.contract.WatchLogs(opts, "SetAllowedTo", toRule) + 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(BackingEigenSetAllowedTo) + if err := _BackingEigen.contract.UnpackLog(event, "SetAllowedTo", 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 +} + +// ParseSetAllowedTo is a log parse operation binding the contract event 0x72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b. +// +// Solidity: event SetAllowedTo(address indexed to, bool isAllowedTo) +func (_BackingEigen *BackingEigenFilterer) ParseSetAllowedTo(log types.Log) (*BackingEigenSetAllowedTo, error) { + event := new(BackingEigenSetAllowedTo) + if err := _BackingEigen.contract.UnpackLog(event, "SetAllowedTo", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BackingEigenTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the BackingEigen contract. +type BackingEigenTransferIterator struct { + Event *BackingEigenTransfer // 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 *BackingEigenTransferIterator) 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(BackingEigenTransfer) + 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(BackingEigenTransfer) + 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 *BackingEigenTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BackingEigenTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BackingEigenTransfer represents a Transfer event raised by the BackingEigen contract. +type BackingEigenTransfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_BackingEigen *BackingEigenFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*BackingEigenTransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BackingEigen.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &BackingEigenTransferIterator{contract: _BackingEigen.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_BackingEigen *BackingEigenFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *BackingEigenTransfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BackingEigen.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + 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(BackingEigenTransfer) + if err := _BackingEigen.contract.UnpackLog(event, "Transfer", 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 +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_BackingEigen *BackingEigenFilterer) ParseTransfer(log types.Log) (*BackingEigenTransfer, error) { + event := new(BackingEigenTransfer) + if err := _BackingEigen.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BackingEigenTransferRestrictionsDisabledIterator is returned from FilterTransferRestrictionsDisabled and is used to iterate over the raw logs and unpacked data for TransferRestrictionsDisabled events raised by the BackingEigen contract. +type BackingEigenTransferRestrictionsDisabledIterator struct { + Event *BackingEigenTransferRestrictionsDisabled // 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 *BackingEigenTransferRestrictionsDisabledIterator) 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(BackingEigenTransferRestrictionsDisabled) + 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(BackingEigenTransferRestrictionsDisabled) + 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 *BackingEigenTransferRestrictionsDisabledIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BackingEigenTransferRestrictionsDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BackingEigenTransferRestrictionsDisabled represents a TransferRestrictionsDisabled event raised by the BackingEigen contract. +type BackingEigenTransferRestrictionsDisabled struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransferRestrictionsDisabled is a free log retrieval operation binding the contract event 0x2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f64. +// +// Solidity: event TransferRestrictionsDisabled() +func (_BackingEigen *BackingEigenFilterer) FilterTransferRestrictionsDisabled(opts *bind.FilterOpts) (*BackingEigenTransferRestrictionsDisabledIterator, error) { + + logs, sub, err := _BackingEigen.contract.FilterLogs(opts, "TransferRestrictionsDisabled") + if err != nil { + return nil, err + } + return &BackingEigenTransferRestrictionsDisabledIterator{contract: _BackingEigen.contract, event: "TransferRestrictionsDisabled", logs: logs, sub: sub}, nil +} + +// WatchTransferRestrictionsDisabled is a free log subscription operation binding the contract event 0x2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f64. +// +// Solidity: event TransferRestrictionsDisabled() +func (_BackingEigen *BackingEigenFilterer) WatchTransferRestrictionsDisabled(opts *bind.WatchOpts, sink chan<- *BackingEigenTransferRestrictionsDisabled) (event.Subscription, error) { + + logs, sub, err := _BackingEigen.contract.WatchLogs(opts, "TransferRestrictionsDisabled") + 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(BackingEigenTransferRestrictionsDisabled) + if err := _BackingEigen.contract.UnpackLog(event, "TransferRestrictionsDisabled", 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 +} + +// ParseTransferRestrictionsDisabled is a log parse operation binding the contract event 0x2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f64. +// +// Solidity: event TransferRestrictionsDisabled() +func (_BackingEigen *BackingEigenFilterer) ParseTransferRestrictionsDisabled(log types.Log) (*BackingEigenTransferRestrictionsDisabled, error) { + event := new(BackingEigenTransferRestrictionsDisabled) + if err := _BackingEigen.contract.UnpackLog(event, "TransferRestrictionsDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/BackingEigen/tmp.abi b/pkg/bindings/BackingEigen/tmp.abi new file mode 100644 index 000000000..147e4623b --- /dev/null +++ b/pkg/bindings/BackingEigen/tmp.abi @@ -0,0 +1,905 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_EIGEN", + "type": "address", + "internalType": "contract IERC20" + } + ], + "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": "contract IERC20" + } + ], + "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": "struct ERC20VotesUpgradeable.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 + } +] diff --git a/pkg/bindings/BackingEigen/tmp.bin b/pkg/bindings/BackingEigen/tmp.bin new file mode 100644 index 000000000..64763213e --- /dev/null +++ b/pkg/bindings/BackingEigen/tmp.bin @@ -0,0 +1 @@ +0x60a06040523480156200001157600080fd5b5060405162002b4438038062002b44833981016040819052620000349162000113565b6001600160a01b0381166080526200004b62000052565b5062000145565b600054610100900460ff1615620000bf5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161462000111576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012657600080fd5b81516001600160a01b03811681146200013e57600080fd5b9392505050565b6080516129c76200017d6000396000818161056f01528181610c5b01528181610c8601528181610cb10152610cd201526129c76000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806384b0196e11610125578063b8c25594116100ad578063dd62ed3e1161007c578063dd62ed3e146104ff578063eb415f4514610512578063f1127ed81461051a578063f2fde38b14610557578063fdc371ce1461056a57600080fd5b8063b8c25594146104b3578063c3cda520146104c6578063c4d66de8146104d9578063d505accf146104ec57600080fd5b806395d89b41116100f457806395d89b41146104685780639ab24eb0146104705780639aec4bae14610483578063a457c2d71461048d578063a9059cbb146104a057600080fd5b806384b0196e1461040a5780638da5cb5b146104255780638e539e8c1461043657806391ddadf41461044957600080fd5b80633a46b1a8116101a85780636fcfff45116101775780636fcfff451461037a57806370a08231146103a2578063715018a6146103cb57806378aa33ba146103d35780637ecebe00146103f757600080fd5b80633a46b1a8146102e65780634bf5d7e9146102f9578063587cde1e146103235780635c19a95c1461036757600080fd5b80631ffacdef116101ef5780631ffacdef1461029457806323b872dd146102a9578063313ce567146102bc5780633644e515146102cb57806339509351146102d357600080fd5b80630455e6941461022157806306fdde031461025a578063095ea7b31461026f57806318160ddd14610282575b600080fd5b61024561022f366004612548565b6101316020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610262610591565b60405161025191906125b0565b61024561027d3660046125c3565b610623565b6067545b604051908152602001610251565b6102a76102a23660046125ed565b61063b565b005b6102456102b7366004612629565b610651565b60405160128152602001610251565b610286610675565b6102456102e13660046125c3565b610684565b6102866102f43660046125c3565b6106a6565b60408051808201909152600e81526d06d6f64653d74696d657374616d760941b6020820152610262565b61034f610331366004612548565b6001600160a01b03908116600090815260fe60205260409020541690565b6040516001600160a01b039091168152602001610251565b6102a7610375366004612548565b610730565b61038d610388366004612548565b61073d565b60405163ffffffff9091168152602001610251565b6102866103b0366004612548565b6001600160a01b031660009081526065602052604090205490565b6102a7610765565b6102456103e1366004612548565b6101326020526000908152604090205460ff1681565b610286610405366004612548565b610779565b610412610797565b6040516102519796959493929190612665565b6033546001600160a01b031661034f565b6102866104443660046126fb565b610835565b61045161089d565b60405165ffffffffffff9091168152602001610251565b6102626108a8565b61028661047e366004612548565b6108b7565b6102866101305481565b61024561049b3660046125c3565b610939565b6102456104ae3660046125c3565b6109b4565b6102a76104c13660046125ed565b6109c2565b6102a76104d4366004612725565b6109d4565b6102a76104e7366004612548565b610b0a565b6102a76104fa36600461277d565b610dc9565b61028661050d3660046127e7565b610f2d565b6102a7610f58565b61052d61052836600461281a565b611028565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610251565b6102a7610565366004612548565b6110ac565b61034f7f000000000000000000000000000000000000000000000000000000000000000081565b6060606880546105a09061284f565b80601f01602080910402602001604051908101604052809291908181526020018280546105cc9061284f565b80156106195780601f106105ee57610100808354040283529160200191610619565b820191906000526020600020905b8154815290600101906020018083116105fc57829003601f168201915b5050505050905090565b600033610631818585611122565b5060019392505050565b610643611246565b61064d82826112a0565b5050565b60003361065f858285611301565b61066a85858561137b565b506001949350505050565b600061067f611537565b905090565b6000336106318185856106978383610f2d565b6106a1919061289a565b611122565b60006106b061089d565b65ffffffffffff1682106107075760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b60448201526064015b60405180910390fd5b6001600160a01b038316600090815260ff602052604090206107299083611541565b9392505050565b61073a338261162a565b50565b6001600160a01b038116600090815260ff602052604081205461075f906116a4565b92915050565b61076d611246565b610777600061170d565b565b6001600160a01b038116600090815260cb602052604081205461075f565b6000606080600080600060606097546000801b1480156107b75750609854155b6107fb5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016106fe565b61080361175f565b61080b61176e565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600061083f61089d565b65ffffffffffff1682106108915760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b60448201526064016106fe565b61075f61010083611541565b600061067f4261177d565b6060606980546105a09061284f565b6001600160a01b038116600090815260ff60205260408120548015610926576001600160a01b038316600090815260ff6020526040902080546000198301908110610904576109046128b2565b60009182526020909120015464010000000090046001600160e01b0316610929565b60005b6001600160e01b03169392505050565b600033816109478286610f2d565b9050838110156109a75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106fe565b61066a8286868403611122565b60003361063181858561137b565b6109ca611246565b61064d82826117e4565b83421115610a245760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e6174757265206578706972656400000060448201526064016106fe565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a9e90610a969060a0016040516020818303038152906040528051906020012061183d565b85858561186a565b9050610aa981611892565b8614610af75760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e63650000000000000060448201526064016106fe565b610b01818861162a565b50505050505050565b600054610100900460ff1615808015610b2a5750600054600160ff909116105b80610b445750303b158015610b44575060005460ff166001145b610ba75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106fe565b6000805460ff191660011790558015610bca576000805461ff0019166101001790555b610bd26118ba565b610c1f6040518060400160405280600d81526020016c2130b1b5b4b7339022b4b3b2b760991b815250604051806040016040528060068152602001653122a4a3a2a760d11b8152506118e9565b610c288261170d565b610c4f604051806040016040528060068152602001653122a4a3a2a760d11b81525061191a565b60001961013055610c817f000000000000000000000000000000000000000000000000000000000000000060016112a0565b610cac7f000000000000000000000000000000000000000000000000000000000000000060016117e4565b610d577f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5291906128c8565b611964565b6040517fb7c23c1e2e36f298e9879a88ecfcd07e28fbb439bcfa9c78ca1363ca14370d2690600090a1801561064d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b83421115610e195760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106fe565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610e488c611892565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610ea38261183d565b90506000610eb38287878761186a565b9050896001600160a01b0316816001600160a01b031614610f165760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106fe565b610f218a8a8a611122565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b610f60611246565b6000196101305414610ff75760405162461bcd60e51b815260206004820152605460248201527f4261636b696e67456967656e2e64697361626c655472616e736665725265737460448201527f72696374696f6e733a207472616e73666572207265737472696374696f6e7320606482015273185c9948185b1c9958591e48191a5cd8589b195960621b608482015260a4016106fe565b60006101308190556040517f2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f649190a1565b60408051808201909152600080825260208201526001600160a01b038316600090815260ff60205260409020805463ffffffff841690811061106c5761106c6128b2565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6110b4611246565b6001600160a01b0381166111195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106fe565b61073a8161170d565b6001600160a01b0383166111845760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106fe565b6001600160a01b0382166111e55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106fe565b6001600160a01b0383811660008181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6033546001600160a01b031633146107775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106fe565b6001600160a01b03821660008181526101316020908152604091829020805460ff191685151590811790915591519182527fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed284362227191015b60405180910390a25050565b600061130d8484610f2d565b9050600019811461137557818110156113685760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106fe565b6113758484848403611122565b50505050565b6001600160a01b0383166113df5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106fe565b6001600160a01b0382166114415760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106fe565b61144c8383836119ef565b6001600160a01b038316600090815260656020526040902054818110156114c45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106fe565b6001600160a01b0380851660008181526065602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115249086815260200190565b60405180910390a3611375848484611acd565b600061067f611aff565b81546000908181600581111561159b57600061155c84611b73565b61156690856128e1565b600088815260209020909150869082015463ffffffff16111561158b57809150611599565b61159681600161289a565b92505b505b808210156115e85760006115af8383611c58565b600088815260209020909150869082015463ffffffff1611156115d4578091506115e2565b6115df81600161289a565b92505b5061159b565b8015611614576000868152602090208101600019015464010000000090046001600160e01b0316611617565b60005b6001600160e01b03169695505050505050565b6001600160a01b03828116600081815260fe6020818152604080842080546065845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611375828483611c73565b600063ffffffff8211156117095760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016106fe565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060609980546105a09061284f565b6060609a80546105a09061284f565b600065ffffffffffff8211156117095760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b60648201526084016106fe565b6001600160a01b03821660008181526101326020908152604091829020805460ff191685151590811790915591519182527f72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b91016112f5565b600061075f61184a611537565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600061187b87878787611db0565b9150915061188881611e74565b5095945050505050565b6001600160a01b038116600090815260cb602052604090208054600181018255905b50919050565b600054610100900460ff166118e15760405162461bcd60e51b81526004016106fe906128f8565b610777611fc2565b600054610100900460ff166119105760405162461bcd60e51b81526004016106fe906128f8565b61064d8282611ff2565b600054610100900460ff166119415760405162461bcd60e51b81526004016106fe906128f8565b61073a81604051806040016040528060018152602001603160f81b815250612040565b61196e828261209d565b6067546001600160e01b0310156119e05760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b60648201526084016106fe565b6113756101006121728361217e565b610130544211611ac8576001600160a01b0383166000908152610131602052604090205460ff1680611a3a57506001600160a01b0382166000908152610132602052604090205460ff165b80611a4c57506001600160a01b038316155b611ac85760405162461bcd60e51b815260206004820152604160248201527f4261636b696e67456967656e2e5f6265666f7265546f6b656e5472616e73666560448201527f723a2066726f6d206f7220746f206d7573742062652077686974656c697374656064820152601960fa1b608482015260a4016106fe565b505050565b6001600160a01b03838116600090815260fe6020526040808220548584168352912054611ac892918216911683611c73565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611b2a6122f3565b611b3261234c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600081611b8257506000919050565b60006001611b8f8461237d565b901c6001901b90506001818481611ba857611ba8612943565b048201901c90506001818481611bc057611bc0612943565b048201901c90506001818481611bd857611bd8612943565b048201901c90506001818481611bf057611bf0612943565b048201901c90506001818481611c0857611c08612943565b048201901c90506001818481611c2057611c20612943565b048201901c90506001818481611c3857611c38612943565b048201901c905061072981828581611c5257611c52612943565b04612411565b6000611c676002848418612959565b6107299084841661289a565b816001600160a01b0316836001600160a01b031614158015611c955750600081115b15611ac8576001600160a01b03831615611d23576001600160a01b038316600090815260ff602052604081208190611cd0906124278561217e565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611d18929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611ac8576001600160a01b038216600090815260ff602052604081208190611d59906121728561217e565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611da1929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611de75750600090506003611e6b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611e3b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611e6457600060019250925050611e6b565b9150600090505b94509492505050565b6000816004811115611e8857611e8861297b565b1415611e915750565b6001816004811115611ea557611ea561297b565b1415611ef35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106fe565b6002816004811115611f0757611f0761297b565b1415611f555760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106fe565b6003816004811115611f6957611f6961297b565b141561073a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106fe565b600054610100900460ff16611fe95760405162461bcd60e51b81526004016106fe906128f8565b6107773361170d565b600054610100900460ff166120195760405162461bcd60e51b81526004016106fe906128f8565b815161202c90606890602085019061249c565b508051611ac890606990602084019061249c565b600054610100900460ff166120675760405162461bcd60e51b81526004016106fe906128f8565b815161207a90609990602085019061249c565b50805161208e90609a90602084019061249c565b50506000609781905560985550565b6001600160a01b0382166120f35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106fe565b6120ff600083836119ef565b8060676000828254612111919061289a565b90915550506001600160a01b0382166000818152606560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361064d60008383611acd565b6000610729828461289a565b825460009081908181156121cb5760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b031660208201526121e0565b60408051808201909152600080825260208201525b905080602001516001600160e01b0316935061220084868863ffffffff16565b925060008211801561222a575061221561089d565b65ffffffffffff16816000015163ffffffff16145b1561226f5761223883612433565b60008881526020902083016000190180546001600160e01b03929092166401000000000263ffffffff9092169190911790556122e9565b86604051806040016040528061229361228661089d565b65ffffffffffff166116a4565b63ffffffff1681526020016122a786612433565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b6000806122fe61175f565b805190915015612315578051602090910120919050565b60975480156123245792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b60008061235761176e565b80519091501561236e578051602090910120919050565b60985480156123245792915050565b600080608083901c1561239257608092831c92015b604083901c156123a457604092831c92015b602083901c156123b657602092831c92015b601083901c156123c857601092831c92015b600883901c156123da57600892831c92015b600483901c156123ec57600492831c92015b600283901c156123fe57600292831c92015b600183901c1561075f5760010192915050565b60008183106124205781610729565b5090919050565b600061072982846128e1565b60006001600160e01b038211156117095760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016106fe565b8280546124a89061284f565b90600052602060002090601f0160209004810192826124ca5760008555612510565b82601f106124e357805160ff1916838001178555612510565b82800160010185558215612510579182015b828111156125105782518255916020019190600101906124f5565b506117099291505b808211156117095760008155600101612518565b80356001600160a01b038116811461254357600080fd5b919050565b60006020828403121561255a57600080fd5b6107298261252c565b6000815180845260005b818110156125895760208185018101518683018201520161256d565b8181111561259b576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006107296020830184612563565b600080604083850312156125d657600080fd5b6125df8361252c565b946020939093013593505050565b6000806040838503121561260057600080fd5b6126098361252c565b91506020830135801515811461261e57600080fd5b809150509250929050565b60008060006060848603121561263e57600080fd5b6126478461252c565b92506126556020850161252c565b9150604084013590509250925092565b60ff60f81b881681526000602060e08184015261268560e084018a612563565b8381036040850152612697818a612563565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156126e9578351835292840192918401916001016126cd565b50909c9b505050505050505050505050565b60006020828403121561270d57600080fd5b5035919050565b803560ff8116811461254357600080fd5b60008060008060008060c0878903121561273e57600080fd5b6127478761252c565b9550602087013594506040870135935061276360608801612714565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561279857600080fd5b6127a18861252c565b96506127af6020890161252c565b955060408801359450606088013593506127cb60808901612714565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156127fa57600080fd5b6128038361252c565b91506128116020840161252c565b90509250929050565b6000806040838503121561282d57600080fd5b6128368361252c565b9150602083013563ffffffff8116811461261e57600080fd5b600181811c9082168061286357607f821691505b602082108114156118b457634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156128ad576128ad612884565b500190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156128da57600080fd5b5051919050565b6000828210156128f3576128f3612884565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261297657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220efc3f106504e0c28cb8cafc81d7a3da2bf482a3d97d965d614af2702bacb7b2e64736f6c634300080c0033 diff --git a/pkg/bindings/BeaconChainProofs/binding.go b/pkg/bindings/BeaconChainProofs/binding.go new file mode 100644 index 000000000..3f5ad4e27 --- /dev/null +++ b/pkg/bindings/BeaconChainProofs/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 BeaconChainProofs + +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 +) + +// BeaconChainProofsMetaData contains all meta data concerning the BeaconChainProofs contract. +var BeaconChainProofsMetaData = &bind.MetaData{ + ABI: "[]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a88a4a15b84339b9348ec53e5350ee635bcd618f993ec6b2a71faa61ce1c38e864736f6c634300080c0033", +} + +// BeaconChainProofsABI is the input ABI used to generate the binding from. +// Deprecated: Use BeaconChainProofsMetaData.ABI instead. +var BeaconChainProofsABI = BeaconChainProofsMetaData.ABI + +// BeaconChainProofsBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use BeaconChainProofsMetaData.Bin instead. +var BeaconChainProofsBin = BeaconChainProofsMetaData.Bin + +// DeployBeaconChainProofs deploys a new Ethereum contract, binding an instance of BeaconChainProofs to it. +func DeployBeaconChainProofs(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *BeaconChainProofs, error) { + parsed, err := BeaconChainProofsMetaData.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(BeaconChainProofsBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &BeaconChainProofs{BeaconChainProofsCaller: BeaconChainProofsCaller{contract: contract}, BeaconChainProofsTransactor: BeaconChainProofsTransactor{contract: contract}, BeaconChainProofsFilterer: BeaconChainProofsFilterer{contract: contract}}, nil +} + +// BeaconChainProofs is an auto generated Go binding around an Ethereum contract. +type BeaconChainProofs struct { + BeaconChainProofsCaller // Read-only binding to the contract + BeaconChainProofsTransactor // Write-only binding to the contract + BeaconChainProofsFilterer // Log filterer for contract events +} + +// BeaconChainProofsCaller is an auto generated read-only Go binding around an Ethereum contract. +type BeaconChainProofsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BeaconChainProofsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type BeaconChainProofsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BeaconChainProofsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type BeaconChainProofsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BeaconChainProofsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type BeaconChainProofsSession struct { + Contract *BeaconChainProofs // 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 +} + +// BeaconChainProofsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type BeaconChainProofsCallerSession struct { + Contract *BeaconChainProofsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// BeaconChainProofsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type BeaconChainProofsTransactorSession struct { + Contract *BeaconChainProofsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BeaconChainProofsRaw is an auto generated low-level Go binding around an Ethereum contract. +type BeaconChainProofsRaw struct { + Contract *BeaconChainProofs // Generic contract binding to access the raw methods on +} + +// BeaconChainProofsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type BeaconChainProofsCallerRaw struct { + Contract *BeaconChainProofsCaller // Generic read-only contract binding to access the raw methods on +} + +// BeaconChainProofsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type BeaconChainProofsTransactorRaw struct { + Contract *BeaconChainProofsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewBeaconChainProofs creates a new instance of BeaconChainProofs, bound to a specific deployed contract. +func NewBeaconChainProofs(address common.Address, backend bind.ContractBackend) (*BeaconChainProofs, error) { + contract, err := bindBeaconChainProofs(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &BeaconChainProofs{BeaconChainProofsCaller: BeaconChainProofsCaller{contract: contract}, BeaconChainProofsTransactor: BeaconChainProofsTransactor{contract: contract}, BeaconChainProofsFilterer: BeaconChainProofsFilterer{contract: contract}}, nil +} + +// NewBeaconChainProofsCaller creates a new read-only instance of BeaconChainProofs, bound to a specific deployed contract. +func NewBeaconChainProofsCaller(address common.Address, caller bind.ContractCaller) (*BeaconChainProofsCaller, error) { + contract, err := bindBeaconChainProofs(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BeaconChainProofsCaller{contract: contract}, nil +} + +// NewBeaconChainProofsTransactor creates a new write-only instance of BeaconChainProofs, bound to a specific deployed contract. +func NewBeaconChainProofsTransactor(address common.Address, transactor bind.ContractTransactor) (*BeaconChainProofsTransactor, error) { + contract, err := bindBeaconChainProofs(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BeaconChainProofsTransactor{contract: contract}, nil +} + +// NewBeaconChainProofsFilterer creates a new log filterer instance of BeaconChainProofs, bound to a specific deployed contract. +func NewBeaconChainProofsFilterer(address common.Address, filterer bind.ContractFilterer) (*BeaconChainProofsFilterer, error) { + contract, err := bindBeaconChainProofs(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &BeaconChainProofsFilterer{contract: contract}, nil +} + +// bindBeaconChainProofs binds a generic wrapper to an already deployed contract. +func bindBeaconChainProofs(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := BeaconChainProofsMetaData.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 (_BeaconChainProofs *BeaconChainProofsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BeaconChainProofs.Contract.BeaconChainProofsCaller.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 (_BeaconChainProofs *BeaconChainProofsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BeaconChainProofs.Contract.BeaconChainProofsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BeaconChainProofs *BeaconChainProofsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BeaconChainProofs.Contract.BeaconChainProofsTransactor.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 (_BeaconChainProofs *BeaconChainProofsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BeaconChainProofs.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 (_BeaconChainProofs *BeaconChainProofsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BeaconChainProofs.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BeaconChainProofs *BeaconChainProofsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BeaconChainProofs.Contract.contract.Transact(opts, method, params...) +} diff --git a/pkg/bindings/BeaconChainProofs/tmp.abi b/pkg/bindings/BeaconChainProofs/tmp.abi new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/pkg/bindings/BeaconChainProofs/tmp.abi @@ -0,0 +1 @@ +[] diff --git a/pkg/bindings/BeaconChainProofs/tmp.bin b/pkg/bindings/BeaconChainProofs/tmp.bin new file mode 100644 index 000000000..29dcf9d1f --- /dev/null +++ b/pkg/bindings/BeaconChainProofs/tmp.bin @@ -0,0 +1 @@ +0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a88a4a15b84339b9348ec53e5350ee635bcd618f993ec6b2a71faa61ce1c38e864736f6c634300080c0033 diff --git a/pkg/bindings/BytesLib/binding.go b/pkg/bindings/BytesLib/binding.go new file mode 100644 index 000000000..7ba816ac7 --- /dev/null +++ b/pkg/bindings/BytesLib/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 BytesLib + +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 +) + +// BytesLibMetaData contains all meta data concerning the BytesLib contract. +var BytesLibMetaData = &bind.MetaData{ + ABI: "[]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209b60f9734813d3adba40c977a5c97c5a7fe877fca0f9071ac0cdc7fb4fbaf94764736f6c634300080c0033", +} + +// BytesLibABI is the input ABI used to generate the binding from. +// Deprecated: Use BytesLibMetaData.ABI instead. +var BytesLibABI = BytesLibMetaData.ABI + +// BytesLibBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use BytesLibMetaData.Bin instead. +var BytesLibBin = BytesLibMetaData.Bin + +// DeployBytesLib deploys a new Ethereum contract, binding an instance of BytesLib to it. +func DeployBytesLib(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *BytesLib, error) { + parsed, err := BytesLibMetaData.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(BytesLibBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &BytesLib{BytesLibCaller: BytesLibCaller{contract: contract}, BytesLibTransactor: BytesLibTransactor{contract: contract}, BytesLibFilterer: BytesLibFilterer{contract: contract}}, nil +} + +// BytesLib is an auto generated Go binding around an Ethereum contract. +type BytesLib struct { + BytesLibCaller // Read-only binding to the contract + BytesLibTransactor // Write-only binding to the contract + BytesLibFilterer // Log filterer for contract events +} + +// BytesLibCaller is an auto generated read-only Go binding around an Ethereum contract. +type BytesLibCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BytesLibTransactor is an auto generated write-only Go binding around an Ethereum contract. +type BytesLibTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BytesLibFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type BytesLibFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BytesLibSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type BytesLibSession struct { + Contract *BytesLib // 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 +} + +// BytesLibCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type BytesLibCallerSession struct { + Contract *BytesLibCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// BytesLibTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type BytesLibTransactorSession struct { + Contract *BytesLibTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BytesLibRaw is an auto generated low-level Go binding around an Ethereum contract. +type BytesLibRaw struct { + Contract *BytesLib // Generic contract binding to access the raw methods on +} + +// BytesLibCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type BytesLibCallerRaw struct { + Contract *BytesLibCaller // Generic read-only contract binding to access the raw methods on +} + +// BytesLibTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type BytesLibTransactorRaw struct { + Contract *BytesLibTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewBytesLib creates a new instance of BytesLib, bound to a specific deployed contract. +func NewBytesLib(address common.Address, backend bind.ContractBackend) (*BytesLib, error) { + contract, err := bindBytesLib(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &BytesLib{BytesLibCaller: BytesLibCaller{contract: contract}, BytesLibTransactor: BytesLibTransactor{contract: contract}, BytesLibFilterer: BytesLibFilterer{contract: contract}}, nil +} + +// NewBytesLibCaller creates a new read-only instance of BytesLib, bound to a specific deployed contract. +func NewBytesLibCaller(address common.Address, caller bind.ContractCaller) (*BytesLibCaller, error) { + contract, err := bindBytesLib(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BytesLibCaller{contract: contract}, nil +} + +// NewBytesLibTransactor creates a new write-only instance of BytesLib, bound to a specific deployed contract. +func NewBytesLibTransactor(address common.Address, transactor bind.ContractTransactor) (*BytesLibTransactor, error) { + contract, err := bindBytesLib(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BytesLibTransactor{contract: contract}, nil +} + +// NewBytesLibFilterer creates a new log filterer instance of BytesLib, bound to a specific deployed contract. +func NewBytesLibFilterer(address common.Address, filterer bind.ContractFilterer) (*BytesLibFilterer, error) { + contract, err := bindBytesLib(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &BytesLibFilterer{contract: contract}, nil +} + +// bindBytesLib binds a generic wrapper to an already deployed contract. +func bindBytesLib(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := BytesLibMetaData.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 (_BytesLib *BytesLibRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BytesLib.Contract.BytesLibCaller.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 (_BytesLib *BytesLibRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BytesLib.Contract.BytesLibTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BytesLib *BytesLibRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BytesLib.Contract.BytesLibTransactor.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 (_BytesLib *BytesLibCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BytesLib.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 (_BytesLib *BytesLibTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BytesLib.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BytesLib *BytesLibTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BytesLib.Contract.contract.Transact(opts, method, params...) +} diff --git a/pkg/bindings/BytesLib/tmp.abi b/pkg/bindings/BytesLib/tmp.abi new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/pkg/bindings/BytesLib/tmp.abi @@ -0,0 +1 @@ +[] diff --git a/pkg/bindings/BytesLib/tmp.bin b/pkg/bindings/BytesLib/tmp.bin new file mode 100644 index 000000000..a96996f51 --- /dev/null +++ b/pkg/bindings/BytesLib/tmp.bin @@ -0,0 +1 @@ +0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209b60f9734813d3adba40c977a5c97c5a7fe877fca0f9071ac0cdc7fb4fbaf94764736f6c634300080c0033 diff --git a/pkg/bindings/DelayedWithdrawalRouter/binding.go b/pkg/bindings/DelayedWithdrawalRouter/binding.go new file mode 100644 index 000000000..cdf5489e5 --- /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: "0x60a06040523480156200001157600080fd5b5060405162001f0e38038062001f0e8339810160408190526200003491620001a8565b6001600160a01b038116620000cb5760405162461bcd60e51b815260206004820152604c60248201527f44656c617965645769746864726177616c526f757465722e636f6e737472756360448201527f746f723a205f656967656e506f644d616e616765722063616e6e6f742062652060648201526b7a65726f206164647265737360a01b608482015260a4015b60405180910390fd5b6001600160a01b038116608052620000e2620000e9565b50620001da565b600054610100900460ff1615620001535760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000c2565b60005460ff9081161015620001a6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b600060208284031215620001bb57600080fd5b81516001600160a01b0381168114620001d357600080fd5b9392505050565b608051611d11620001fd600039600081816101fa0152610c000152611d116000f3fe60806040526004361061014b5760003560e01c806385594e58116100b6578063e4f4f8871161006f578063e4f4f887146103cc578063e5db06c014610405578063eb990c5914610425578063ecb7cb1b14610445578063f2fde38b14610472578063fabc1cbc1461049257600080fd5b806385594e5814610317578063886f1195146103445780638da5cb5b14610364578063c0db354c14610382578063ca661c0414610395578063d44e1b76146103ac57600080fd5b806350f73e7c1161010857806350f73e7c14610254578063595c6a67146102785780635ac86ab71461028d5780635c975abb146102cd578063715018a6146102e257806375608896146102f757600080fd5b806310d67a2f14610150578063136439dd146101725780631f39d87f146101925780633e1de008146101c85780634665bcda146101e85780634d50f9a414610234575b600080fd5b34801561015c57600080fd5b5061017061016b36600461196d565b6104b2565b005b34801561017e57600080fd5b5061017061018d366004611991565b61056e565b34801561019e57600080fd5b506101b26101ad36600461196d565b6106ad565b6040516101bf91906119c8565b60405180910390f35b3480156101d457600080fd5b506101b26101e336600461196d565b6108a8565b3480156101f457600080fd5b5061021c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bf565b34801561024057600080fd5b5061017061024f366004611991565b6109ee565b34801561026057600080fd5b5061026a60c95481565b6040519081526020016101bf565b34801561028457600080fd5b506101706109ff565b34801561029957600080fd5b506102bd6102a8366004611a15565b609854600160ff9092169190911b9081161490565b60405190151581526020016101bf565b3480156102d957600080fd5b5060985461026a565b3480156102ee57600080fd5b50610170610ac6565b34801561030357600080fd5b506102bd610312366004611a38565b610ada565b34801561032357600080fd5b50610337610332366004611a38565b610b5d565b6040516101bf9190611a64565b34801561035057600080fd5b5060975461021c906001600160a01b031681565b34801561037057600080fd5b506033546001600160a01b031661021c565b610170610390366004611a72565b610bdd565b3480156103a157600080fd5b5061026a62034bc081565b3480156103b857600080fd5b506101706103c7366004611991565b610e9d565b3480156103d857600080fd5b5061026a6103e736600461196d565b6001600160a01b0316600090815260ca602052604090206001015490565b34801561041157600080fd5b50610170610420366004611a38565b610f31565b34801561043157600080fd5b50610170610440366004611aab565b610fc6565b34801561045157600080fd5b5061046561046036600461196d565b6110ee565b6040516101bf9190611af1565b34801561047e57600080fd5b5061017061048d36600461196d565b6111a8565b34801561049e57600080fd5b506101706104ad366004611991565b61121e565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105299190611b47565b6001600160a01b0316336001600160a01b0316146105625760405162461bcd60e51b815260040161055990611b64565b60405180910390fd5b61056b8161137a565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190611bae565b6105f65760405162461bcd60e51b815260040161055990611bd0565b6098548181161461066f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926106da8383611c2e565b90508060005b82811015610786576001600160a01b038716600090815260ca6020526040812060010161070d8388611c45565b8154811061071d5761071d611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061076391611c45565b4310156107735781925050610786565b508061077e81611c73565b9150506106e0565b508060008167ffffffffffffffff8111156107a3576107a3611c8e565b6040519080825280602002602001820160405280156107e857816020015b60408051808201909152600080825260208201528152602001906001900390816107c15790505b509050811561089d5760005b8281101561089b576001600160a01b038916600090815260ca602052604090206001016108218289611c45565b8154811061083157610831611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810191909152825183908390811061087d5761087d611c5d565b6020026020010181905250808061089390611c73565b9150506107f4565b505b979650505050505050565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926108d58383611c2e565b905060008167ffffffffffffffff8111156108f2576108f2611c8e565b60405190808252806020026020018201604052801561093757816020015b60408051808201909152600080825260208201528152602001906001900390816109105790505b50905060005b828110156109e4576001600160a01b038716600090815260ca6020526040902060010161096a8287611c45565b8154811061097a5761097a611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff169181019190915282518390839081106109c6576109c6611c5d565b602002602001018190525080806109dc90611c73565b91505061093d565b5095945050505050565b6109f6611471565b61056b816114cb565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611bae565b610a875760405162461bcd60e51b815260040161055990611bd0565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610ace611471565b610ad86000611593565b565b6001600160a01b038216600090815260ca60205260408120548210801590610b54575060c9546001600160a01b038416600090815260ca60205260409020600101805484908110610b2d57610b2d611c5d565b600091825260209091200154610b509190600160e01b900463ffffffff16611c45565b4310155b90505b92915050565b60408051808201909152600080825260208201526001600160a01b038316600090815260ca60205260409020600101805483908110610b9e57610b9e611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16918101919091529392505050565b60405163a38406a360e01b81526001600160a01b038084166004830152839133917f0000000000000000000000000000000000000000000000000000000000000000169063a38406a390602401602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611b47565b6001600160a01b031614610ce75760405162461bcd60e51b815260206004820152603d60248201527f44656c617965645769746864726177616c526f757465722e6f6e6c794569676560448201527f6e506f643a206e6f7420706f644f776e6572277320456967656e506f640000006064820152608401610559565b60985460009060019081161415610d105760405162461bcd60e51b815260040161055990611ca4565b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152605160248201527f44656c617965645769746864726177616c526f757465722e637265617465446560448201527f6c617965645769746864726177616c3a20726563697069656e742063616e6e6f60648201527074206265207a65726f206164647265737360781b608482015260a401610559565b346001600160e01b03811615610e96576040805180820182526001600160e01b03808416825263ffffffff43811660208085019182526001600160a01b038a16600081815260ca8352968720600190810180548083018255818a5293892088519551909616600160e01b029490961693909317939091019290925593525490917fb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f5991889188918691610e5791611c2e565b604080516001600160a01b0395861681529490931660208501526001600160e01b039091169183019190915260608201526080015b60405180910390a1505b5050505050565b60026065541415610ef05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610f1e5760405162461bcd60e51b815260040161055990611ca4565b610f2833836115e5565b50506001606555565b60026065541415610f845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610fb25760405162461bcd60e51b815260040161055990611ca4565b610fbc83836115e5565b5050600160655550565b600054610100900460ff1615808015610fe65750600054600160ff909116105b806110005750303b158015611000575060005460ff166001145b6110635760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610559565b6000805460ff191660011790558015611086576000805461ff0019166101001790555b61108f85611593565b6110998484611750565b6110a2826114cb565b8015610e96576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260ca6020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b8282101561119a57600084815260209081902060408051808201909152908401546001600160e01b0381168252600160e01b900463ffffffff168183015282526001909201910161114e565b505050915250909392505050565b6111b0611471565b6001600160a01b0381166112155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610559565b61056b81611593565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190611b47565b6001600160a01b0316336001600160a01b0316146112c55760405162461bcd60e51b815260040161055990611b64565b6098541981196098541916146113435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106a2565b6001600160a01b0381166114085760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610559565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610ad85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610559565b62034bc08111156115525760405162461bcd60e51b815260206004820152604560248201527f44656c617965645769746864726177616c526f757465722e5f7365745769746860448201527f64726177616c44656c6179426c6f636b733a206e657756616c756520746f6f206064820152646c6172676560d81b608482015260a401610559565b60c95460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a160c955565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600090815260ca602052604081208054600190910154825b848110801561161e57508161161c8285611c45565b105b156116cb576001600160a01b038616600090815260ca602052604081206001016116488386611c45565b8154811061165857611658611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061169e91611c45565b4310156116ab57506116cb565b80516116c0906001600160e01b031686611c45565b945050600101611607565b6116d58184611c45565b6001600160a01b038716600090815260ca602052604090205583156116fe576116fe868561183a565b7f6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943868561172b8487611c45565b604080516001600160a01b039094168452602084019290925290820152606001610e8c565b6097546001600160a01b031615801561177157506001600160a01b03821615155b6117f35760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26118368261137a565b5050565b8047101561188a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610559565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118d7576040519150601f19603f3d011682016040523d82523d6000602084013e6118dc565b606091505b50509050806119535760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610559565b505050565b6001600160a01b038116811461056b57600080fd5b60006020828403121561197f57600080fd5b813561198a81611958565b9392505050565b6000602082840312156119a357600080fd5b5035919050565b80516001600160e01b0316825260209081015163ffffffff16910152565b602080825282518282018190526000919060409081850190868401855b82811015611a08576119f88483516119aa565b92840192908501906001016119e5565b5091979650505050505050565b600060208284031215611a2757600080fd5b813560ff8116811461198a57600080fd5b60008060408385031215611a4b57600080fd5b8235611a5681611958565b946020939093013593505050565b60408101610b5782846119aa565b60008060408385031215611a8557600080fd5b8235611a9081611958565b91506020830135611aa081611958565b809150509250929050565b60008060008060808587031215611ac157600080fd5b8435611acc81611958565b93506020850135611adc81611958565b93969395505050506040820135916060013590565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b8084101561089b57611b338286516119aa565b938501936001939093019290820190611b20565b600060208284031215611b5957600080fd5b815161198a81611958565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bc057600080fd5b8151801515811461198a57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015611c4057611c40611c18565b500390565b60008219821115611c5857611c58611c18565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611c8757611c87611c18565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60208082526019908201527f5061757361626c653a20696e646578206973207061757365640000000000000060408201526060019056fea26469706673582212205303c1f4421ebd735742d30856222a21cd456498a113d7cba508769c13f7c49664736f6c634300080c0033", +} + +// 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/DelayedWithdrawalRouter/tmp.abi b/pkg/bindings/DelayedWithdrawalRouter/tmp.abi new file mode 100644 index 000000000..3b8b4251f --- /dev/null +++ b/pkg/bindings/DelayedWithdrawalRouter/tmp.abi @@ -0,0 +1,614 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_eigenPodManager", + "type": "address", + "internalType": "contract IEigenPodManager" + } + ], + "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": "contract IEigenPodManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getClaimableUserDelayedWithdrawals", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct IDelayedWithdrawalRouter.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": "struct IDelayedWithdrawalRouter.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": "contract IPauserRegistry" + }, + { + "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": "contract IPauserRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPauserRegistry", + "inputs": [ + { + "name": "newPauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "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": "struct IDelayedWithdrawalRouter.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": "struct IDelayedWithdrawalRouter.UserDelayedWithdrawals", + "components": [ + { + "name": "delayedWithdrawalsCompleted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "delayedWithdrawals", + "type": "tuple[]", + "internalType": "struct IDelayedWithdrawalRouter.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": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "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 + } +] diff --git a/pkg/bindings/DelayedWithdrawalRouter/tmp.bin b/pkg/bindings/DelayedWithdrawalRouter/tmp.bin new file mode 100644 index 000000000..41709ba56 --- /dev/null +++ b/pkg/bindings/DelayedWithdrawalRouter/tmp.bin @@ -0,0 +1 @@ +0x60a06040523480156200001157600080fd5b5060405162001f0e38038062001f0e8339810160408190526200003491620001a8565b6001600160a01b038116620000cb5760405162461bcd60e51b815260206004820152604c60248201527f44656c617965645769746864726177616c526f757465722e636f6e737472756360448201527f746f723a205f656967656e506f644d616e616765722063616e6e6f742062652060648201526b7a65726f206164647265737360a01b608482015260a4015b60405180910390fd5b6001600160a01b038116608052620000e2620000e9565b50620001da565b600054610100900460ff1615620001535760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000c2565b60005460ff9081161015620001a6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b600060208284031215620001bb57600080fd5b81516001600160a01b0381168114620001d357600080fd5b9392505050565b608051611d11620001fd600039600081816101fa0152610c000152611d116000f3fe60806040526004361061014b5760003560e01c806385594e58116100b6578063e4f4f8871161006f578063e4f4f887146103cc578063e5db06c014610405578063eb990c5914610425578063ecb7cb1b14610445578063f2fde38b14610472578063fabc1cbc1461049257600080fd5b806385594e5814610317578063886f1195146103445780638da5cb5b14610364578063c0db354c14610382578063ca661c0414610395578063d44e1b76146103ac57600080fd5b806350f73e7c1161010857806350f73e7c14610254578063595c6a67146102785780635ac86ab71461028d5780635c975abb146102cd578063715018a6146102e257806375608896146102f757600080fd5b806310d67a2f14610150578063136439dd146101725780631f39d87f146101925780633e1de008146101c85780634665bcda146101e85780634d50f9a414610234575b600080fd5b34801561015c57600080fd5b5061017061016b36600461196d565b6104b2565b005b34801561017e57600080fd5b5061017061018d366004611991565b61056e565b34801561019e57600080fd5b506101b26101ad36600461196d565b6106ad565b6040516101bf91906119c8565b60405180910390f35b3480156101d457600080fd5b506101b26101e336600461196d565b6108a8565b3480156101f457600080fd5b5061021c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bf565b34801561024057600080fd5b5061017061024f366004611991565b6109ee565b34801561026057600080fd5b5061026a60c95481565b6040519081526020016101bf565b34801561028457600080fd5b506101706109ff565b34801561029957600080fd5b506102bd6102a8366004611a15565b609854600160ff9092169190911b9081161490565b60405190151581526020016101bf565b3480156102d957600080fd5b5060985461026a565b3480156102ee57600080fd5b50610170610ac6565b34801561030357600080fd5b506102bd610312366004611a38565b610ada565b34801561032357600080fd5b50610337610332366004611a38565b610b5d565b6040516101bf9190611a64565b34801561035057600080fd5b5060975461021c906001600160a01b031681565b34801561037057600080fd5b506033546001600160a01b031661021c565b610170610390366004611a72565b610bdd565b3480156103a157600080fd5b5061026a62034bc081565b3480156103b857600080fd5b506101706103c7366004611991565b610e9d565b3480156103d857600080fd5b5061026a6103e736600461196d565b6001600160a01b0316600090815260ca602052604090206001015490565b34801561041157600080fd5b50610170610420366004611a38565b610f31565b34801561043157600080fd5b50610170610440366004611aab565b610fc6565b34801561045157600080fd5b5061046561046036600461196d565b6110ee565b6040516101bf9190611af1565b34801561047e57600080fd5b5061017061048d36600461196d565b6111a8565b34801561049e57600080fd5b506101706104ad366004611991565b61121e565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105299190611b47565b6001600160a01b0316336001600160a01b0316146105625760405162461bcd60e51b815260040161055990611b64565b60405180910390fd5b61056b8161137a565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190611bae565b6105f65760405162461bcd60e51b815260040161055990611bd0565b6098548181161461066f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926106da8383611c2e565b90508060005b82811015610786576001600160a01b038716600090815260ca6020526040812060010161070d8388611c45565b8154811061071d5761071d611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061076391611c45565b4310156107735781925050610786565b508061077e81611c73565b9150506106e0565b508060008167ffffffffffffffff8111156107a3576107a3611c8e565b6040519080825280602002602001820160405280156107e857816020015b60408051808201909152600080825260208201528152602001906001900390816107c15790505b509050811561089d5760005b8281101561089b576001600160a01b038916600090815260ca602052604090206001016108218289611c45565b8154811061083157610831611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810191909152825183908390811061087d5761087d611c5d565b6020026020010181905250808061089390611c73565b9150506107f4565b505b979650505050505050565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926108d58383611c2e565b905060008167ffffffffffffffff8111156108f2576108f2611c8e565b60405190808252806020026020018201604052801561093757816020015b60408051808201909152600080825260208201528152602001906001900390816109105790505b50905060005b828110156109e4576001600160a01b038716600090815260ca6020526040902060010161096a8287611c45565b8154811061097a5761097a611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff169181019190915282518390839081106109c6576109c6611c5d565b602002602001018190525080806109dc90611c73565b91505061093d565b5095945050505050565b6109f6611471565b61056b816114cb565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611bae565b610a875760405162461bcd60e51b815260040161055990611bd0565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610ace611471565b610ad86000611593565b565b6001600160a01b038216600090815260ca60205260408120548210801590610b54575060c9546001600160a01b038416600090815260ca60205260409020600101805484908110610b2d57610b2d611c5d565b600091825260209091200154610b509190600160e01b900463ffffffff16611c45565b4310155b90505b92915050565b60408051808201909152600080825260208201526001600160a01b038316600090815260ca60205260409020600101805483908110610b9e57610b9e611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16918101919091529392505050565b60405163a38406a360e01b81526001600160a01b038084166004830152839133917f0000000000000000000000000000000000000000000000000000000000000000169063a38406a390602401602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611b47565b6001600160a01b031614610ce75760405162461bcd60e51b815260206004820152603d60248201527f44656c617965645769746864726177616c526f757465722e6f6e6c794569676560448201527f6e506f643a206e6f7420706f644f776e6572277320456967656e506f640000006064820152608401610559565b60985460009060019081161415610d105760405162461bcd60e51b815260040161055990611ca4565b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152605160248201527f44656c617965645769746864726177616c526f757465722e637265617465446560448201527f6c617965645769746864726177616c3a20726563697069656e742063616e6e6f60648201527074206265207a65726f206164647265737360781b608482015260a401610559565b346001600160e01b03811615610e96576040805180820182526001600160e01b03808416825263ffffffff43811660208085019182526001600160a01b038a16600081815260ca8352968720600190810180548083018255818a5293892088519551909616600160e01b029490961693909317939091019290925593525490917fb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f5991889188918691610e5791611c2e565b604080516001600160a01b0395861681529490931660208501526001600160e01b039091169183019190915260608201526080015b60405180910390a1505b5050505050565b60026065541415610ef05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610f1e5760405162461bcd60e51b815260040161055990611ca4565b610f2833836115e5565b50506001606555565b60026065541415610f845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610fb25760405162461bcd60e51b815260040161055990611ca4565b610fbc83836115e5565b5050600160655550565b600054610100900460ff1615808015610fe65750600054600160ff909116105b806110005750303b158015611000575060005460ff166001145b6110635760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610559565b6000805460ff191660011790558015611086576000805461ff0019166101001790555b61108f85611593565b6110998484611750565b6110a2826114cb565b8015610e96576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260ca6020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b8282101561119a57600084815260209081902060408051808201909152908401546001600160e01b0381168252600160e01b900463ffffffff168183015282526001909201910161114e565b505050915250909392505050565b6111b0611471565b6001600160a01b0381166112155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610559565b61056b81611593565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190611b47565b6001600160a01b0316336001600160a01b0316146112c55760405162461bcd60e51b815260040161055990611b64565b6098541981196098541916146113435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106a2565b6001600160a01b0381166114085760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610559565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610ad85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610559565b62034bc08111156115525760405162461bcd60e51b815260206004820152604560248201527f44656c617965645769746864726177616c526f757465722e5f7365745769746860448201527f64726177616c44656c6179426c6f636b733a206e657756616c756520746f6f206064820152646c6172676560d81b608482015260a401610559565b60c95460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a160c955565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600090815260ca602052604081208054600190910154825b848110801561161e57508161161c8285611c45565b105b156116cb576001600160a01b038616600090815260ca602052604081206001016116488386611c45565b8154811061165857611658611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061169e91611c45565b4310156116ab57506116cb565b80516116c0906001600160e01b031686611c45565b945050600101611607565b6116d58184611c45565b6001600160a01b038716600090815260ca602052604090205583156116fe576116fe868561183a565b7f6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943868561172b8487611c45565b604080516001600160a01b039094168452602084019290925290820152606001610e8c565b6097546001600160a01b031615801561177157506001600160a01b03821615155b6117f35760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26118368261137a565b5050565b8047101561188a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610559565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118d7576040519150601f19603f3d011682016040523d82523d6000602084013e6118dc565b606091505b50509050806119535760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610559565b505050565b6001600160a01b038116811461056b57600080fd5b60006020828403121561197f57600080fd5b813561198a81611958565b9392505050565b6000602082840312156119a357600080fd5b5035919050565b80516001600160e01b0316825260209081015163ffffffff16910152565b602080825282518282018190526000919060409081850190868401855b82811015611a08576119f88483516119aa565b92840192908501906001016119e5565b5091979650505050505050565b600060208284031215611a2757600080fd5b813560ff8116811461198a57600080fd5b60008060408385031215611a4b57600080fd5b8235611a5681611958565b946020939093013593505050565b60408101610b5782846119aa565b60008060408385031215611a8557600080fd5b8235611a9081611958565b91506020830135611aa081611958565b809150509250929050565b60008060008060808587031215611ac157600080fd5b8435611acc81611958565b93506020850135611adc81611958565b93969395505050506040820135916060013590565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b8084101561089b57611b338286516119aa565b938501936001939093019290820190611b20565b600060208284031215611b5957600080fd5b815161198a81611958565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bc057600080fd5b8151801515811461198a57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015611c4057611c40611c18565b500390565b60008219821115611c5857611c58611c18565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611c8757611c87611c18565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60208082526019908201527f5061757361626c653a20696e646578206973207061757365640000000000000060408201526060019056fea26469706673582212205303c1f4421ebd735742d30856222a21cd456498a113d7cba508769c13f7c49664736f6c634300080c0033 diff --git a/pkg/bindings/DelegationManager/binding.go b/pkg/bindings/DelegationManager/binding.go new file mode 100644 index 000000000..2c32abde1 --- /dev/null +++ b/pkg/bindings/DelegationManager/binding.go @@ -0,0 +1,4352 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package DelegationManager + +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 +) + +// IDelegationManagerOperatorDetails is an auto generated low-level Go binding around an user-defined struct. +type IDelegationManagerOperatorDetails struct { + EarningsReceiver common.Address + DelegationApprover common.Address + StakerOptOutWindowBlocks uint32 +} + +// IDelegationManagerQueuedWithdrawalParams is an auto generated low-level Go binding around an user-defined struct. +type IDelegationManagerQueuedWithdrawalParams struct { + Strategies []common.Address + Shares []*big.Int + Withdrawer common.Address +} + +// 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 +} + +// ISignatureUtilsSignatureWithExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithExpiry struct { + Signature []byte + Expiry *big.Int +} + +// IStrategyManagerDeprecatedStructQueuedWithdrawal is an auto generated low-level Go binding around an user-defined struct. +type IStrategyManagerDeprecatedStructQueuedWithdrawal struct { + Strategies []common.Address + Shares []*big.Int + Staker common.Address + WithdrawerAndNonce IStrategyManagerDeprecatedStructWithdrawerAndNonce + WithdrawalStartBlock uint32 + DelegatedAddress common.Address +} + +// IStrategyManagerDeprecatedStructWithdrawerAndNonce is an auto generated low-level Go binding around an user-defined struct. +type IStrategyManagerDeprecatedStructWithdrawerAndNonce struct { + Withdrawer common.Address + Nonce *big.Int +} + +// 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\":\"earningsReceiver\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"migrateQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawalsToMigrate\",\"type\":\"tuple[]\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_QueuedWithdrawal[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawerAndNonce\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_WithdrawerAndNonce\",\"components\":[{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"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\":\"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\":\"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\":\"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\":\"WithdrawalMigrated\",\"inputs\":[{\"name\":\"oldWithdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"newWithdrawalRoot\",\"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: "0x6101006040523480156200001257600080fd5b506040516200618138038062006181833981016040819052620000359162000140565b6001600160a01b0380841660805280821660c052821660a0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e051615f516200023060003960006127790152600081816105e7015281816110ae0152818161142a01528181611e0d01528181612ad2015281816141390152614625015260006107d701526000818161052f0152818161107c015281816113f80152818161172001528181611ea101528181612b9f01528181612d220152818161425f01526146cb0152615f516000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c806360d7faed116101d3578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b01461097d578063f2fde38b14610990578063f698da25146109a3578063fabc1cbc146109ab57600080fd5b8063cf80873e14610936578063da8be86414610957578063eea9064b1461096a57600080fd5b8063c488375a116100de578063c488375a14610853578063c5e480db14610873578063c94b511114610919578063ca661c041461092c57600080fd5b8063b7f06ebe146107f9578063bb45fef21461081c578063c448feb81461084a57600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461078457806399be81c81461079f578063a1788484146107b2578063b1344271146107d257600080fd5b8063886f1195146107405780638da5cb5b14610753578063900413471461076457600080fd5b80636d70f7ae116101ad5780636d70f7ae146106e7578063715018a6146106fa578063778e55f3146107025780637f5480711461072d57600080fd5b806360d7faed14610698578063635bbd10146106ab57806365da1264146106be57600080fd5b806329c77d4f116102ad5780634fc40b611161024b5780635ac86ab7116102255780635ac86ab71461062e5780635c975abb146106515780635cfe8d2c146106595780635f966f141461066c57600080fd5b80634fc40b6114610609578063595c6a6714610613578063597b36da1461061b57600080fd5b80633cdeb5e0116102875780633cdeb5e0146105695780633e28391d1461059857806343377382146105bb5780634665bcda146105e257600080fd5b806329c77d4f146104f7578063334043961461051757806339b70e381461052a57600080fd5b8063136439dd1161031a5780631bbce091116102f45780631bbce0911461049757806320606b70146104aa57806322bf40e4146104d157806328a573ae146104e457600080fd5b8063136439dd146104385780631522bf021461044b578063169283651461045e57600080fd5b80630dd8dd02116103565780630dd8dd02146103dd5780630f589e59146103fd57806310d67a2f14610412578063132d49671461042557600080fd5b80630449ca391461037d57806304a4f979146103a35780630b9f487a146103ca575b600080fd5b61039061038b366004614adb565b6109be565b6040519081526020015b60405180910390f35b6103907f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6103906103d8366004614b41565b610a43565b6103f06103eb366004614adb565b610b05565b60405161039a9190614b9c565b61041061040b366004614c39565b610e6e565b005b610410610420366004614c8c565b610fbe565b610410610433366004614cb0565b611071565b610410610446366004614cf1565b611128565b610410610459366004614d0a565b611267565b61039061046c366004614c8c565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b6103906104a5366004614cb0565b61127b565b6103907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6104106104df366004614d75565b6112a9565b6104106104f2366004614cb0565b6113ed565b610390610505366004614c8c565b609b6020526000908152604090205481565b610410610525366004614e1c565b61149d565b6105517f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161039a565b610551610577366004614c8c565b6001600160a01b039081166000908152609960205260409020600101541690565b6105ab6105a6366004614c8c565b6115da565b604051901515815260200161039a565b6103907f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b6105517f000000000000000000000000000000000000000000000000000000000000000081565b6103906213c68081565b6104106115fa565b61039061062936600461513b565b6116c1565b6105ab61063c366004615177565b606654600160ff9092169190911b9081161490565b606654610390565b6104106106673660046151ed565b6116f1565b61055161067a366004614c8c565b6001600160a01b039081166000908152609960205260409020541690565b6104106106a636600461534d565b61199c565b6104106106b9366004614cf1565b611a37565b6105516106cc366004614c8c565b609a602052600090815260409020546001600160a01b031681565b6105ab6106f5366004614c8c565b611a48565b610410611a68565b6103906107103660046153dc565b609860209081526000928352604080842090915290825290205481565b61041061073b3660046154bd565b611a7c565b606554610551906001600160a01b031681565b6033546001600160a01b0316610551565b61077761077236600461554d565b611b81565b60405161039a91906155d7565b61055173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6104106107ad3660046155ea565b611c5b565b6103906107c0366004614c8c565b609f6020526000908152604090205481565b6105517f000000000000000000000000000000000000000000000000000000000000000081565b6105ab610807366004614cf1565b609e6020526000908152604090205460ff1681565b6105ab61082a36600461561f565b609c60209081526000928352604080842090915290825290205460ff1681565b610390609d5481565b610390610861366004614c8c565b60a16020526000908152604090205481565b6108e3610881366004614c8c565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff169082015260600161039a565b61039061092736600461564b565b611d2d565b61039062034bc081565b610949610944366004614c8c565b611de6565b60405161039a9291906156cc565b6103f0610965366004614c8c565b61219e565b6104106109783660046156f1565b612662565b61041061098b366004615749565b61266e565b61041061099e366004614c8c565b6126ff565b610390612775565b6104106109b9366004614cf1565b6127b3565b609d54600090815b83811015610a3b57600060a160008787858181106109e6576109e6615765565b90506020020160208101906109fb9190614c8c565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811115610a2a578092505b50610a3481615791565b90506109c6565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610ac1612775565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610b3a5760405162461bcd60e51b8152600401610b31906157ac565b60405180910390fd5b6000836001600160401b03811115610b5457610b54614ebe565b604051908082528060200260200182016040528015610b7d578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610e6357868682818110610bb857610bb8615765565b9050602002810190610bca91906157e3565b610bd8906020810190615803565b9050878783818110610bec57610bec615765565b9050602002810190610bfe91906157e3565b610c089080615803565b905014610c7d5760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610b31565b33878783818110610c9057610c90615765565b9050602002810190610ca291906157e3565b610cb3906060810190604001614c8c565b6001600160a01b031614610d2f5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610b31565b610e343383898985818110610d4657610d46615765565b9050602002810190610d5891906157e3565b610d69906060810190604001614c8c565b8a8a86818110610d7b57610d7b615765565b9050602002810190610d8d91906157e3565b610d979080615803565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610ddd57610ddd615765565b9050602002810190610def91906157e3565b610dfd906020810190615803565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290f92505050565b838281518110610e4657610e46615765565b602090810291909101015280610e5b81615791565b915050610b9e565b509095945050505050565b336000908152609960205260409020546001600160a01b031615610f085760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a206f70657261746f722068617320616c72656164792072656769736064820152641d195c995960da1b608482015260a401610b31565b610f123384612ecf565b604080518082019091526060815260006020820152610f34338083600061316b565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610f6d919061584c565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610fb092919061589e565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611011573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103591906158cd565b6001600160a01b0316336001600160a01b0316146110655760405162461bcd60e51b8152600401610b31906158ea565b61106e81613510565b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d05750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6110ec5760405162461bcd60e51b8152600401610b3190615934565b6110f5836115da565b15611123576001600160a01b038084166000908152609a60205260409020541661112181858585613607565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111949190615991565b6111b05760405162461bcd60e51b8152600401610b31906159ae565b606654818116146112295760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610b31565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b61126f613682565b611121848484846136dc565b6001600160a01b0383166000908152609b60205260408120546112a085828686611d2d565b95945050505050565b600054610100900460ff16158080156112c95750600054600160ff909116105b806112e35750303b1580156112e3575060005460ff166001145b6113465760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b31565b6000805460ff191660011790558015611369576000805461ff0019166101001790555b6113738888613902565b61137b6139e8565b60975561138789613a7f565b61139086613ad1565b61139c858585856136dc565b80156113e2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061144c5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6114685760405162461bcd60e51b8152600401610b3190615934565b611471836115da565b15611123576001600160a01b038084166000908152609a60205260409020541661112181858585613bcb565b606654600290600490811614156114c65760405162461bcd60e51b8152600401610b31906157ac565b600260c95414156115195760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b31565b600260c95560005b888110156115c9576115b98a8a8381811061153e5761153e615765565b905060200281019061155091906159f6565b89898481811061156257611562615765565b90506020028101906115749190615803565b89898681811061158657611586615765565b9050602002013588888781811061159f5761159f615765565b90506020020160208101906115b49190615a0c565b613c46565b6115c281615791565b9050611521565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116669190615991565b6116825760405162461bcd60e51b8152600401610b31906159ae565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116d49190615a9d565b604051602081830303815290604052805190602001209050919050565b60005b815181101561199857600082828151811061171157611711615765565b602002602001015190506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cd293f6f846040518263ffffffff1660e01b815260040161176a9190615ab0565b60408051808303816000875af1158015611788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ac9190615b5c565b91509150811561198a576040808401516001600160a01b0381166000908152609f602052918220805491928291906117e383615791565b919050555060006040518060e00160405280846001600160a01b031681526020018760a001516001600160a01b031681526020018760600151600001516001600160a01b03168152602001838152602001876080015163ffffffff16815260200187600001518152602001876020015181525090506000611863826116c1565b6000818152609e602052604090205490915060ff16156118f95760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e6d6967726174655175657565645760448201527f69746864726177616c733a207769746864726177616c20616c72656164792065606482015264786973747360d81b608482015260a401610b31565b6000818152609e602052604090819020805460ff19166001179055517f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9906119449083908590615b8a565b60405180910390a160408051868152602081018390527fdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630910160405180910390a1505050505b8360010193505050506116f4565b5050565b606654600290600490811614156119c55760405162461bcd60e51b8152600401610b31906157ac565b600260c9541415611a185760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b31565b600260c955611a2a8686868686613c46565b5050600160c95550505050565b611a3f613682565b61106e81613ad1565b6001600160a01b0390811660009081526099602052604090205416151590565b611a70613682565b611a7a6000613a7f565b565b4283602001511015611b005760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610b31565b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611b3c8783888860200151611d2d565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611b6c9088908390614430565b611b788787868661316b565b50505050505050565b6060600082516001600160401b03811115611b9e57611b9e614ebe565b604051908082528060200260200182016040528015611bc7578160200160208202803683370190505b50905060005b8351811015610a3b576001600160a01b03851660009081526098602052604081208551909190869084908110611c0557611c05615765565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611c4057611c40615765565b6020908102919091010152611c5481615791565b9050611bcd565b611c6433611a48565b611ce65760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610b31565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611d2192919061589e565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611da3612775565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7a9190615ba3565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa158015611eea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f129190810190615c17565b9150915060008313611f2957909590945092505050565b606080835160001415611fe3576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611f9e57611f9e615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611fd257611fd2615765565b602002602001018181525050612191565b8351611ff0906001615cd1565b6001600160401b0381111561200757612007614ebe565b604051908082528060200260200182016040528015612030578160200160208202803683370190505b50915081516001600160401b0381111561204c5761204c614ebe565b604051908082528060200260200182016040528015612075578160200160208202803683370190505b50905060005b845181101561210f5784818151811061209657612096615765565b60200260200101518382815181106120b0576120b0615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106120e2576120e2615765565b60200260200101518282815181106120fc576120fc615765565b602090810291909101015260010161207b565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600184516121349190615ce9565b8151811061214457612144615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600184516121749190615ce9565b8151811061218457612184615765565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811614156121ca5760405162461bcd60e51b8152600401610b31906157ac565b6121d3836115da565b6122535760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610b31565b61225c83611a48565b156122cf5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610b31565b6001600160a01b03831661234b5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610b31565b6001600160a01b038084166000818152609a60205260409020549091169033148061237e5750336001600160a01b038216145b806123a557506001600160a01b038181166000908152609960205260409020600101541633145b6124175760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610b31565b60008061242386611de6565b9092509050336001600160a01b0387161461247957826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516124fb576040805160008152602081019091529450612659565b81516001600160401b0381111561251457612514614ebe565b60405190808252806020026020018201604052801561253d578160200160208202803683370190505b50945060005b8251811015612657576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106125a3576125a3615765565b6020026020010151826000815181106125be576125be615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508383815181106125f0576125f0615765565b60200260200101518160008151811061260b5761260b615765565b60200260200101818152505061262489878b858561290f565b88848151811061263657612636615765565b6020026020010181815250505050808061264f90615791565b915050612543565b505b50505050919050565b6111233384848461316b565b61267733611a48565b6126f55760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610b31565b61106e3382612ecf565b612707613682565b6001600160a01b03811661276c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b31565b61106e81613a7f565b60007f00000000000000000000000000000000000000000000000000000000000000004614156127a6575060975490565b6127ae6139e8565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282a91906158cd565b6001600160a01b0316336001600160a01b03161461285a5760405162461bcd60e51b8152600401610b31906158ea565b6066541981196066541916146128d85760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610b31565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161125c565b60006001600160a01b0386166129a65760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610b31565b8251612a305760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610b31565b60005b8351811015612ddd576001600160a01b03861615612a8957612a898688868481518110612a6257612a62615765565b6020026020010151868581518110612a7c57612a7c615765565b6020026020010151613607565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612ab957612ab9615765565b60200260200101516001600160a01b03161415612b82577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb8988858481518110612b1257612b12615765565b60200260200101516040518363ffffffff1660e01b8152600401612b4b9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612b6557600080fd5b505af1158015612b79573d6000803e3d6000fd5b50505050612dd5565b846001600160a01b0316876001600160a01b03161480612c5457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d858381518110612bde57612bde615765565b60200260200101516040518263ffffffff1660e01b8152600401612c1191906001600160a01b0391909116815260200190565b602060405180830381865afa158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c529190615991565b155b612d205760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610b31565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e588868481518110612d6257612d62615765565b6020026020010151868581518110612d7c57612d7c615765565b60200260200101516040518463ffffffff1660e01b8152600401612da293929190615d00565b600060405180830381600087803b158015612dbc57600080fd5b505af1158015612dd0573d6000803e3d6000fd5b505050505b600101612a33565b506001600160a01b0386166000908152609f60205260408120805491829190612e0583615791565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612e6d826116c1565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612ebb9083908590615b8a565b60405180910390a198975050505050505050565b6000612ede6020830183614c8c565b6001600160a01b03161415612f785760405162461bcd60e51b815260206004820152605460248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a2063616e6e6f742073657420606561726e696e677352656365696064820152737665726020746f207a65726f206164647265737360601b608482015260a401610b31565b6213c680612f8c6060830160408401615d24565b63ffffffff1611156130415760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610b31565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff169061307d9060608401908401615d24565b63ffffffff1610156131135760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610b31565b6001600160a01b038216600090815260996020526040902081906131378282615d61565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611d2190849061584c565b606654600090600190811614156131945760405162461bcd60e51b8152600401610b31906157ac565b61319d856115da565b1561321a5760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2073746160448201527f6b657220697320616c7265616479206163746976656c792064656c65676174656064820152601960fa1b608482015260a401610b31565b61322384611a48565b6132a35760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a206f706560448201527f7261746f72206973206e6f74207265676973746572656420696e20456967656e6064820152642630bcb2b960d91b608482015260a401610b31565b6001600160a01b038085166000908152609960205260409020600101541680158015906132d95750336001600160a01b03821614155b80156132ee5750336001600160a01b03861614155b1561345b57428460200151101561336d5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610b31565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156134075760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610b31565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff19166001179055850151613448908890889085908890610a43565b905061345982828760000151614430565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a36000806134ba88611de6565b9150915060005b82518110156113e257613508888a8584815181106134e1576134e1615765565b60200260200101518585815181106134fb576134fb615765565b6020026020010151613bcb565b6001016134c1565b6001600160a01b03811661359e5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610b31565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061363e908490615ce9565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610fb093929190615d00565b6033546001600160a01b03163314611a7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b31565b8281146137645760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610b31565b8260005b818110156138fa57600086868381811061378457613784615765565b90506020020160208101906137999190614c8c565b6001600160a01b038116600090815260a160205260408120549192508686858181106137c7576137c7615765565b90506020020135905062034bc081111561388b5760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610b31565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806138f390615791565b9050613768565b505050505050565b6065546001600160a01b031615801561392357506001600160a01b03821615155b6139a55760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610b31565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261199882613510565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc0811115613b8a5760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610b31565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613c02908490615cd1565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610fb093929190615d00565b6000613c5461062987615dc4565b6000818152609e602052604090205490915060ff16613cd55760405162461bcd60e51b81526020600482015260436024820152600080516020615efc83398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610b31565b609d544390613cea60a0890160808a01615d24565b63ffffffff16613cfa9190615cd1565b1115613d825760405162461bcd60e51b815260206004820152605f6024820152600080516020615efc83398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610b31565b613d926060870160408801614c8c565b6001600160a01b0316336001600160a01b031614613e1f5760405162461bcd60e51b81526020600482015260506024820152600080516020615efc83398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610b31565b8115613ea157613e3260a0870187615803565b85149050613ea15760405162461bcd60e51b81526020600482015260426024820152600080516020615efc83398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610b31565b6000818152609e60205260409020805460ff1916905581156140065760005b613ecd60a0880188615803565b9050811015614000574360a16000613ee860a08b018b615803565b85818110613ef857613ef8615765565b9050602002016020810190613f0d9190614c8c565b6001600160a01b03168152602081019190915260400160002054613f3760a08a0160808b01615d24565b63ffffffff16613f479190615cd1565b1115613f655760405162461bcd60e51b8152600401610b3190615dd6565b613ff8613f756020890189614c8c565b33613f8360a08b018b615803565b85818110613f9357613f93615765565b9050602002016020810190613fa89190614c8c565b613fb560c08c018c615803565b86818110613fc557613fc5615765565b905060200201358a8a87818110613fde57613fde615765565b9050602002016020810190613ff39190614c8c565b6145ea565b600101613ec0565b506143f5565b336000908152609a60205260408120546001600160a01b0316905b61402e60a0890189615803565b90508110156143f2574360a1600061404960a08c018c615803565b8581811061405957614059615765565b905060200201602081019061406e9190614c8c565b6001600160a01b0316815260208101919091526040016000205461409860a08b0160808c01615d24565b63ffffffff166140a89190615cd1565b11156140c65760405162461bcd60e51b8152600401610b3190615dd6565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06140e860a08a018a615803565b838181106140f8576140f8615765565b905060200201602081019061410d9190614c8c565b6001600160a01b0316141561425d57600061412b60208a018a614c8c565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c8361416c60c08e018e615803565b8781811061417c5761417c615765565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af11580156141d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f49190615ba3565b6001600160a01b038084166000908152609a602052604090205491925016801561425557614255818461422a60a08f018f615803565b8881811061423a5761423a615765565b905060200201602081019061424f9190614c8c565b85613bcb565b5050506143ea565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea13389898581811061429f5761429f615765565b90506020020160208101906142b49190614c8c565b6142c160a08d018d615803565b868181106142d1576142d1615765565b90506020020160208101906142e69190614c8c565b6142f360c08e018e615803565b8781811061430357614303615765565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b15801561436357600080fd5b505af1158015614377573d6000803e3d6000fd5b505050506001600160a01b038216156143ea576143ea823361439c60a08c018c615803565b858181106143ac576143ac615765565b90506020020160208101906143c19190614c8c565b6143ce60c08d018d615803565b868181106143de576143de615765565b90506020020135613bcb565b600101614021565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b1561454a57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906144709086908690600401615e5e565b602060405180830381865afa15801561448d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b19190615ebb565b6001600160e01b031916146111235760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610b31565b826001600160a01b031661455e838361472a565b6001600160a01b0316146111235760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610b31565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156146955760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b13009061465e90889088908790600401615d00565b600060405180830381600087803b15801561467857600080fd5b505af115801561468c573d6000803e3d6000fd5b50505050614723565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b15801561470f57600080fd5b505af11580156113e2573d6000803e3d6000fd5b5050505050565b60008060006147398585614746565b91509150610a3b816147b6565b60008082516041141561477d5760208301516040840151606085015160001a61477187828585614971565b945094505050506147af565b8251604014156147a7576020830151604084015161479c868383614a5e565b9350935050506147af565b506000905060025b9250929050565b60008160048111156147ca576147ca615ee5565b14156147d35750565b60018160048111156147e7576147e7615ee5565b14156148355760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b31565b600281600481111561484957614849615ee5565b14156148975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b31565b60038160048111156148ab576148ab615ee5565b14156149045760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b31565b600481600481111561491857614918615ee5565b141561106e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610b31565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156149a85750600090506003614a55565b8460ff16601b141580156149c057508460ff16601c14155b156149d15750600090506004614a55565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614a25573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614a4e57600060019250925050614a55565b9150600090505b94509492505050565b6000806001600160ff1b03831681614a7b60ff86901c601b615cd1565b9050614a8987828885614971565b935093505050935093915050565b60008083601f840112614aa957600080fd5b5081356001600160401b03811115614ac057600080fd5b6020830191508360208260051b85010111156147af57600080fd5b60008060208385031215614aee57600080fd5b82356001600160401b03811115614b0457600080fd5b614b1085828601614a97565b90969095509350505050565b6001600160a01b038116811461106e57600080fd5b8035614b3c81614b1c565b919050565b600080600080600060a08688031215614b5957600080fd5b8535614b6481614b1c565b94506020860135614b7481614b1c565b93506040860135614b8481614b1c565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b81811015614bd457835183529284019291840191600101614bb8565b50909695505050505050565b600060608284031215614bf257600080fd5b50919050565b60008083601f840112614c0a57600080fd5b5081356001600160401b03811115614c2157600080fd5b6020830191508360208285010111156147af57600080fd5b600080600060808486031215614c4e57600080fd5b614c588585614be0565b925060608401356001600160401b03811115614c7357600080fd5b614c7f86828701614bf8565b9497909650939450505050565b600060208284031215614c9e57600080fd5b8135614ca981614b1c565b9392505050565b600080600060608486031215614cc557600080fd5b8335614cd081614b1c565b92506020840135614ce081614b1c565b929592945050506040919091013590565b600060208284031215614d0357600080fd5b5035919050565b60008060008060408587031215614d2057600080fd5b84356001600160401b0380821115614d3757600080fd5b614d4388838901614a97565b90965094506020870135915080821115614d5c57600080fd5b50614d6987828801614a97565b95989497509550505050565b60008060008060008060008060c0898b031215614d9157600080fd5b8835614d9c81614b1c565b97506020890135614dac81614b1c565b9650604089013595506060890135945060808901356001600160401b0380821115614dd657600080fd5b614de28c838d01614a97565b909650945060a08b0135915080821115614dfb57600080fd5b50614e088b828c01614a97565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614e3857600080fd5b88356001600160401b0380821115614e4f57600080fd5b614e5b8c838d01614a97565b909a50985060208b0135915080821115614e7457600080fd5b614e808c838d01614a97565b909850965060408b0135915080821115614e9957600080fd5b614ea58c838d01614a97565b909650945060608b0135915080821115614dfb57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614ef657614ef6614ebe565b60405290565b604080519081016001600160401b0381118282101715614ef657614ef6614ebe565b60405160c081016001600160401b0381118282101715614ef657614ef6614ebe565b604051601f8201601f191681016001600160401b0381118282101715614f6857614f68614ebe565b604052919050565b63ffffffff8116811461106e57600080fd5b8035614b3c81614f70565b60006001600160401b03821115614fa657614fa6614ebe565b5060051b60200190565b600082601f830112614fc157600080fd5b81356020614fd6614fd183614f8d565b614f40565b82815260059290921b84018101918181019086841115614ff557600080fd5b8286015b8481101561501957803561500c81614b1c565b8352918301918301614ff9565b509695505050505050565b600082601f83011261503557600080fd5b81356020615045614fd183614f8d565b82815260059290921b8401810191818101908684111561506457600080fd5b8286015b848110156150195780358352918301918301615068565b600060e0828403121561509157600080fd5b615099614ed4565b90506150a482614b31565b81526150b260208301614b31565b60208201526150c360408301614b31565b6040820152606082013560608201526150de60808301614f82565b608082015260a08201356001600160401b03808211156150fd57600080fd5b61510985838601614fb0565b60a084015260c084013591508082111561512257600080fd5b5061512f84828501615024565b60c08301525092915050565b60006020828403121561514d57600080fd5b81356001600160401b0381111561516357600080fd5b61516f8482850161507f565b949350505050565b60006020828403121561518957600080fd5b813560ff81168114614ca957600080fd5b6000604082840312156151ac57600080fd5b6151b4614efc565b905081356151c181614b1c565b815260208201356bffffffffffffffffffffffff811681146151e257600080fd5b602082015292915050565b6000602080838503121561520057600080fd5b82356001600160401b038082111561521757600080fd5b818501915085601f83011261522b57600080fd5b8135615239614fd182614f8d565b81815260059190911b8301840190848101908883111561525857600080fd5b8585015b83811015615332578035858111156152745760008081fd5b860160e0818c03601f190181131561528c5760008081fd5b615294614f1e565b89830135888111156152a65760008081fd5b6152b48e8c83870101614fb0565b825250604080840135898111156152cb5760008081fd5b6152d98f8d83880101615024565b8c8401525060606152eb818601614b31565b82840152608091506152ff8f83870161519a565b9083015261530f60c08501614f82565b9082015261531e838301614b31565b60a08201528552505091860191860161525c565b5098975050505050505050565b801515811461106e57600080fd5b60008060008060006080868803121561536557600080fd5b85356001600160401b038082111561537c57600080fd5b9087019060e0828a03121561539057600080fd5b909550602087013590808211156153a657600080fd5b506153b388828901614a97565b9095509350506040860135915060608601356153ce8161533f565b809150509295509295909350565b600080604083850312156153ef57600080fd5b82356153fa81614b1c565b9150602083013561540a81614b1c565b809150509250929050565b60006040828403121561542757600080fd5b61542f614efc565b905081356001600160401b038082111561544857600080fd5b818401915084601f83011261545c57600080fd5b813560208282111561547057615470614ebe565b615482601f8301601f19168201614f40565b9250818352868183860101111561549857600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a086880312156154d557600080fd5b85356154e081614b1c565b945060208601356154f081614b1c565b935060408601356001600160401b038082111561550c57600080fd5b61551889838a01615415565b9450606088013591508082111561552e57600080fd5b5061553b88828901615415565b95989497509295608001359392505050565b6000806040838503121561556057600080fd5b823561556b81614b1c565b915060208301356001600160401b0381111561558657600080fd5b61559285828601614fb0565b9150509250929050565b600081518084526020808501945080840160005b838110156155cc578151875295820195908201906001016155b0565b509495945050505050565b602081526000614ca9602083018461559c565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b614b1085828601614bf8565b6000806040838503121561563257600080fd5b823561563d81614b1c565b946020939093013593505050565b6000806000806080858703121561566157600080fd5b843561566c81614b1c565b935060208501359250604085013561568381614b1c565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156155cc5781516001600160a01b0316875295820195908201906001016156a7565b6040815260006156df6040830185615693565b82810360208401526112a0818561559c565b60008060006060848603121561570657600080fd5b833561571181614b1c565b925060208401356001600160401b0381111561572c57600080fd5b61573886828701615415565b925050604084013590509250925092565b60006060828403121561575b57600080fd5b614ca98383614be0565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156157a5576157a561577b565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e198336030181126157f957600080fd5b9190910192915050565b6000808335601e1984360301811261581a57600080fd5b8301803591506001600160401b0382111561583457600080fd5b6020019150600581901b36038213156147af57600080fd5b60608101823561585b81614b1c565b6001600160a01b03908116835260208401359061587782614b1c565b166020830152604083013561588b81614f70565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000602082840312156158df57600080fd5b8151614ca981614b1c565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b6000602082840312156159a357600080fd5b8151614ca98161533f565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de198336030181126157f957600080fd5b600060208284031215615a1e57600080fd5b8135614ca98161533f565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a0850152615a8460e0850182615693565b905060c083015184820360c08601526112a0828261559c565b602081526000614ca96020830184615a29565b602081526000825160e06020840152615acd610100840182615693565b90506020840151601f19848303016040850152615aea828261559c565b915050604084015160018060a01b03808216606086015260608601519150808251166080860152506bffffffffffffffffffffffff60208201511660a0850152506080840151615b4260c085018263ffffffff169052565b5060a08401516001600160a01b03811660e0850152610a3b565b60008060408385031215615b6f57600080fd5b8251615b7a8161533f565b6020939093015192949293505050565b82815260406020820152600061516f6040830184615a29565b600060208284031215615bb557600080fd5b5051919050565b600082601f830112615bcd57600080fd5b81516020615bdd614fd183614f8d565b82815260059290921b84018101918181019086841115615bfc57600080fd5b8286015b848110156150195780518352918301918301615c00565b60008060408385031215615c2a57600080fd5b82516001600160401b0380821115615c4157600080fd5b818501915085601f830112615c5557600080fd5b81516020615c65614fd183614f8d565b82815260059290921b84018101918181019089841115615c8457600080fd5b948201945b83861015615cab578551615c9c81614b1c565b82529482019490820190615c89565b91880151919650909350505080821115615cc457600080fd5b5061559285828601615bbc565b60008219821115615ce457615ce461577b565b500190565b600082821015615cfb57615cfb61577b565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215615d3657600080fd5b8135614ca981614f70565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135615d6c81614b1c565b615d768183615d41565b50600181016020830135615d8981614b1c565b615d938183615d41565b506040830135615da281614f70565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b6000615dd0368361507f565b92915050565b6020808252606e90820152600080516020615efc83398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b81811015615e9257858101830151858201606001528201615e76565b81811115615ea4576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215615ecd57600080fd5b81516001600160e01b031981168114614ca957600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a2646970667358221220bcbba4065a75abbd97ed71aab418bc339c2a6eb768e7b17620bef87d64e458be64736f6c634300080c0033", +} + +// DelegationManagerABI is the input ABI used to generate the binding from. +// Deprecated: Use DelegationManagerMetaData.ABI instead. +var DelegationManagerABI = DelegationManagerMetaData.ABI + +// DelegationManagerBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use DelegationManagerMetaData.Bin instead. +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) { + parsed, err := DelegationManagerMetaData.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(DelegationManagerBin), backend, _strategyManager, _slasher, _eigenPodManager) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &DelegationManager{DelegationManagerCaller: DelegationManagerCaller{contract: contract}, DelegationManagerTransactor: DelegationManagerTransactor{contract: contract}, DelegationManagerFilterer: DelegationManagerFilterer{contract: contract}}, nil +} + +// DelegationManager is an auto generated Go binding around an Ethereum contract. +type DelegationManager struct { + DelegationManagerCaller // Read-only binding to the contract + DelegationManagerTransactor // Write-only binding to the contract + DelegationManagerFilterer // Log filterer for contract events +} + +// DelegationManagerCaller is an auto generated read-only Go binding around an Ethereum contract. +type DelegationManagerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DelegationManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type DelegationManagerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DelegationManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type DelegationManagerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DelegationManagerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type DelegationManagerSession struct { + Contract *DelegationManager // 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 +} + +// DelegationManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type DelegationManagerCallerSession struct { + Contract *DelegationManagerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// DelegationManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type DelegationManagerTransactorSession struct { + Contract *DelegationManagerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// DelegationManagerRaw is an auto generated low-level Go binding around an Ethereum contract. +type DelegationManagerRaw struct { + Contract *DelegationManager // Generic contract binding to access the raw methods on +} + +// DelegationManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type DelegationManagerCallerRaw struct { + Contract *DelegationManagerCaller // Generic read-only contract binding to access the raw methods on +} + +// DelegationManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type DelegationManagerTransactorRaw struct { + Contract *DelegationManagerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewDelegationManager creates a new instance of DelegationManager, bound to a specific deployed contract. +func NewDelegationManager(address common.Address, backend bind.ContractBackend) (*DelegationManager, error) { + contract, err := bindDelegationManager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &DelegationManager{DelegationManagerCaller: DelegationManagerCaller{contract: contract}, DelegationManagerTransactor: DelegationManagerTransactor{contract: contract}, DelegationManagerFilterer: DelegationManagerFilterer{contract: contract}}, nil +} + +// NewDelegationManagerCaller creates a new read-only instance of DelegationManager, bound to a specific deployed contract. +func NewDelegationManagerCaller(address common.Address, caller bind.ContractCaller) (*DelegationManagerCaller, error) { + contract, err := bindDelegationManager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &DelegationManagerCaller{contract: contract}, nil +} + +// NewDelegationManagerTransactor creates a new write-only instance of DelegationManager, bound to a specific deployed contract. +func NewDelegationManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*DelegationManagerTransactor, error) { + contract, err := bindDelegationManager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &DelegationManagerTransactor{contract: contract}, nil +} + +// NewDelegationManagerFilterer creates a new log filterer instance of DelegationManager, bound to a specific deployed contract. +func NewDelegationManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*DelegationManagerFilterer, error) { + contract, err := bindDelegationManager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &DelegationManagerFilterer{contract: contract}, nil +} + +// bindDelegationManager binds a generic wrapper to an already deployed contract. +func bindDelegationManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := DelegationManagerMetaData.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 (_DelegationManager *DelegationManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _DelegationManager.Contract.DelegationManagerCaller.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 (_DelegationManager *DelegationManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelegationManager.Contract.DelegationManagerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_DelegationManager *DelegationManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _DelegationManager.Contract.DelegationManagerTransactor.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 (_DelegationManager *DelegationManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _DelegationManager.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 (_DelegationManager *DelegationManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelegationManager.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_DelegationManager *DelegationManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _DelegationManager.Contract.contract.Transact(opts, method, params...) +} + +// DELEGATIONAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0x04a4f979. +// +// Solidity: function DELEGATION_APPROVAL_TYPEHASH() view returns(bytes32) +func (_DelegationManager *DelegationManagerCaller) DELEGATIONAPPROVALTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "DELEGATION_APPROVAL_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DELEGATIONAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0x04a4f979. +// +// Solidity: function DELEGATION_APPROVAL_TYPEHASH() view returns(bytes32) +func (_DelegationManager *DelegationManagerSession) DELEGATIONAPPROVALTYPEHASH() ([32]byte, error) { + return _DelegationManager.Contract.DELEGATIONAPPROVALTYPEHASH(&_DelegationManager.CallOpts) +} + +// DELEGATIONAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0x04a4f979. +// +// Solidity: function DELEGATION_APPROVAL_TYPEHASH() view returns(bytes32) +func (_DelegationManager *DelegationManagerCallerSession) DELEGATIONAPPROVALTYPEHASH() ([32]byte, error) { + return _DelegationManager.Contract.DELEGATIONAPPROVALTYPEHASH(&_DelegationManager.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_DelegationManager *DelegationManagerCaller) DOMAINTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "DOMAIN_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_DelegationManager *DelegationManagerSession) DOMAINTYPEHASH() ([32]byte, error) { + return _DelegationManager.Contract.DOMAINTYPEHASH(&_DelegationManager.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_DelegationManager *DelegationManagerCallerSession) DOMAINTYPEHASH() ([32]byte, error) { + return _DelegationManager.Contract.DOMAINTYPEHASH(&_DelegationManager.CallOpts) +} + +// MAXSTAKEROPTOUTWINDOWBLOCKS is a free data retrieval call binding the contract method 0x4fc40b61. +// +// Solidity: function MAX_STAKER_OPT_OUT_WINDOW_BLOCKS() view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) MAXSTAKEROPTOUTWINDOWBLOCKS(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "MAX_STAKER_OPT_OUT_WINDOW_BLOCKS") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXSTAKEROPTOUTWINDOWBLOCKS is a free data retrieval call binding the contract method 0x4fc40b61. +// +// Solidity: function MAX_STAKER_OPT_OUT_WINDOW_BLOCKS() view returns(uint256) +func (_DelegationManager *DelegationManagerSession) MAXSTAKEROPTOUTWINDOWBLOCKS() (*big.Int, error) { + return _DelegationManager.Contract.MAXSTAKEROPTOUTWINDOWBLOCKS(&_DelegationManager.CallOpts) +} + +// MAXSTAKEROPTOUTWINDOWBLOCKS is a free data retrieval call binding the contract method 0x4fc40b61. +// +// Solidity: function MAX_STAKER_OPT_OUT_WINDOW_BLOCKS() view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) MAXSTAKEROPTOUTWINDOWBLOCKS() (*big.Int, error) { + return _DelegationManager.Contract.MAXSTAKEROPTOUTWINDOWBLOCKS(&_DelegationManager.CallOpts) +} + +// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. +// +// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) MAXWITHDRAWALDELAYBLOCKS(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _DelegationManager.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 (_DelegationManager *DelegationManagerSession) MAXWITHDRAWALDELAYBLOCKS() (*big.Int, error) { + return _DelegationManager.Contract.MAXWITHDRAWALDELAYBLOCKS(&_DelegationManager.CallOpts) +} + +// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. +// +// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) MAXWITHDRAWALDELAYBLOCKS() (*big.Int, error) { + return _DelegationManager.Contract.MAXWITHDRAWALDELAYBLOCKS(&_DelegationManager.CallOpts) +} + +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_DelegationManager *DelegationManagerCaller) STAKERDELEGATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "STAKER_DELEGATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_DelegationManager *DelegationManagerSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { + return _DelegationManager.Contract.STAKERDELEGATIONTYPEHASH(&_DelegationManager.CallOpts) +} + +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_DelegationManager *DelegationManagerCallerSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { + return _DelegationManager.Contract.STAKERDELEGATIONTYPEHASH(&_DelegationManager.CallOpts) +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_DelegationManager *DelegationManagerCaller) BeaconChainETHStrategy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "beaconChainETHStrategy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_DelegationManager *DelegationManagerSession) BeaconChainETHStrategy() (common.Address, error) { + return _DelegationManager.Contract.BeaconChainETHStrategy(&_DelegationManager.CallOpts) +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_DelegationManager *DelegationManagerCallerSession) BeaconChainETHStrategy() (common.Address, error) { + return _DelegationManager.Contract.BeaconChainETHStrategy(&_DelegationManager.CallOpts) +} + +// CalculateCurrentStakerDelegationDigestHash is a free data retrieval call binding the contract method 0x1bbce091. +// +// Solidity: function calculateCurrentStakerDelegationDigestHash(address staker, address operator, uint256 expiry) view returns(bytes32) +func (_DelegationManager *DelegationManagerCaller) CalculateCurrentStakerDelegationDigestHash(opts *bind.CallOpts, staker common.Address, operator common.Address, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "calculateCurrentStakerDelegationDigestHash", staker, operator, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateCurrentStakerDelegationDigestHash is a free data retrieval call binding the contract method 0x1bbce091. +// +// Solidity: function calculateCurrentStakerDelegationDigestHash(address staker, address operator, uint256 expiry) view returns(bytes32) +func (_DelegationManager *DelegationManagerSession) CalculateCurrentStakerDelegationDigestHash(staker common.Address, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _DelegationManager.Contract.CalculateCurrentStakerDelegationDigestHash(&_DelegationManager.CallOpts, staker, operator, expiry) +} + +// CalculateCurrentStakerDelegationDigestHash is a free data retrieval call binding the contract method 0x1bbce091. +// +// Solidity: function calculateCurrentStakerDelegationDigestHash(address staker, address operator, uint256 expiry) view returns(bytes32) +func (_DelegationManager *DelegationManagerCallerSession) CalculateCurrentStakerDelegationDigestHash(staker common.Address, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _DelegationManager.Contract.CalculateCurrentStakerDelegationDigestHash(&_DelegationManager.CallOpts, staker, operator, expiry) +} + +// CalculateDelegationApprovalDigestHash is a free data retrieval call binding the contract method 0x0b9f487a. +// +// Solidity: function calculateDelegationApprovalDigestHash(address staker, address operator, address _delegationApprover, bytes32 approverSalt, uint256 expiry) view returns(bytes32) +func (_DelegationManager *DelegationManagerCaller) CalculateDelegationApprovalDigestHash(opts *bind.CallOpts, staker common.Address, operator common.Address, _delegationApprover common.Address, approverSalt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "calculateDelegationApprovalDigestHash", staker, operator, _delegationApprover, approverSalt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateDelegationApprovalDigestHash is a free data retrieval call binding the contract method 0x0b9f487a. +// +// Solidity: function calculateDelegationApprovalDigestHash(address staker, address operator, address _delegationApprover, bytes32 approverSalt, uint256 expiry) view returns(bytes32) +func (_DelegationManager *DelegationManagerSession) CalculateDelegationApprovalDigestHash(staker common.Address, operator common.Address, _delegationApprover common.Address, approverSalt [32]byte, expiry *big.Int) ([32]byte, error) { + return _DelegationManager.Contract.CalculateDelegationApprovalDigestHash(&_DelegationManager.CallOpts, staker, operator, _delegationApprover, approverSalt, expiry) +} + +// CalculateDelegationApprovalDigestHash is a free data retrieval call binding the contract method 0x0b9f487a. +// +// Solidity: function calculateDelegationApprovalDigestHash(address staker, address operator, address _delegationApprover, bytes32 approverSalt, uint256 expiry) view returns(bytes32) +func (_DelegationManager *DelegationManagerCallerSession) CalculateDelegationApprovalDigestHash(staker common.Address, operator common.Address, _delegationApprover common.Address, approverSalt [32]byte, expiry *big.Int) ([32]byte, error) { + return _DelegationManager.Contract.CalculateDelegationApprovalDigestHash(&_DelegationManager.CallOpts, staker, operator, _delegationApprover, approverSalt, expiry) +} + +// CalculateStakerDelegationDigestHash is a free data retrieval call binding the contract method 0xc94b5111. +// +// Solidity: function calculateStakerDelegationDigestHash(address staker, uint256 _stakerNonce, address operator, uint256 expiry) view returns(bytes32) +func (_DelegationManager *DelegationManagerCaller) CalculateStakerDelegationDigestHash(opts *bind.CallOpts, staker common.Address, _stakerNonce *big.Int, operator common.Address, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "calculateStakerDelegationDigestHash", staker, _stakerNonce, operator, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateStakerDelegationDigestHash is a free data retrieval call binding the contract method 0xc94b5111. +// +// Solidity: function calculateStakerDelegationDigestHash(address staker, uint256 _stakerNonce, address operator, uint256 expiry) view returns(bytes32) +func (_DelegationManager *DelegationManagerSession) CalculateStakerDelegationDigestHash(staker common.Address, _stakerNonce *big.Int, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _DelegationManager.Contract.CalculateStakerDelegationDigestHash(&_DelegationManager.CallOpts, staker, _stakerNonce, operator, expiry) +} + +// CalculateStakerDelegationDigestHash is a free data retrieval call binding the contract method 0xc94b5111. +// +// Solidity: function calculateStakerDelegationDigestHash(address staker, uint256 _stakerNonce, address operator, uint256 expiry) view returns(bytes32) +func (_DelegationManager *DelegationManagerCallerSession) CalculateStakerDelegationDigestHash(staker common.Address, _stakerNonce *big.Int, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _DelegationManager.Contract.CalculateStakerDelegationDigestHash(&_DelegationManager.CallOpts, staker, _stakerNonce, operator, expiry) +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0x597b36da. +// +// Solidity: function calculateWithdrawalRoot((address,address,address,uint256,uint32,address[],uint256[]) withdrawal) pure returns(bytes32) +func (_DelegationManager *DelegationManagerCaller) CalculateWithdrawalRoot(opts *bind.CallOpts, withdrawal IDelegationManagerWithdrawal) ([32]byte, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "calculateWithdrawalRoot", withdrawal) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0x597b36da. +// +// Solidity: function calculateWithdrawalRoot((address,address,address,uint256,uint32,address[],uint256[]) withdrawal) pure returns(bytes32) +func (_DelegationManager *DelegationManagerSession) CalculateWithdrawalRoot(withdrawal IDelegationManagerWithdrawal) ([32]byte, error) { + return _DelegationManager.Contract.CalculateWithdrawalRoot(&_DelegationManager.CallOpts, withdrawal) +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0x597b36da. +// +// Solidity: function calculateWithdrawalRoot((address,address,address,uint256,uint32,address[],uint256[]) withdrawal) pure returns(bytes32) +func (_DelegationManager *DelegationManagerCallerSession) CalculateWithdrawalRoot(withdrawal IDelegationManagerWithdrawal) ([32]byte, error) { + return _DelegationManager.Contract.CalculateWithdrawalRoot(&_DelegationManager.CallOpts, withdrawal) +} + +// CumulativeWithdrawalsQueued is a free data retrieval call binding the contract method 0xa1788484. +// +// Solidity: function cumulativeWithdrawalsQueued(address ) view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) CumulativeWithdrawalsQueued(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "cumulativeWithdrawalsQueued", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CumulativeWithdrawalsQueued is a free data retrieval call binding the contract method 0xa1788484. +// +// Solidity: function cumulativeWithdrawalsQueued(address ) view returns(uint256) +func (_DelegationManager *DelegationManagerSession) CumulativeWithdrawalsQueued(arg0 common.Address) (*big.Int, error) { + return _DelegationManager.Contract.CumulativeWithdrawalsQueued(&_DelegationManager.CallOpts, arg0) +} + +// CumulativeWithdrawalsQueued is a free data retrieval call binding the contract method 0xa1788484. +// +// Solidity: function cumulativeWithdrawalsQueued(address ) view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) CumulativeWithdrawalsQueued(arg0 common.Address) (*big.Int, error) { + return _DelegationManager.Contract.CumulativeWithdrawalsQueued(&_DelegationManager.CallOpts, arg0) +} + +// DelegatedTo is a free data retrieval call binding the contract method 0x65da1264. +// +// Solidity: function delegatedTo(address ) view returns(address) +func (_DelegationManager *DelegationManagerCaller) DelegatedTo(opts *bind.CallOpts, arg0 common.Address) (common.Address, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "delegatedTo", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DelegatedTo is a free data retrieval call binding the contract method 0x65da1264. +// +// Solidity: function delegatedTo(address ) view returns(address) +func (_DelegationManager *DelegationManagerSession) DelegatedTo(arg0 common.Address) (common.Address, error) { + return _DelegationManager.Contract.DelegatedTo(&_DelegationManager.CallOpts, arg0) +} + +// DelegatedTo is a free data retrieval call binding the contract method 0x65da1264. +// +// Solidity: function delegatedTo(address ) view returns(address) +func (_DelegationManager *DelegationManagerCallerSession) DelegatedTo(arg0 common.Address) (common.Address, error) { + return _DelegationManager.Contract.DelegatedTo(&_DelegationManager.CallOpts, arg0) +} + +// DelegationApprover is a free data retrieval call binding the contract method 0x3cdeb5e0. +// +// Solidity: function delegationApprover(address operator) view returns(address) +func (_DelegationManager *DelegationManagerCaller) DelegationApprover(opts *bind.CallOpts, operator common.Address) (common.Address, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "delegationApprover", operator) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DelegationApprover is a free data retrieval call binding the contract method 0x3cdeb5e0. +// +// Solidity: function delegationApprover(address operator) view returns(address) +func (_DelegationManager *DelegationManagerSession) DelegationApprover(operator common.Address) (common.Address, error) { + return _DelegationManager.Contract.DelegationApprover(&_DelegationManager.CallOpts, operator) +} + +// DelegationApprover is a free data retrieval call binding the contract method 0x3cdeb5e0. +// +// Solidity: function delegationApprover(address operator) view returns(address) +func (_DelegationManager *DelegationManagerCallerSession) DelegationApprover(operator common.Address) (common.Address, error) { + return _DelegationManager.Contract.DelegationApprover(&_DelegationManager.CallOpts, operator) +} + +// DelegationApproverSaltIsSpent is a free data retrieval call binding the contract method 0xbb45fef2. +// +// Solidity: function delegationApproverSaltIsSpent(address , bytes32 ) view returns(bool) +func (_DelegationManager *DelegationManagerCaller) DelegationApproverSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "delegationApproverSaltIsSpent", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// DelegationApproverSaltIsSpent is a free data retrieval call binding the contract method 0xbb45fef2. +// +// Solidity: function delegationApproverSaltIsSpent(address , bytes32 ) view returns(bool) +func (_DelegationManager *DelegationManagerSession) DelegationApproverSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _DelegationManager.Contract.DelegationApproverSaltIsSpent(&_DelegationManager.CallOpts, arg0, arg1) +} + +// DelegationApproverSaltIsSpent is a free data retrieval call binding the contract method 0xbb45fef2. +// +// Solidity: function delegationApproverSaltIsSpent(address , bytes32 ) view returns(bool) +func (_DelegationManager *DelegationManagerCallerSession) DelegationApproverSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _DelegationManager.Contract.DelegationApproverSaltIsSpent(&_DelegationManager.CallOpts, arg0, arg1) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_DelegationManager *DelegationManagerCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _DelegationManager.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 + +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_DelegationManager *DelegationManagerSession) DomainSeparator() ([32]byte, error) { + return _DelegationManager.Contract.DomainSeparator(&_DelegationManager.CallOpts) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_DelegationManager *DelegationManagerCallerSession) DomainSeparator() ([32]byte, error) { + return _DelegationManager.Contract.DomainSeparator(&_DelegationManager.CallOpts) +} + +// EarningsReceiver is a free data retrieval call binding the contract method 0x5f966f14. +// +// Solidity: function earningsReceiver(address operator) view returns(address) +func (_DelegationManager *DelegationManagerCaller) EarningsReceiver(opts *bind.CallOpts, operator common.Address) (common.Address, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "earningsReceiver", operator) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EarningsReceiver is a free data retrieval call binding the contract method 0x5f966f14. +// +// Solidity: function earningsReceiver(address operator) view returns(address) +func (_DelegationManager *DelegationManagerSession) EarningsReceiver(operator common.Address) (common.Address, error) { + return _DelegationManager.Contract.EarningsReceiver(&_DelegationManager.CallOpts, operator) +} + +// EarningsReceiver is a free data retrieval call binding the contract method 0x5f966f14. +// +// Solidity: function earningsReceiver(address operator) view returns(address) +func (_DelegationManager *DelegationManagerCallerSession) EarningsReceiver(operator common.Address) (common.Address, error) { + return _DelegationManager.Contract.EarningsReceiver(&_DelegationManager.CallOpts, operator) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_DelegationManager *DelegationManagerCaller) EigenPodManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DelegationManager.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 (_DelegationManager *DelegationManagerSession) EigenPodManager() (common.Address, error) { + return _DelegationManager.Contract.EigenPodManager(&_DelegationManager.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_DelegationManager *DelegationManagerCallerSession) EigenPodManager() (common.Address, error) { + return _DelegationManager.Contract.EigenPodManager(&_DelegationManager.CallOpts) +} + +// GetDelegatableShares is a free data retrieval call binding the contract method 0xcf80873e. +// +// Solidity: function getDelegatableShares(address staker) view returns(address[], uint256[]) +func (_DelegationManager *DelegationManagerCaller) GetDelegatableShares(opts *bind.CallOpts, staker common.Address) ([]common.Address, []*big.Int, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "getDelegatableShares", staker) + + if err != nil { + return *new([]common.Address), *new([]*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + out1 := *abi.ConvertType(out[1], new([]*big.Int)).(*[]*big.Int) + + return out0, out1, err + +} + +// GetDelegatableShares is a free data retrieval call binding the contract method 0xcf80873e. +// +// Solidity: function getDelegatableShares(address staker) view returns(address[], uint256[]) +func (_DelegationManager *DelegationManagerSession) GetDelegatableShares(staker common.Address) ([]common.Address, []*big.Int, error) { + return _DelegationManager.Contract.GetDelegatableShares(&_DelegationManager.CallOpts, staker) +} + +// GetDelegatableShares is a free data retrieval call binding the contract method 0xcf80873e. +// +// Solidity: function getDelegatableShares(address staker) view returns(address[], uint256[]) +func (_DelegationManager *DelegationManagerCallerSession) GetDelegatableShares(staker common.Address) ([]common.Address, []*big.Int, error) { + return _DelegationManager.Contract.GetDelegatableShares(&_DelegationManager.CallOpts, staker) +} + +// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. +// +// 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, "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 (_DelegationManager *DelegationManagerSession) GetOperatorShares(operator common.Address, strategies []common.Address) ([]*big.Int, error) { + return _DelegationManager.Contract.GetOperatorShares(&_DelegationManager.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 (_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. +// +// Solidity: function getWithdrawalDelay(address[] strategies) view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) GetWithdrawalDelay(opts *bind.CallOpts, strategies []common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "getWithdrawalDelay", strategies) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. +// +// Solidity: function getWithdrawalDelay(address[] strategies) view returns(uint256) +func (_DelegationManager *DelegationManagerSession) GetWithdrawalDelay(strategies []common.Address) (*big.Int, error) { + return _DelegationManager.Contract.GetWithdrawalDelay(&_DelegationManager.CallOpts, strategies) +} + +// GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. +// +// Solidity: function getWithdrawalDelay(address[] strategies) view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) GetWithdrawalDelay(strategies []common.Address) (*big.Int, error) { + return _DelegationManager.Contract.GetWithdrawalDelay(&_DelegationManager.CallOpts, strategies) +} + +// IsDelegated is a free data retrieval call binding the contract method 0x3e28391d. +// +// Solidity: function isDelegated(address staker) view returns(bool) +func (_DelegationManager *DelegationManagerCaller) IsDelegated(opts *bind.CallOpts, staker common.Address) (bool, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "isDelegated", staker) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsDelegated is a free data retrieval call binding the contract method 0x3e28391d. +// +// Solidity: function isDelegated(address staker) view returns(bool) +func (_DelegationManager *DelegationManagerSession) IsDelegated(staker common.Address) (bool, error) { + return _DelegationManager.Contract.IsDelegated(&_DelegationManager.CallOpts, staker) +} + +// IsDelegated is a free data retrieval call binding the contract method 0x3e28391d. +// +// Solidity: function isDelegated(address staker) view returns(bool) +func (_DelegationManager *DelegationManagerCallerSession) IsDelegated(staker common.Address) (bool, error) { + return _DelegationManager.Contract.IsDelegated(&_DelegationManager.CallOpts, staker) +} + +// IsOperator is a free data retrieval call binding the contract method 0x6d70f7ae. +// +// Solidity: function isOperator(address operator) view returns(bool) +func (_DelegationManager *DelegationManagerCaller) IsOperator(opts *bind.CallOpts, operator common.Address) (bool, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "isOperator", operator) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsOperator is a free data retrieval call binding the contract method 0x6d70f7ae. +// +// Solidity: function isOperator(address operator) view returns(bool) +func (_DelegationManager *DelegationManagerSession) IsOperator(operator common.Address) (bool, error) { + return _DelegationManager.Contract.IsOperator(&_DelegationManager.CallOpts, operator) +} + +// IsOperator is a free data retrieval call binding the contract method 0x6d70f7ae. +// +// Solidity: function isOperator(address operator) view returns(bool) +func (_DelegationManager *DelegationManagerCallerSession) IsOperator(operator common.Address) (bool, error) { + return _DelegationManager.Contract.IsOperator(&_DelegationManager.CallOpts, operator) +} + +// MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. +// +// Solidity: function minWithdrawalDelayBlocks() view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) MinWithdrawalDelayBlocks(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "minWithdrawalDelayBlocks") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. +// +// Solidity: function minWithdrawalDelayBlocks() view returns(uint256) +func (_DelegationManager *DelegationManagerSession) MinWithdrawalDelayBlocks() (*big.Int, error) { + return _DelegationManager.Contract.MinWithdrawalDelayBlocks(&_DelegationManager.CallOpts) +} + +// MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. +// +// Solidity: function minWithdrawalDelayBlocks() view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) MinWithdrawalDelayBlocks() (*big.Int, error) { + return _DelegationManager.Contract.MinWithdrawalDelayBlocks(&_DelegationManager.CallOpts) +} + +// OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. +// +// Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) +func (_DelegationManager *DelegationManagerCaller) OperatorDetails(opts *bind.CallOpts, operator common.Address) (IDelegationManagerOperatorDetails, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "operatorDetails", operator) + + if err != nil { + return *new(IDelegationManagerOperatorDetails), err + } + + out0 := *abi.ConvertType(out[0], new(IDelegationManagerOperatorDetails)).(*IDelegationManagerOperatorDetails) + + return out0, err + +} + +// OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. +// +// Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) +func (_DelegationManager *DelegationManagerSession) OperatorDetails(operator common.Address) (IDelegationManagerOperatorDetails, error) { + return _DelegationManager.Contract.OperatorDetails(&_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)) +func (_DelegationManager *DelegationManagerCallerSession) OperatorDetails(operator common.Address) (IDelegationManagerOperatorDetails, error) { + return _DelegationManager.Contract.OperatorDetails(&_DelegationManager.CallOpts, operator) +} + +// 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) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "operatorShares", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// 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) +} + +// 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) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_DelegationManager *DelegationManagerCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DelegationManager.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 (_DelegationManager *DelegationManagerSession) Owner() (common.Address, error) { + return _DelegationManager.Contract.Owner(&_DelegationManager.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_DelegationManager *DelegationManagerCallerSession) Owner() (common.Address, error) { + return _DelegationManager.Contract.Owner(&_DelegationManager.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_DelegationManager *DelegationManagerCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _DelegationManager.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 (_DelegationManager *DelegationManagerSession) Paused(index uint8) (bool, error) { + return _DelegationManager.Contract.Paused(&_DelegationManager.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_DelegationManager *DelegationManagerCallerSession) Paused(index uint8) (bool, error) { + return _DelegationManager.Contract.Paused(&_DelegationManager.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _DelegationManager.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 (_DelegationManager *DelegationManagerSession) Paused0() (*big.Int, error) { + return _DelegationManager.Contract.Paused0(&_DelegationManager.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) Paused0() (*big.Int, error) { + return _DelegationManager.Contract.Paused0(&_DelegationManager.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_DelegationManager *DelegationManagerCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DelegationManager.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 (_DelegationManager *DelegationManagerSession) PauserRegistry() (common.Address, error) { + return _DelegationManager.Contract.PauserRegistry(&_DelegationManager.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_DelegationManager *DelegationManagerCallerSession) PauserRegistry() (common.Address, error) { + return _DelegationManager.Contract.PauserRegistry(&_DelegationManager.CallOpts) +} + +// PendingWithdrawals is a free data retrieval call binding the contract method 0xb7f06ebe. +// +// Solidity: function pendingWithdrawals(bytes32 ) view returns(bool) +func (_DelegationManager *DelegationManagerCaller) PendingWithdrawals(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "pendingWithdrawals", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// PendingWithdrawals is a free data retrieval call binding the contract method 0xb7f06ebe. +// +// Solidity: function pendingWithdrawals(bytes32 ) view returns(bool) +func (_DelegationManager *DelegationManagerSession) PendingWithdrawals(arg0 [32]byte) (bool, error) { + return _DelegationManager.Contract.PendingWithdrawals(&_DelegationManager.CallOpts, arg0) +} + +// PendingWithdrawals is a free data retrieval call binding the contract method 0xb7f06ebe. +// +// Solidity: function pendingWithdrawals(bytes32 ) view returns(bool) +func (_DelegationManager *DelegationManagerCallerSession) PendingWithdrawals(arg0 [32]byte) (bool, error) { + return _DelegationManager.Contract.PendingWithdrawals(&_DelegationManager.CallOpts, arg0) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_DelegationManager *DelegationManagerCaller) Slasher(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "slasher") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_DelegationManager *DelegationManagerSession) Slasher() (common.Address, error) { + return _DelegationManager.Contract.Slasher(&_DelegationManager.CallOpts) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_DelegationManager *DelegationManagerCallerSession) Slasher() (common.Address, error) { + return _DelegationManager.Contract.Slasher(&_DelegationManager.CallOpts) +} + +// StakerNonce is a free data retrieval call binding the contract method 0x29c77d4f. +// +// Solidity: function stakerNonce(address ) view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) StakerNonce(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "stakerNonce", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerNonce is a free data retrieval call binding the contract method 0x29c77d4f. +// +// Solidity: function stakerNonce(address ) view returns(uint256) +func (_DelegationManager *DelegationManagerSession) StakerNonce(arg0 common.Address) (*big.Int, error) { + return _DelegationManager.Contract.StakerNonce(&_DelegationManager.CallOpts, arg0) +} + +// StakerNonce is a free data retrieval call binding the contract method 0x29c77d4f. +// +// Solidity: function stakerNonce(address ) view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) StakerNonce(arg0 common.Address) (*big.Int, error) { + return _DelegationManager.Contract.StakerNonce(&_DelegationManager.CallOpts, arg0) +} + +// StakerOptOutWindowBlocks is a free data retrieval call binding the contract method 0x16928365. +// +// Solidity: function stakerOptOutWindowBlocks(address operator) view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) StakerOptOutWindowBlocks(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "stakerOptOutWindowBlocks", operator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerOptOutWindowBlocks is a free data retrieval call binding the contract method 0x16928365. +// +// Solidity: function stakerOptOutWindowBlocks(address operator) view returns(uint256) +func (_DelegationManager *DelegationManagerSession) StakerOptOutWindowBlocks(operator common.Address) (*big.Int, error) { + return _DelegationManager.Contract.StakerOptOutWindowBlocks(&_DelegationManager.CallOpts, operator) +} + +// StakerOptOutWindowBlocks is a free data retrieval call binding the contract method 0x16928365. +// +// Solidity: function stakerOptOutWindowBlocks(address operator) view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) StakerOptOutWindowBlocks(operator common.Address) (*big.Int, error) { + return _DelegationManager.Contract.StakerOptOutWindowBlocks(&_DelegationManager.CallOpts, operator) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_DelegationManager *DelegationManagerCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "strategyManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_DelegationManager *DelegationManagerSession) StrategyManager() (common.Address, error) { + return _DelegationManager.Contract.StrategyManager(&_DelegationManager.CallOpts) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_DelegationManager *DelegationManagerCallerSession) StrategyManager() (common.Address, error) { + return _DelegationManager.Contract.StrategyManager(&_DelegationManager.CallOpts) +} + +// StrategyWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc488375a. +// +// Solidity: function strategyWithdrawalDelayBlocks(address ) view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) StrategyWithdrawalDelayBlocks(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "strategyWithdrawalDelayBlocks", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StrategyWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc488375a. +// +// Solidity: function strategyWithdrawalDelayBlocks(address ) view returns(uint256) +func (_DelegationManager *DelegationManagerSession) StrategyWithdrawalDelayBlocks(arg0 common.Address) (*big.Int, error) { + return _DelegationManager.Contract.StrategyWithdrawalDelayBlocks(&_DelegationManager.CallOpts, arg0) +} + +// StrategyWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc488375a. +// +// Solidity: function strategyWithdrawalDelayBlocks(address ) view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) StrategyWithdrawalDelayBlocks(arg0 common.Address) (*big.Int, error) { + return _DelegationManager.Contract.StrategyWithdrawalDelayBlocks(&_DelegationManager.CallOpts, arg0) +} + +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// +// 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) +} + +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// +// 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 0x60d7faed. +// +// 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) +} + +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// +// 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) +} + +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// +// 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 0x33404396. +// +// 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 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 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 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. +// +// Solidity: function delegateTo(address operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_DelegationManager *DelegationManagerTransactor) DelegateTo(opts *bind.TransactOpts, operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "delegateTo", operator, approverSignatureAndExpiry, approverSalt) +} + +// DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. +// +// Solidity: function delegateTo(address operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_DelegationManager *DelegationManagerSession) DelegateTo(operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _DelegationManager.Contract.DelegateTo(&_DelegationManager.TransactOpts, operator, approverSignatureAndExpiry, approverSalt) +} + +// DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. +// +// Solidity: function delegateTo(address operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_DelegationManager *DelegationManagerTransactorSession) DelegateTo(operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _DelegationManager.Contract.DelegateTo(&_DelegationManager.TransactOpts, operator, approverSignatureAndExpiry, approverSalt) +} + +// DelegateToBySignature is a paid mutator transaction binding the contract method 0x7f548071. +// +// Solidity: function delegateToBySignature(address staker, address operator, (bytes,uint256) stakerSignatureAndExpiry, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_DelegationManager *DelegationManagerTransactor) DelegateToBySignature(opts *bind.TransactOpts, staker common.Address, operator common.Address, stakerSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "delegateToBySignature", staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) +} + +// DelegateToBySignature is a paid mutator transaction binding the contract method 0x7f548071. +// +// Solidity: function delegateToBySignature(address staker, address operator, (bytes,uint256) stakerSignatureAndExpiry, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_DelegationManager *DelegationManagerSession) DelegateToBySignature(staker common.Address, operator common.Address, stakerSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _DelegationManager.Contract.DelegateToBySignature(&_DelegationManager.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) +} + +// DelegateToBySignature is a paid mutator transaction binding the contract method 0x7f548071. +// +// Solidity: function delegateToBySignature(address staker, address operator, (bytes,uint256) stakerSignatureAndExpiry, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_DelegationManager *DelegationManagerTransactorSession) DelegateToBySignature(staker common.Address, operator common.Address, stakerSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _DelegationManager.Contract.DelegateToBySignature(&_DelegationManager.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) +} + +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// +// 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 0x28a573ae. +// +// 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 0x28a573ae. +// +// 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. +// +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus, uint256 _minWithdrawalDelayBlocks, address[] _strategies, uint256[] _withdrawalDelayBlocks) returns() +func (_DelegationManager *DelegationManagerTransactor) Initialize(opts *bind.TransactOpts, initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int, _minWithdrawalDelayBlocks *big.Int, _strategies []common.Address, _withdrawalDelayBlocks []*big.Int) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "initialize", initialOwner, _pauserRegistry, initialPausedStatus, _minWithdrawalDelayBlocks, _strategies, _withdrawalDelayBlocks) +} + +// Initialize is a paid mutator transaction binding the contract method 0x22bf40e4. +// +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus, uint256 _minWithdrawalDelayBlocks, address[] _strategies, uint256[] _withdrawalDelayBlocks) returns() +func (_DelegationManager *DelegationManagerSession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int, _minWithdrawalDelayBlocks *big.Int, _strategies []common.Address, _withdrawalDelayBlocks []*big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.Initialize(&_DelegationManager.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus, _minWithdrawalDelayBlocks, _strategies, _withdrawalDelayBlocks) +} + +// Initialize is a paid mutator transaction binding the contract method 0x22bf40e4. +// +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus, uint256 _minWithdrawalDelayBlocks, address[] _strategies, uint256[] _withdrawalDelayBlocks) returns() +func (_DelegationManager *DelegationManagerTransactorSession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int, _minWithdrawalDelayBlocks *big.Int, _strategies []common.Address, _withdrawalDelayBlocks []*big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.Initialize(&_DelegationManager.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus, _minWithdrawalDelayBlocks, _strategies, _withdrawalDelayBlocks) +} + +// MigrateQueuedWithdrawals is a paid mutator transaction binding the contract method 0x5cfe8d2c. +// +// Solidity: function migrateQueuedWithdrawals((address[],uint256[],address,(address,uint96),uint32,address)[] withdrawalsToMigrate) returns() +func (_DelegationManager *DelegationManagerTransactor) MigrateQueuedWithdrawals(opts *bind.TransactOpts, withdrawalsToMigrate []IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "migrateQueuedWithdrawals", withdrawalsToMigrate) +} + +// MigrateQueuedWithdrawals is a paid mutator transaction binding the contract method 0x5cfe8d2c. +// +// Solidity: function migrateQueuedWithdrawals((address[],uint256[],address,(address,uint96),uint32,address)[] withdrawalsToMigrate) returns() +func (_DelegationManager *DelegationManagerSession) MigrateQueuedWithdrawals(withdrawalsToMigrate []IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _DelegationManager.Contract.MigrateQueuedWithdrawals(&_DelegationManager.TransactOpts, withdrawalsToMigrate) +} + +// MigrateQueuedWithdrawals is a paid mutator transaction binding the contract method 0x5cfe8d2c. +// +// Solidity: function migrateQueuedWithdrawals((address[],uint256[],address,(address,uint96),uint32,address)[] withdrawalsToMigrate) returns() +func (_DelegationManager *DelegationManagerTransactorSession) MigrateQueuedWithdrawals(withdrawalsToMigrate []IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _DelegationManager.Contract.MigrateQueuedWithdrawals(&_DelegationManager.TransactOpts, withdrawalsToMigrate) +} + +// ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. +// +// Solidity: function modifyOperatorDetails((address,address,uint32) newOperatorDetails) returns() +func (_DelegationManager *DelegationManagerTransactor) ModifyOperatorDetails(opts *bind.TransactOpts, newOperatorDetails IDelegationManagerOperatorDetails) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "modifyOperatorDetails", newOperatorDetails) +} + +// ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. +// +// Solidity: function modifyOperatorDetails((address,address,uint32) newOperatorDetails) returns() +func (_DelegationManager *DelegationManagerSession) ModifyOperatorDetails(newOperatorDetails IDelegationManagerOperatorDetails) (*types.Transaction, error) { + return _DelegationManager.Contract.ModifyOperatorDetails(&_DelegationManager.TransactOpts, newOperatorDetails) +} + +// ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. +// +// Solidity: function modifyOperatorDetails((address,address,uint32) newOperatorDetails) returns() +func (_DelegationManager *DelegationManagerTransactorSession) ModifyOperatorDetails(newOperatorDetails IDelegationManagerOperatorDetails) (*types.Transaction, error) { + return _DelegationManager.Contract.ModifyOperatorDetails(&_DelegationManager.TransactOpts, newOperatorDetails) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_DelegationManager *DelegationManagerTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_DelegationManager *DelegationManagerSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.Pause(&_DelegationManager.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_DelegationManager *DelegationManagerTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.Pause(&_DelegationManager.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_DelegationManager *DelegationManagerTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_DelegationManager *DelegationManagerSession) PauseAll() (*types.Transaction, error) { + return _DelegationManager.Contract.PauseAll(&_DelegationManager.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_DelegationManager *DelegationManagerTransactorSession) PauseAll() (*types.Transaction, error) { + return _DelegationManager.Contract.PauseAll(&_DelegationManager.TransactOpts) +} + +// QueueWithdrawals is a paid mutator transaction binding the contract method 0x0dd8dd02. +// +// Solidity: function queueWithdrawals((address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes32[]) +func (_DelegationManager *DelegationManagerTransactor) QueueWithdrawals(opts *bind.TransactOpts, queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "queueWithdrawals", queuedWithdrawalParams) +} + +// QueueWithdrawals is a paid mutator transaction binding the contract method 0x0dd8dd02. +// +// Solidity: function queueWithdrawals((address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes32[]) +func (_DelegationManager *DelegationManagerSession) QueueWithdrawals(queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _DelegationManager.Contract.QueueWithdrawals(&_DelegationManager.TransactOpts, queuedWithdrawalParams) +} + +// QueueWithdrawals is a paid mutator transaction binding the contract method 0x0dd8dd02. +// +// Solidity: function queueWithdrawals((address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes32[]) +func (_DelegationManager *DelegationManagerTransactorSession) QueueWithdrawals(queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _DelegationManager.Contract.QueueWithdrawals(&_DelegationManager.TransactOpts, queuedWithdrawalParams) +} + +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// +// 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 0x0f589e59. +// +// 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 0x0f589e59. +// +// 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. +// +// Solidity: function renounceOwnership() returns() +func (_DelegationManager *DelegationManagerTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_DelegationManager *DelegationManagerSession) RenounceOwnership() (*types.Transaction, error) { + return _DelegationManager.Contract.RenounceOwnership(&_DelegationManager.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_DelegationManager *DelegationManagerTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _DelegationManager.Contract.RenounceOwnership(&_DelegationManager.TransactOpts) +} + +// SetMinWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x635bbd10. +// +// Solidity: function setMinWithdrawalDelayBlocks(uint256 newMinWithdrawalDelayBlocks) returns() +func (_DelegationManager *DelegationManagerTransactor) SetMinWithdrawalDelayBlocks(opts *bind.TransactOpts, newMinWithdrawalDelayBlocks *big.Int) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "setMinWithdrawalDelayBlocks", newMinWithdrawalDelayBlocks) +} + +// SetMinWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x635bbd10. +// +// Solidity: function setMinWithdrawalDelayBlocks(uint256 newMinWithdrawalDelayBlocks) returns() +func (_DelegationManager *DelegationManagerSession) SetMinWithdrawalDelayBlocks(newMinWithdrawalDelayBlocks *big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.SetMinWithdrawalDelayBlocks(&_DelegationManager.TransactOpts, newMinWithdrawalDelayBlocks) +} + +// SetMinWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x635bbd10. +// +// Solidity: function setMinWithdrawalDelayBlocks(uint256 newMinWithdrawalDelayBlocks) returns() +func (_DelegationManager *DelegationManagerTransactorSession) SetMinWithdrawalDelayBlocks(newMinWithdrawalDelayBlocks *big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.SetMinWithdrawalDelayBlocks(&_DelegationManager.TransactOpts, newMinWithdrawalDelayBlocks) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_DelegationManager *DelegationManagerTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_DelegationManager *DelegationManagerSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _DelegationManager.Contract.SetPauserRegistry(&_DelegationManager.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_DelegationManager *DelegationManagerTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _DelegationManager.Contract.SetPauserRegistry(&_DelegationManager.TransactOpts, newPauserRegistry) +} + +// SetStrategyWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x1522bf02. +// +// Solidity: function setStrategyWithdrawalDelayBlocks(address[] strategies, uint256[] withdrawalDelayBlocks) returns() +func (_DelegationManager *DelegationManagerTransactor) SetStrategyWithdrawalDelayBlocks(opts *bind.TransactOpts, strategies []common.Address, withdrawalDelayBlocks []*big.Int) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "setStrategyWithdrawalDelayBlocks", strategies, withdrawalDelayBlocks) +} + +// SetStrategyWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x1522bf02. +// +// Solidity: function setStrategyWithdrawalDelayBlocks(address[] strategies, uint256[] withdrawalDelayBlocks) returns() +func (_DelegationManager *DelegationManagerSession) SetStrategyWithdrawalDelayBlocks(strategies []common.Address, withdrawalDelayBlocks []*big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.SetStrategyWithdrawalDelayBlocks(&_DelegationManager.TransactOpts, strategies, withdrawalDelayBlocks) +} + +// SetStrategyWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x1522bf02. +// +// Solidity: function setStrategyWithdrawalDelayBlocks(address[] strategies, uint256[] withdrawalDelayBlocks) returns() +func (_DelegationManager *DelegationManagerTransactorSession) SetStrategyWithdrawalDelayBlocks(strategies []common.Address, withdrawalDelayBlocks []*big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.SetStrategyWithdrawalDelayBlocks(&_DelegationManager.TransactOpts, strategies, withdrawalDelayBlocks) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_DelegationManager *DelegationManagerTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_DelegationManager *DelegationManagerSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _DelegationManager.Contract.TransferOwnership(&_DelegationManager.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_DelegationManager *DelegationManagerTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _DelegationManager.Contract.TransferOwnership(&_DelegationManager.TransactOpts, newOwner) +} + +// Undelegate is a paid mutator transaction binding the contract method 0xda8be864. +// +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoots) +func (_DelegationManager *DelegationManagerTransactor) Undelegate(opts *bind.TransactOpts, staker common.Address) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "undelegate", staker) +} + +// Undelegate is a paid mutator transaction binding the contract method 0xda8be864. +// +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoots) +func (_DelegationManager *DelegationManagerSession) Undelegate(staker common.Address) (*types.Transaction, error) { + return _DelegationManager.Contract.Undelegate(&_DelegationManager.TransactOpts, staker) +} + +// Undelegate is a paid mutator transaction binding the contract method 0xda8be864. +// +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoots) +func (_DelegationManager *DelegationManagerTransactorSession) Undelegate(staker common.Address) (*types.Transaction, error) { + return _DelegationManager.Contract.Undelegate(&_DelegationManager.TransactOpts, staker) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_DelegationManager *DelegationManagerTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_DelegationManager *DelegationManagerSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.Unpause(&_DelegationManager.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_DelegationManager *DelegationManagerTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.Unpause(&_DelegationManager.TransactOpts, newPausedStatus) +} + +// UpdateOperatorMetadataURI is a paid mutator transaction binding the contract method 0x99be81c8. +// +// Solidity: function updateOperatorMetadataURI(string metadataURI) returns() +func (_DelegationManager *DelegationManagerTransactor) UpdateOperatorMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "updateOperatorMetadataURI", metadataURI) +} + +// UpdateOperatorMetadataURI is a paid mutator transaction binding the contract method 0x99be81c8. +// +// Solidity: function updateOperatorMetadataURI(string metadataURI) returns() +func (_DelegationManager *DelegationManagerSession) UpdateOperatorMetadataURI(metadataURI string) (*types.Transaction, error) { + return _DelegationManager.Contract.UpdateOperatorMetadataURI(&_DelegationManager.TransactOpts, metadataURI) +} + +// UpdateOperatorMetadataURI is a paid mutator transaction binding the contract method 0x99be81c8. +// +// Solidity: function updateOperatorMetadataURI(string metadataURI) returns() +func (_DelegationManager *DelegationManagerTransactorSession) UpdateOperatorMetadataURI(metadataURI string) (*types.Transaction, error) { + return _DelegationManager.Contract.UpdateOperatorMetadataURI(&_DelegationManager.TransactOpts, metadataURI) +} + +// DelegationManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the DelegationManager contract. +type DelegationManagerInitializedIterator struct { + Event *DelegationManagerInitialized // 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 *DelegationManagerInitializedIterator) 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(DelegationManagerInitialized) + 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(DelegationManagerInitialized) + 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 *DelegationManagerInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerInitialized represents a Initialized event raised by the DelegationManager contract. +type DelegationManagerInitialized 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 (_DelegationManager *DelegationManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*DelegationManagerInitializedIterator, error) { + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &DelegationManagerInitializedIterator{contract: _DelegationManager.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 (_DelegationManager *DelegationManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *DelegationManagerInitialized) (event.Subscription, error) { + + logs, sub, err := _DelegationManager.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(DelegationManagerInitialized) + if err := _DelegationManager.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 (_DelegationManager *DelegationManagerFilterer) ParseInitialized(log types.Log) (*DelegationManagerInitialized, error) { + event := new(DelegationManagerInitialized) + if err := _DelegationManager.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerMinWithdrawalDelayBlocksSetIterator is returned from FilterMinWithdrawalDelayBlocksSet and is used to iterate over the raw logs and unpacked data for MinWithdrawalDelayBlocksSet events raised by the DelegationManager contract. +type DelegationManagerMinWithdrawalDelayBlocksSetIterator struct { + Event *DelegationManagerMinWithdrawalDelayBlocksSet // 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 *DelegationManagerMinWithdrawalDelayBlocksSetIterator) 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(DelegationManagerMinWithdrawalDelayBlocksSet) + 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(DelegationManagerMinWithdrawalDelayBlocksSet) + 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 *DelegationManagerMinWithdrawalDelayBlocksSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerMinWithdrawalDelayBlocksSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerMinWithdrawalDelayBlocksSet represents a MinWithdrawalDelayBlocksSet event raised by the DelegationManager contract. +type DelegationManagerMinWithdrawalDelayBlocksSet struct { + PreviousValue *big.Int + NewValue *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMinWithdrawalDelayBlocksSet is a free log retrieval operation binding the contract event 0xafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69. +// +// Solidity: event MinWithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_DelegationManager *DelegationManagerFilterer) FilterMinWithdrawalDelayBlocksSet(opts *bind.FilterOpts) (*DelegationManagerMinWithdrawalDelayBlocksSetIterator, error) { + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "MinWithdrawalDelayBlocksSet") + if err != nil { + return nil, err + } + return &DelegationManagerMinWithdrawalDelayBlocksSetIterator{contract: _DelegationManager.contract, event: "MinWithdrawalDelayBlocksSet", logs: logs, sub: sub}, nil +} + +// WatchMinWithdrawalDelayBlocksSet is a free log subscription operation binding the contract event 0xafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69. +// +// Solidity: event MinWithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_DelegationManager *DelegationManagerFilterer) WatchMinWithdrawalDelayBlocksSet(opts *bind.WatchOpts, sink chan<- *DelegationManagerMinWithdrawalDelayBlocksSet) (event.Subscription, error) { + + logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "MinWithdrawalDelayBlocksSet") + 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(DelegationManagerMinWithdrawalDelayBlocksSet) + if err := _DelegationManager.contract.UnpackLog(event, "MinWithdrawalDelayBlocksSet", 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 +} + +// ParseMinWithdrawalDelayBlocksSet is a log parse operation binding the contract event 0xafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69. +// +// Solidity: event MinWithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_DelegationManager *DelegationManagerFilterer) ParseMinWithdrawalDelayBlocksSet(log types.Log) (*DelegationManagerMinWithdrawalDelayBlocksSet, error) { + event := new(DelegationManagerMinWithdrawalDelayBlocksSet) + if err := _DelegationManager.contract.UnpackLog(event, "MinWithdrawalDelayBlocksSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerOperatorDetailsModifiedIterator is returned from FilterOperatorDetailsModified and is used to iterate over the raw logs and unpacked data for OperatorDetailsModified events raised by the DelegationManager contract. +type DelegationManagerOperatorDetailsModifiedIterator struct { + Event *DelegationManagerOperatorDetailsModified // 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 *DelegationManagerOperatorDetailsModifiedIterator) 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(DelegationManagerOperatorDetailsModified) + 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(DelegationManagerOperatorDetailsModified) + 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 *DelegationManagerOperatorDetailsModifiedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerOperatorDetailsModifiedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerOperatorDetailsModified represents a OperatorDetailsModified event raised by the DelegationManager contract. +type DelegationManagerOperatorDetailsModified struct { + Operator common.Address + NewOperatorDetails IDelegationManagerOperatorDetails + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorDetailsModified is a free log retrieval operation binding the contract event 0xfebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac. +// +// Solidity: event OperatorDetailsModified(address indexed operator, (address,address,uint32) newOperatorDetails) +func (_DelegationManager *DelegationManagerFilterer) FilterOperatorDetailsModified(opts *bind.FilterOpts, operator []common.Address) (*DelegationManagerOperatorDetailsModifiedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "OperatorDetailsModified", operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerOperatorDetailsModifiedIterator{contract: _DelegationManager.contract, event: "OperatorDetailsModified", logs: logs, sub: sub}, nil +} + +// WatchOperatorDetailsModified is a free log subscription operation binding the contract event 0xfebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac. +// +// Solidity: event OperatorDetailsModified(address indexed operator, (address,address,uint32) newOperatorDetails) +func (_DelegationManager *DelegationManagerFilterer) WatchOperatorDetailsModified(opts *bind.WatchOpts, sink chan<- *DelegationManagerOperatorDetailsModified, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "OperatorDetailsModified", 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(DelegationManagerOperatorDetailsModified) + if err := _DelegationManager.contract.UnpackLog(event, "OperatorDetailsModified", 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 +} + +// ParseOperatorDetailsModified is a log parse operation binding the contract event 0xfebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac. +// +// Solidity: event OperatorDetailsModified(address indexed operator, (address,address,uint32) newOperatorDetails) +func (_DelegationManager *DelegationManagerFilterer) ParseOperatorDetailsModified(log types.Log) (*DelegationManagerOperatorDetailsModified, error) { + event := new(DelegationManagerOperatorDetailsModified) + if err := _DelegationManager.contract.UnpackLog(event, "OperatorDetailsModified", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerOperatorMetadataURIUpdatedIterator is returned from FilterOperatorMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for OperatorMetadataURIUpdated events raised by the DelegationManager contract. +type DelegationManagerOperatorMetadataURIUpdatedIterator struct { + Event *DelegationManagerOperatorMetadataURIUpdated // 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 *DelegationManagerOperatorMetadataURIUpdatedIterator) 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(DelegationManagerOperatorMetadataURIUpdated) + 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(DelegationManagerOperatorMetadataURIUpdated) + 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 *DelegationManagerOperatorMetadataURIUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerOperatorMetadataURIUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerOperatorMetadataURIUpdated represents a OperatorMetadataURIUpdated event raised by the DelegationManager contract. +type DelegationManagerOperatorMetadataURIUpdated struct { + Operator common.Address + MetadataURI string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorMetadataURIUpdated is a free log retrieval operation binding the contract event 0x02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090. +// +// Solidity: event OperatorMetadataURIUpdated(address indexed operator, string metadataURI) +func (_DelegationManager *DelegationManagerFilterer) FilterOperatorMetadataURIUpdated(opts *bind.FilterOpts, operator []common.Address) (*DelegationManagerOperatorMetadataURIUpdatedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "OperatorMetadataURIUpdated", operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerOperatorMetadataURIUpdatedIterator{contract: _DelegationManager.contract, event: "OperatorMetadataURIUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorMetadataURIUpdated is a free log subscription operation binding the contract event 0x02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090. +// +// Solidity: event OperatorMetadataURIUpdated(address indexed operator, string metadataURI) +func (_DelegationManager *DelegationManagerFilterer) WatchOperatorMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *DelegationManagerOperatorMetadataURIUpdated, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "OperatorMetadataURIUpdated", 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(DelegationManagerOperatorMetadataURIUpdated) + if err := _DelegationManager.contract.UnpackLog(event, "OperatorMetadataURIUpdated", 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 +} + +// ParseOperatorMetadataURIUpdated is a log parse operation binding the contract event 0x02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090. +// +// Solidity: event OperatorMetadataURIUpdated(address indexed operator, string metadataURI) +func (_DelegationManager *DelegationManagerFilterer) ParseOperatorMetadataURIUpdated(log types.Log) (*DelegationManagerOperatorMetadataURIUpdated, error) { + event := new(DelegationManagerOperatorMetadataURIUpdated) + if err := _DelegationManager.contract.UnpackLog(event, "OperatorMetadataURIUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerOperatorRegisteredIterator is returned from FilterOperatorRegistered and is used to iterate over the raw logs and unpacked data for OperatorRegistered events raised by the DelegationManager contract. +type DelegationManagerOperatorRegisteredIterator struct { + Event *DelegationManagerOperatorRegistered // 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 *DelegationManagerOperatorRegisteredIterator) 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(DelegationManagerOperatorRegistered) + 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(DelegationManagerOperatorRegistered) + 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 *DelegationManagerOperatorRegisteredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerOperatorRegisteredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerOperatorRegistered represents a OperatorRegistered event raised by the DelegationManager contract. +type DelegationManagerOperatorRegistered struct { + Operator common.Address + OperatorDetails IDelegationManagerOperatorDetails + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorRegistered is a free log retrieval operation binding the contract event 0x8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e2. +// +// Solidity: event OperatorRegistered(address indexed operator, (address,address,uint32) operatorDetails) +func (_DelegationManager *DelegationManagerFilterer) FilterOperatorRegistered(opts *bind.FilterOpts, operator []common.Address) (*DelegationManagerOperatorRegisteredIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "OperatorRegistered", operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerOperatorRegisteredIterator{contract: _DelegationManager.contract, event: "OperatorRegistered", logs: logs, sub: sub}, nil +} + +// WatchOperatorRegistered is a free log subscription operation binding the contract event 0x8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e2. +// +// Solidity: event OperatorRegistered(address indexed operator, (address,address,uint32) operatorDetails) +func (_DelegationManager *DelegationManagerFilterer) WatchOperatorRegistered(opts *bind.WatchOpts, sink chan<- *DelegationManagerOperatorRegistered, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "OperatorRegistered", 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(DelegationManagerOperatorRegistered) + if err := _DelegationManager.contract.UnpackLog(event, "OperatorRegistered", 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 +} + +// ParseOperatorRegistered is a log parse operation binding the contract event 0x8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e2. +// +// Solidity: event OperatorRegistered(address indexed operator, (address,address,uint32) operatorDetails) +func (_DelegationManager *DelegationManagerFilterer) ParseOperatorRegistered(log types.Log) (*DelegationManagerOperatorRegistered, error) { + event := new(DelegationManagerOperatorRegistered) + if err := _DelegationManager.contract.UnpackLog(event, "OperatorRegistered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerOperatorSharesDecreasedIterator is returned from FilterOperatorSharesDecreased and is used to iterate over the raw logs and unpacked data for OperatorSharesDecreased events raised by the DelegationManager contract. +type DelegationManagerOperatorSharesDecreasedIterator struct { + Event *DelegationManagerOperatorSharesDecreased // 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 *DelegationManagerOperatorSharesDecreasedIterator) 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(DelegationManagerOperatorSharesDecreased) + 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(DelegationManagerOperatorSharesDecreased) + 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 *DelegationManagerOperatorSharesDecreasedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerOperatorSharesDecreasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerOperatorSharesDecreased represents a OperatorSharesDecreased event raised by the DelegationManager contract. +type DelegationManagerOperatorSharesDecreased struct { + Operator common.Address + Staker common.Address + Strategy common.Address + Shares *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSharesDecreased is a free log retrieval operation binding the contract event 0x6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd. +// +// Solidity: event OperatorSharesDecreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_DelegationManager *DelegationManagerFilterer) FilterOperatorSharesDecreased(opts *bind.FilterOpts, operator []common.Address) (*DelegationManagerOperatorSharesDecreasedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "OperatorSharesDecreased", operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerOperatorSharesDecreasedIterator{contract: _DelegationManager.contract, event: "OperatorSharesDecreased", logs: logs, sub: sub}, nil +} + +// WatchOperatorSharesDecreased is a free log subscription operation binding the contract event 0x6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd. +// +// Solidity: event OperatorSharesDecreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_DelegationManager *DelegationManagerFilterer) WatchOperatorSharesDecreased(opts *bind.WatchOpts, sink chan<- *DelegationManagerOperatorSharesDecreased, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "OperatorSharesDecreased", 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(DelegationManagerOperatorSharesDecreased) + if err := _DelegationManager.contract.UnpackLog(event, "OperatorSharesDecreased", 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 +} + +// ParseOperatorSharesDecreased is a log parse operation binding the contract event 0x6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd. +// +// Solidity: event OperatorSharesDecreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_DelegationManager *DelegationManagerFilterer) ParseOperatorSharesDecreased(log types.Log) (*DelegationManagerOperatorSharesDecreased, error) { + event := new(DelegationManagerOperatorSharesDecreased) + if err := _DelegationManager.contract.UnpackLog(event, "OperatorSharesDecreased", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerOperatorSharesIncreasedIterator is returned from FilterOperatorSharesIncreased and is used to iterate over the raw logs and unpacked data for OperatorSharesIncreased events raised by the DelegationManager contract. +type DelegationManagerOperatorSharesIncreasedIterator struct { + Event *DelegationManagerOperatorSharesIncreased // 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 *DelegationManagerOperatorSharesIncreasedIterator) 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(DelegationManagerOperatorSharesIncreased) + 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(DelegationManagerOperatorSharesIncreased) + 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 *DelegationManagerOperatorSharesIncreasedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerOperatorSharesIncreasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerOperatorSharesIncreased represents a OperatorSharesIncreased event raised by the DelegationManager contract. +type DelegationManagerOperatorSharesIncreased struct { + Operator common.Address + Staker common.Address + Strategy common.Address + Shares *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSharesIncreased is a free log retrieval operation binding the contract event 0x1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c. +// +// Solidity: event OperatorSharesIncreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_DelegationManager *DelegationManagerFilterer) FilterOperatorSharesIncreased(opts *bind.FilterOpts, operator []common.Address) (*DelegationManagerOperatorSharesIncreasedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "OperatorSharesIncreased", operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerOperatorSharesIncreasedIterator{contract: _DelegationManager.contract, event: "OperatorSharesIncreased", logs: logs, sub: sub}, nil +} + +// WatchOperatorSharesIncreased is a free log subscription operation binding the contract event 0x1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c. +// +// Solidity: event OperatorSharesIncreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_DelegationManager *DelegationManagerFilterer) WatchOperatorSharesIncreased(opts *bind.WatchOpts, sink chan<- *DelegationManagerOperatorSharesIncreased, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "OperatorSharesIncreased", 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(DelegationManagerOperatorSharesIncreased) + if err := _DelegationManager.contract.UnpackLog(event, "OperatorSharesIncreased", 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 +} + +// ParseOperatorSharesIncreased is a log parse operation binding the contract event 0x1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c. +// +// Solidity: event OperatorSharesIncreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_DelegationManager *DelegationManagerFilterer) ParseOperatorSharesIncreased(log types.Log) (*DelegationManagerOperatorSharesIncreased, error) { + event := new(DelegationManagerOperatorSharesIncreased) + if err := _DelegationManager.contract.UnpackLog(event, "OperatorSharesIncreased", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the DelegationManager contract. +type DelegationManagerOwnershipTransferredIterator struct { + Event *DelegationManagerOwnershipTransferred // 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 *DelegationManagerOwnershipTransferredIterator) 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(DelegationManagerOwnershipTransferred) + 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(DelegationManagerOwnershipTransferred) + 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 *DelegationManagerOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerOwnershipTransferred represents a OwnershipTransferred event raised by the DelegationManager contract. +type DelegationManagerOwnershipTransferred 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 (_DelegationManager *DelegationManagerFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*DelegationManagerOwnershipTransferredIterator, 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 := _DelegationManager.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &DelegationManagerOwnershipTransferredIterator{contract: _DelegationManager.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 (_DelegationManager *DelegationManagerFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *DelegationManagerOwnershipTransferred, 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 := _DelegationManager.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(DelegationManagerOwnershipTransferred) + if err := _DelegationManager.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 (_DelegationManager *DelegationManagerFilterer) ParseOwnershipTransferred(log types.Log) (*DelegationManagerOwnershipTransferred, error) { + event := new(DelegationManagerOwnershipTransferred) + if err := _DelegationManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the DelegationManager contract. +type DelegationManagerPausedIterator struct { + Event *DelegationManagerPaused // 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 *DelegationManagerPausedIterator) 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(DelegationManagerPaused) + 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(DelegationManagerPaused) + 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 *DelegationManagerPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerPaused represents a Paused event raised by the DelegationManager contract. +type DelegationManagerPaused 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 (_DelegationManager *DelegationManagerFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*DelegationManagerPausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &DelegationManagerPausedIterator{contract: _DelegationManager.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 (_DelegationManager *DelegationManagerFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *DelegationManagerPaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _DelegationManager.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(DelegationManagerPaused) + if err := _DelegationManager.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 (_DelegationManager *DelegationManagerFilterer) ParsePaused(log types.Log) (*DelegationManagerPaused, error) { + event := new(DelegationManagerPaused) + if err := _DelegationManager.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the DelegationManager contract. +type DelegationManagerPauserRegistrySetIterator struct { + Event *DelegationManagerPauserRegistrySet // 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 *DelegationManagerPauserRegistrySetIterator) 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(DelegationManagerPauserRegistrySet) + 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(DelegationManagerPauserRegistrySet) + 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 *DelegationManagerPauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerPauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerPauserRegistrySet represents a PauserRegistrySet event raised by the DelegationManager contract. +type DelegationManagerPauserRegistrySet 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 (_DelegationManager *DelegationManagerFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*DelegationManagerPauserRegistrySetIterator, error) { + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &DelegationManagerPauserRegistrySetIterator{contract: _DelegationManager.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 (_DelegationManager *DelegationManagerFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *DelegationManagerPauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _DelegationManager.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(DelegationManagerPauserRegistrySet) + if err := _DelegationManager.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 (_DelegationManager *DelegationManagerFilterer) ParsePauserRegistrySet(log types.Log) (*DelegationManagerPauserRegistrySet, error) { + event := new(DelegationManagerPauserRegistrySet) + if err := _DelegationManager.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStakerDelegatedIterator is returned from FilterStakerDelegated and is used to iterate over the raw logs and unpacked data for StakerDelegated events raised by the DelegationManager contract. +type DelegationManagerStakerDelegatedIterator struct { + Event *DelegationManagerStakerDelegated // 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 *DelegationManagerStakerDelegatedIterator) 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(DelegationManagerStakerDelegated) + 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(DelegationManagerStakerDelegated) + 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 *DelegationManagerStakerDelegatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStakerDelegatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStakerDelegated represents a StakerDelegated event raised by the DelegationManager contract. +type DelegationManagerStakerDelegated struct { + Staker common.Address + Operator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStakerDelegated is a free log retrieval operation binding the contract event 0xc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d8743304. +// +// Solidity: event StakerDelegated(address indexed staker, address indexed operator) +func (_DelegationManager *DelegationManagerFilterer) FilterStakerDelegated(opts *bind.FilterOpts, staker []common.Address, operator []common.Address) (*DelegationManagerStakerDelegatedIterator, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "StakerDelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerStakerDelegatedIterator{contract: _DelegationManager.contract, event: "StakerDelegated", logs: logs, sub: sub}, nil +} + +// WatchStakerDelegated is a free log subscription operation binding the contract event 0xc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d8743304. +// +// Solidity: event StakerDelegated(address indexed staker, address indexed operator) +func (_DelegationManager *DelegationManagerFilterer) WatchStakerDelegated(opts *bind.WatchOpts, sink chan<- *DelegationManagerStakerDelegated, staker []common.Address, operator []common.Address) (event.Subscription, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "StakerDelegated", stakerRule, 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(DelegationManagerStakerDelegated) + if err := _DelegationManager.contract.UnpackLog(event, "StakerDelegated", 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 +} + +// ParseStakerDelegated is a log parse operation binding the contract event 0xc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d8743304. +// +// Solidity: event StakerDelegated(address indexed staker, address indexed operator) +func (_DelegationManager *DelegationManagerFilterer) ParseStakerDelegated(log types.Log) (*DelegationManagerStakerDelegated, error) { + event := new(DelegationManagerStakerDelegated) + if err := _DelegationManager.contract.UnpackLog(event, "StakerDelegated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStakerForceUndelegatedIterator is returned from FilterStakerForceUndelegated and is used to iterate over the raw logs and unpacked data for StakerForceUndelegated events raised by the DelegationManager contract. +type DelegationManagerStakerForceUndelegatedIterator struct { + Event *DelegationManagerStakerForceUndelegated // 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 *DelegationManagerStakerForceUndelegatedIterator) 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(DelegationManagerStakerForceUndelegated) + 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(DelegationManagerStakerForceUndelegated) + 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 *DelegationManagerStakerForceUndelegatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStakerForceUndelegatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStakerForceUndelegated represents a StakerForceUndelegated event raised by the DelegationManager contract. +type DelegationManagerStakerForceUndelegated struct { + Staker common.Address + Operator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStakerForceUndelegated is a free log retrieval operation binding the contract event 0xf0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a. +// +// Solidity: event StakerForceUndelegated(address indexed staker, address indexed operator) +func (_DelegationManager *DelegationManagerFilterer) FilterStakerForceUndelegated(opts *bind.FilterOpts, staker []common.Address, operator []common.Address) (*DelegationManagerStakerForceUndelegatedIterator, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "StakerForceUndelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerStakerForceUndelegatedIterator{contract: _DelegationManager.contract, event: "StakerForceUndelegated", logs: logs, sub: sub}, nil +} + +// WatchStakerForceUndelegated is a free log subscription operation binding the contract event 0xf0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a. +// +// Solidity: event StakerForceUndelegated(address indexed staker, address indexed operator) +func (_DelegationManager *DelegationManagerFilterer) WatchStakerForceUndelegated(opts *bind.WatchOpts, sink chan<- *DelegationManagerStakerForceUndelegated, staker []common.Address, operator []common.Address) (event.Subscription, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "StakerForceUndelegated", stakerRule, 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(DelegationManagerStakerForceUndelegated) + if err := _DelegationManager.contract.UnpackLog(event, "StakerForceUndelegated", 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 +} + +// ParseStakerForceUndelegated is a log parse operation binding the contract event 0xf0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a. +// +// Solidity: event StakerForceUndelegated(address indexed staker, address indexed operator) +func (_DelegationManager *DelegationManagerFilterer) ParseStakerForceUndelegated(log types.Log) (*DelegationManagerStakerForceUndelegated, error) { + event := new(DelegationManagerStakerForceUndelegated) + if err := _DelegationManager.contract.UnpackLog(event, "StakerForceUndelegated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStakerUndelegatedIterator is returned from FilterStakerUndelegated and is used to iterate over the raw logs and unpacked data for StakerUndelegated events raised by the DelegationManager contract. +type DelegationManagerStakerUndelegatedIterator struct { + Event *DelegationManagerStakerUndelegated // 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 *DelegationManagerStakerUndelegatedIterator) 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(DelegationManagerStakerUndelegated) + 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(DelegationManagerStakerUndelegated) + 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 *DelegationManagerStakerUndelegatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStakerUndelegatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStakerUndelegated represents a StakerUndelegated event raised by the DelegationManager contract. +type DelegationManagerStakerUndelegated struct { + Staker common.Address + Operator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStakerUndelegated is a free log retrieval operation binding the contract event 0xfee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af44676. +// +// Solidity: event StakerUndelegated(address indexed staker, address indexed operator) +func (_DelegationManager *DelegationManagerFilterer) FilterStakerUndelegated(opts *bind.FilterOpts, staker []common.Address, operator []common.Address) (*DelegationManagerStakerUndelegatedIterator, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "StakerUndelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerStakerUndelegatedIterator{contract: _DelegationManager.contract, event: "StakerUndelegated", logs: logs, sub: sub}, nil +} + +// WatchStakerUndelegated is a free log subscription operation binding the contract event 0xfee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af44676. +// +// Solidity: event StakerUndelegated(address indexed staker, address indexed operator) +func (_DelegationManager *DelegationManagerFilterer) WatchStakerUndelegated(opts *bind.WatchOpts, sink chan<- *DelegationManagerStakerUndelegated, staker []common.Address, operator []common.Address) (event.Subscription, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "StakerUndelegated", stakerRule, 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(DelegationManagerStakerUndelegated) + if err := _DelegationManager.contract.UnpackLog(event, "StakerUndelegated", 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 +} + +// ParseStakerUndelegated is a log parse operation binding the contract event 0xfee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af44676. +// +// Solidity: event StakerUndelegated(address indexed staker, address indexed operator) +func (_DelegationManager *DelegationManagerFilterer) ParseStakerUndelegated(log types.Log) (*DelegationManagerStakerUndelegated, error) { + event := new(DelegationManagerStakerUndelegated) + if err := _DelegationManager.contract.UnpackLog(event, "StakerUndelegated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStrategyWithdrawalDelayBlocksSetIterator is returned from FilterStrategyWithdrawalDelayBlocksSet and is used to iterate over the raw logs and unpacked data for StrategyWithdrawalDelayBlocksSet events raised by the DelegationManager contract. +type DelegationManagerStrategyWithdrawalDelayBlocksSetIterator struct { + Event *DelegationManagerStrategyWithdrawalDelayBlocksSet // 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 *DelegationManagerStrategyWithdrawalDelayBlocksSetIterator) 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(DelegationManagerStrategyWithdrawalDelayBlocksSet) + 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(DelegationManagerStrategyWithdrawalDelayBlocksSet) + 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 *DelegationManagerStrategyWithdrawalDelayBlocksSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStrategyWithdrawalDelayBlocksSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStrategyWithdrawalDelayBlocksSet represents a StrategyWithdrawalDelayBlocksSet event raised by the DelegationManager contract. +type DelegationManagerStrategyWithdrawalDelayBlocksSet struct { + Strategy common.Address + PreviousValue *big.Int + NewValue *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyWithdrawalDelayBlocksSet is a free log retrieval operation binding the contract event 0x0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d. +// +// Solidity: event StrategyWithdrawalDelayBlocksSet(address strategy, uint256 previousValue, uint256 newValue) +func (_DelegationManager *DelegationManagerFilterer) FilterStrategyWithdrawalDelayBlocksSet(opts *bind.FilterOpts) (*DelegationManagerStrategyWithdrawalDelayBlocksSetIterator, error) { + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "StrategyWithdrawalDelayBlocksSet") + if err != nil { + return nil, err + } + return &DelegationManagerStrategyWithdrawalDelayBlocksSetIterator{contract: _DelegationManager.contract, event: "StrategyWithdrawalDelayBlocksSet", logs: logs, sub: sub}, nil +} + +// WatchStrategyWithdrawalDelayBlocksSet is a free log subscription operation binding the contract event 0x0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d. +// +// Solidity: event StrategyWithdrawalDelayBlocksSet(address strategy, uint256 previousValue, uint256 newValue) +func (_DelegationManager *DelegationManagerFilterer) WatchStrategyWithdrawalDelayBlocksSet(opts *bind.WatchOpts, sink chan<- *DelegationManagerStrategyWithdrawalDelayBlocksSet) (event.Subscription, error) { + + logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "StrategyWithdrawalDelayBlocksSet") + 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(DelegationManagerStrategyWithdrawalDelayBlocksSet) + if err := _DelegationManager.contract.UnpackLog(event, "StrategyWithdrawalDelayBlocksSet", 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 +} + +// ParseStrategyWithdrawalDelayBlocksSet is a log parse operation binding the contract event 0x0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d. +// +// Solidity: event StrategyWithdrawalDelayBlocksSet(address strategy, uint256 previousValue, uint256 newValue) +func (_DelegationManager *DelegationManagerFilterer) ParseStrategyWithdrawalDelayBlocksSet(log types.Log) (*DelegationManagerStrategyWithdrawalDelayBlocksSet, error) { + event := new(DelegationManagerStrategyWithdrawalDelayBlocksSet) + if err := _DelegationManager.contract.UnpackLog(event, "StrategyWithdrawalDelayBlocksSet", 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 + + 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 *DelegationManagerUnpausedIterator) 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(DelegationManagerUnpaused) + 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(DelegationManagerUnpaused) + 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 *DelegationManagerUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerUnpaused represents a Unpaused event raised by the DelegationManager contract. +type DelegationManagerUnpaused 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 (_DelegationManager *DelegationManagerFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*DelegationManagerUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &DelegationManagerUnpausedIterator{contract: _DelegationManager.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 (_DelegationManager *DelegationManagerFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *DelegationManagerUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _DelegationManager.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(DelegationManagerUnpaused) + if err := _DelegationManager.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 (_DelegationManager *DelegationManagerFilterer) ParseUnpaused(log types.Log) (*DelegationManagerUnpaused, error) { + event := new(DelegationManagerUnpaused) + if err := _DelegationManager.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerWithdrawalCompletedIterator is returned from FilterWithdrawalCompleted and is used to iterate over the raw logs and unpacked data for WithdrawalCompleted events raised by the DelegationManager contract. +type DelegationManagerWithdrawalCompletedIterator struct { + Event *DelegationManagerWithdrawalCompleted // 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 *DelegationManagerWithdrawalCompletedIterator) 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(DelegationManagerWithdrawalCompleted) + 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(DelegationManagerWithdrawalCompleted) + 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 *DelegationManagerWithdrawalCompletedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerWithdrawalCompletedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerWithdrawalCompleted represents a WithdrawalCompleted event raised by the DelegationManager contract. +type DelegationManagerWithdrawalCompleted struct { + WithdrawalRoot [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalCompleted is a free log retrieval operation binding the contract event 0xc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d. +// +// Solidity: event WithdrawalCompleted(bytes32 withdrawalRoot) +func (_DelegationManager *DelegationManagerFilterer) FilterWithdrawalCompleted(opts *bind.FilterOpts) (*DelegationManagerWithdrawalCompletedIterator, error) { + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "WithdrawalCompleted") + if err != nil { + return nil, err + } + return &DelegationManagerWithdrawalCompletedIterator{contract: _DelegationManager.contract, event: "WithdrawalCompleted", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalCompleted is a free log subscription operation binding the contract event 0xc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d. +// +// Solidity: event WithdrawalCompleted(bytes32 withdrawalRoot) +func (_DelegationManager *DelegationManagerFilterer) WatchWithdrawalCompleted(opts *bind.WatchOpts, sink chan<- *DelegationManagerWithdrawalCompleted) (event.Subscription, error) { + + logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "WithdrawalCompleted") + 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(DelegationManagerWithdrawalCompleted) + if err := _DelegationManager.contract.UnpackLog(event, "WithdrawalCompleted", 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 +} + +// ParseWithdrawalCompleted is a log parse operation binding the contract event 0xc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d. +// +// Solidity: event WithdrawalCompleted(bytes32 withdrawalRoot) +func (_DelegationManager *DelegationManagerFilterer) ParseWithdrawalCompleted(log types.Log) (*DelegationManagerWithdrawalCompleted, error) { + event := new(DelegationManagerWithdrawalCompleted) + if err := _DelegationManager.contract.UnpackLog(event, "WithdrawalCompleted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerWithdrawalMigratedIterator is returned from FilterWithdrawalMigrated and is used to iterate over the raw logs and unpacked data for WithdrawalMigrated events raised by the DelegationManager contract. +type DelegationManagerWithdrawalMigratedIterator struct { + Event *DelegationManagerWithdrawalMigrated // 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 *DelegationManagerWithdrawalMigratedIterator) 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(DelegationManagerWithdrawalMigrated) + 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(DelegationManagerWithdrawalMigrated) + 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 *DelegationManagerWithdrawalMigratedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerWithdrawalMigratedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerWithdrawalMigrated represents a WithdrawalMigrated event raised by the DelegationManager contract. +type DelegationManagerWithdrawalMigrated struct { + OldWithdrawalRoot [32]byte + NewWithdrawalRoot [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalMigrated is a free log retrieval operation binding the contract event 0xdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630. +// +// Solidity: event WithdrawalMigrated(bytes32 oldWithdrawalRoot, bytes32 newWithdrawalRoot) +func (_DelegationManager *DelegationManagerFilterer) FilterWithdrawalMigrated(opts *bind.FilterOpts) (*DelegationManagerWithdrawalMigratedIterator, error) { + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "WithdrawalMigrated") + if err != nil { + return nil, err + } + return &DelegationManagerWithdrawalMigratedIterator{contract: _DelegationManager.contract, event: "WithdrawalMigrated", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalMigrated is a free log subscription operation binding the contract event 0xdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630. +// +// Solidity: event WithdrawalMigrated(bytes32 oldWithdrawalRoot, bytes32 newWithdrawalRoot) +func (_DelegationManager *DelegationManagerFilterer) WatchWithdrawalMigrated(opts *bind.WatchOpts, sink chan<- *DelegationManagerWithdrawalMigrated) (event.Subscription, error) { + + logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "WithdrawalMigrated") + 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(DelegationManagerWithdrawalMigrated) + if err := _DelegationManager.contract.UnpackLog(event, "WithdrawalMigrated", 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 +} + +// ParseWithdrawalMigrated is a log parse operation binding the contract event 0xdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630. +// +// Solidity: event WithdrawalMigrated(bytes32 oldWithdrawalRoot, bytes32 newWithdrawalRoot) +func (_DelegationManager *DelegationManagerFilterer) ParseWithdrawalMigrated(log types.Log) (*DelegationManagerWithdrawalMigrated, error) { + event := new(DelegationManagerWithdrawalMigrated) + if err := _DelegationManager.contract.UnpackLog(event, "WithdrawalMigrated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerWithdrawalQueuedIterator is returned from FilterWithdrawalQueued and is used to iterate over the raw logs and unpacked data for WithdrawalQueued events raised by the DelegationManager contract. +type DelegationManagerWithdrawalQueuedIterator struct { + Event *DelegationManagerWithdrawalQueued // 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 *DelegationManagerWithdrawalQueuedIterator) 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(DelegationManagerWithdrawalQueued) + 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(DelegationManagerWithdrawalQueued) + 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 *DelegationManagerWithdrawalQueuedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerWithdrawalQueuedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerWithdrawalQueued represents a WithdrawalQueued event raised by the DelegationManager contract. +type DelegationManagerWithdrawalQueued struct { + WithdrawalRoot [32]byte + Withdrawal IDelegationManagerWithdrawal + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalQueued is a free log retrieval operation binding the contract event 0x9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9. +// +// Solidity: event WithdrawalQueued(bytes32 withdrawalRoot, (address,address,address,uint256,uint32,address[],uint256[]) withdrawal) +func (_DelegationManager *DelegationManagerFilterer) FilterWithdrawalQueued(opts *bind.FilterOpts) (*DelegationManagerWithdrawalQueuedIterator, error) { + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "WithdrawalQueued") + if err != nil { + return nil, err + } + return &DelegationManagerWithdrawalQueuedIterator{contract: _DelegationManager.contract, event: "WithdrawalQueued", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalQueued is a free log subscription operation binding the contract event 0x9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9. +// +// Solidity: event WithdrawalQueued(bytes32 withdrawalRoot, (address,address,address,uint256,uint32,address[],uint256[]) withdrawal) +func (_DelegationManager *DelegationManagerFilterer) WatchWithdrawalQueued(opts *bind.WatchOpts, sink chan<- *DelegationManagerWithdrawalQueued) (event.Subscription, error) { + + logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "WithdrawalQueued") + 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(DelegationManagerWithdrawalQueued) + if err := _DelegationManager.contract.UnpackLog(event, "WithdrawalQueued", 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 +} + +// ParseWithdrawalQueued is a log parse operation binding the contract event 0x9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9. +// +// Solidity: event WithdrawalQueued(bytes32 withdrawalRoot, (address,address,address,uint256,uint32,address[],uint256[]) withdrawal) +func (_DelegationManager *DelegationManagerFilterer) ParseWithdrawalQueued(log types.Log) (*DelegationManagerWithdrawalQueued, error) { + event := new(DelegationManagerWithdrawalQueued) + if err := _DelegationManager.contract.UnpackLog(event, "WithdrawalQueued", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/DelegationManager/tmp.abi b/pkg/bindings/DelegationManager/tmp.abi new file mode 100644 index 000000000..fadc35073 --- /dev/null +++ b/pkg/bindings/DelegationManager/tmp.abi @@ -0,0 +1,1747 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_strategyManager", + "type": "address", + "internalType": "contract IStrategyManager" + }, + { + "name": "_slasher", + "type": "address", + "internalType": "contract ISlasher" + }, + { + "name": "_eigenPodManager", + "type": "address", + "internalType": "contract IEigenPodManager" + } + ], + "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": "contract IStrategy" + } + ], + "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": "struct IDelegationManager.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": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "completeQueuedWithdrawal", + "inputs": [ + { + "name": "withdrawal", + "type": "tuple", + "internalType": "struct IDelegationManager.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": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + }, + { + "name": "tokens", + "type": "address[]", + "internalType": "contract IERC20[]" + }, + { + "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": "struct IDelegationManager.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": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + }, + { + "name": "tokens", + "type": "address[][]", + "internalType": "contract IERC20[][]" + }, + { + "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": "contract IStrategy" + }, + { + "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": "struct ISignatureUtils.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": "struct ISignatureUtils.SignatureWithExpiry", + "components": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "approverSignatureAndExpiry", + "type": "tuple", + "internalType": "struct ISignatureUtils.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": "earningsReceiver", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eigenPodManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IEigenPodManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getDelegatableShares", + "inputs": [ + { + "name": "staker", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getOperatorShares", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getWithdrawalDelay", + "inputs": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "increaseDelegatedShares", + "inputs": [ + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "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": "contract IPauserRegistry" + }, + { + "name": "initialPausedStatus", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_minWithdrawalDelayBlocks", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "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": "migrateQueuedWithdrawals", + "inputs": [ + { + "name": "withdrawalsToMigrate", + "type": "tuple[]", + "internalType": "struct IStrategyManager.DeprecatedStruct_QueuedWithdrawal[]", + "components": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "withdrawerAndNonce", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_WithdrawerAndNonce", + "components": [ + { + "name": "withdrawer", + "type": "address", + "internalType": "address" + }, + { + "name": "nonce", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "name": "withdrawalStartBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "delegatedAddress", + "type": "address", + "internalType": "address" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "minWithdrawalDelayBlocks", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "modifyOperatorDetails", + "inputs": [ + { + "name": "newOperatorDetails", + "type": "tuple", + "internalType": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "contract IStrategy" + } + ], + "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": "contract IPauserRegistry" + } + ], + "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": "struct IDelegationManager.QueuedWithdrawalParams[]", + "components": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "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": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "contract IPauserRegistry" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setStrategyWithdrawalDelayBlocks", + "inputs": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "withdrawalDelayBlocks", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "slasher", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ISlasher" + } + ], + "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": "contract IStrategyManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "strategyWithdrawalDelayBlocks", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IStrategy" + } + ], + "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": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "contract IStrategy" + }, + { + "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": "contract IStrategy" + }, + { + "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": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "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": "contract IStrategy" + }, + { + "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": "WithdrawalMigrated", + "inputs": [ + { + "name": "oldWithdrawalRoot", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "newWithdrawalRoot", + "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": "struct IDelegationManager.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": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/DelegationManager/tmp.bin b/pkg/bindings/DelegationManager/tmp.bin new file mode 100644 index 000000000..dc21e5cf0 --- /dev/null +++ b/pkg/bindings/DelegationManager/tmp.bin @@ -0,0 +1 @@ +0x6101006040523480156200001257600080fd5b506040516200618138038062006181833981016040819052620000359162000140565b6001600160a01b0380841660805280821660c052821660a0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e051615f516200023060003960006127790152600081816105e7015281816110ae0152818161142a01528181611e0d01528181612ad2015281816141390152614625015260006107d701526000818161052f0152818161107c015281816113f80152818161172001528181611ea101528181612b9f01528181612d220152818161425f01526146cb0152615f516000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c806360d7faed116101d3578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b01461097d578063f2fde38b14610990578063f698da25146109a3578063fabc1cbc146109ab57600080fd5b8063cf80873e14610936578063da8be86414610957578063eea9064b1461096a57600080fd5b8063c488375a116100de578063c488375a14610853578063c5e480db14610873578063c94b511114610919578063ca661c041461092c57600080fd5b8063b7f06ebe146107f9578063bb45fef21461081c578063c448feb81461084a57600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461078457806399be81c81461079f578063a1788484146107b2578063b1344271146107d257600080fd5b8063886f1195146107405780638da5cb5b14610753578063900413471461076457600080fd5b80636d70f7ae116101ad5780636d70f7ae146106e7578063715018a6146106fa578063778e55f3146107025780637f5480711461072d57600080fd5b806360d7faed14610698578063635bbd10146106ab57806365da1264146106be57600080fd5b806329c77d4f116102ad5780634fc40b611161024b5780635ac86ab7116102255780635ac86ab71461062e5780635c975abb146106515780635cfe8d2c146106595780635f966f141461066c57600080fd5b80634fc40b6114610609578063595c6a6714610613578063597b36da1461061b57600080fd5b80633cdeb5e0116102875780633cdeb5e0146105695780633e28391d1461059857806343377382146105bb5780634665bcda146105e257600080fd5b806329c77d4f146104f7578063334043961461051757806339b70e381461052a57600080fd5b8063136439dd1161031a5780631bbce091116102f45780631bbce0911461049757806320606b70146104aa57806322bf40e4146104d157806328a573ae146104e457600080fd5b8063136439dd146104385780631522bf021461044b578063169283651461045e57600080fd5b80630dd8dd02116103565780630dd8dd02146103dd5780630f589e59146103fd57806310d67a2f14610412578063132d49671461042557600080fd5b80630449ca391461037d57806304a4f979146103a35780630b9f487a146103ca575b600080fd5b61039061038b366004614adb565b6109be565b6040519081526020015b60405180910390f35b6103907f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6103906103d8366004614b41565b610a43565b6103f06103eb366004614adb565b610b05565b60405161039a9190614b9c565b61041061040b366004614c39565b610e6e565b005b610410610420366004614c8c565b610fbe565b610410610433366004614cb0565b611071565b610410610446366004614cf1565b611128565b610410610459366004614d0a565b611267565b61039061046c366004614c8c565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b6103906104a5366004614cb0565b61127b565b6103907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6104106104df366004614d75565b6112a9565b6104106104f2366004614cb0565b6113ed565b610390610505366004614c8c565b609b6020526000908152604090205481565b610410610525366004614e1c565b61149d565b6105517f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161039a565b610551610577366004614c8c565b6001600160a01b039081166000908152609960205260409020600101541690565b6105ab6105a6366004614c8c565b6115da565b604051901515815260200161039a565b6103907f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b6105517f000000000000000000000000000000000000000000000000000000000000000081565b6103906213c68081565b6104106115fa565b61039061062936600461513b565b6116c1565b6105ab61063c366004615177565b606654600160ff9092169190911b9081161490565b606654610390565b6104106106673660046151ed565b6116f1565b61055161067a366004614c8c565b6001600160a01b039081166000908152609960205260409020541690565b6104106106a636600461534d565b61199c565b6104106106b9366004614cf1565b611a37565b6105516106cc366004614c8c565b609a602052600090815260409020546001600160a01b031681565b6105ab6106f5366004614c8c565b611a48565b610410611a68565b6103906107103660046153dc565b609860209081526000928352604080842090915290825290205481565b61041061073b3660046154bd565b611a7c565b606554610551906001600160a01b031681565b6033546001600160a01b0316610551565b61077761077236600461554d565b611b81565b60405161039a91906155d7565b61055173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6104106107ad3660046155ea565b611c5b565b6103906107c0366004614c8c565b609f6020526000908152604090205481565b6105517f000000000000000000000000000000000000000000000000000000000000000081565b6105ab610807366004614cf1565b609e6020526000908152604090205460ff1681565b6105ab61082a36600461561f565b609c60209081526000928352604080842090915290825290205460ff1681565b610390609d5481565b610390610861366004614c8c565b60a16020526000908152604090205481565b6108e3610881366004614c8c565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff169082015260600161039a565b61039061092736600461564b565b611d2d565b61039062034bc081565b610949610944366004614c8c565b611de6565b60405161039a9291906156cc565b6103f0610965366004614c8c565b61219e565b6104106109783660046156f1565b612662565b61041061098b366004615749565b61266e565b61041061099e366004614c8c565b6126ff565b610390612775565b6104106109b9366004614cf1565b6127b3565b609d54600090815b83811015610a3b57600060a160008787858181106109e6576109e6615765565b90506020020160208101906109fb9190614c8c565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811115610a2a578092505b50610a3481615791565b90506109c6565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610ac1612775565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610b3a5760405162461bcd60e51b8152600401610b31906157ac565b60405180910390fd5b6000836001600160401b03811115610b5457610b54614ebe565b604051908082528060200260200182016040528015610b7d578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610e6357868682818110610bb857610bb8615765565b9050602002810190610bca91906157e3565b610bd8906020810190615803565b9050878783818110610bec57610bec615765565b9050602002810190610bfe91906157e3565b610c089080615803565b905014610c7d5760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610b31565b33878783818110610c9057610c90615765565b9050602002810190610ca291906157e3565b610cb3906060810190604001614c8c565b6001600160a01b031614610d2f5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610b31565b610e343383898985818110610d4657610d46615765565b9050602002810190610d5891906157e3565b610d69906060810190604001614c8c565b8a8a86818110610d7b57610d7b615765565b9050602002810190610d8d91906157e3565b610d979080615803565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610ddd57610ddd615765565b9050602002810190610def91906157e3565b610dfd906020810190615803565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061290f92505050565b838281518110610e4657610e46615765565b602090810291909101015280610e5b81615791565b915050610b9e565b509095945050505050565b336000908152609960205260409020546001600160a01b031615610f085760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a206f70657261746f722068617320616c72656164792072656769736064820152641d195c995960da1b608482015260a401610b31565b610f123384612ecf565b604080518082019091526060815260006020820152610f34338083600061316b565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610f6d919061584c565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610fb092919061589e565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611011573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103591906158cd565b6001600160a01b0316336001600160a01b0316146110655760405162461bcd60e51b8152600401610b31906158ea565b61106e81613510565b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d05750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6110ec5760405162461bcd60e51b8152600401610b3190615934565b6110f5836115da565b15611123576001600160a01b038084166000908152609a60205260409020541661112181858585613607565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111949190615991565b6111b05760405162461bcd60e51b8152600401610b31906159ae565b606654818116146112295760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610b31565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b61126f613682565b611121848484846136dc565b6001600160a01b0383166000908152609b60205260408120546112a085828686611d2d565b95945050505050565b600054610100900460ff16158080156112c95750600054600160ff909116105b806112e35750303b1580156112e3575060005460ff166001145b6113465760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b31565b6000805460ff191660011790558015611369576000805461ff0019166101001790555b6113738888613902565b61137b6139e8565b60975561138789613a7f565b61139086613ad1565b61139c858585856136dc565b80156113e2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061144c5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6114685760405162461bcd60e51b8152600401610b3190615934565b611471836115da565b15611123576001600160a01b038084166000908152609a60205260409020541661112181858585613bcb565b606654600290600490811614156114c65760405162461bcd60e51b8152600401610b31906157ac565b600260c95414156115195760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b31565b600260c95560005b888110156115c9576115b98a8a8381811061153e5761153e615765565b905060200281019061155091906159f6565b89898481811061156257611562615765565b90506020028101906115749190615803565b89898681811061158657611586615765565b9050602002013588888781811061159f5761159f615765565b90506020020160208101906115b49190615a0c565b613c46565b6115c281615791565b9050611521565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116669190615991565b6116825760405162461bcd60e51b8152600401610b31906159ae565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116d49190615a9d565b604051602081830303815290604052805190602001209050919050565b60005b815181101561199857600082828151811061171157611711615765565b602002602001015190506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cd293f6f846040518263ffffffff1660e01b815260040161176a9190615ab0565b60408051808303816000875af1158015611788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ac9190615b5c565b91509150811561198a576040808401516001600160a01b0381166000908152609f602052918220805491928291906117e383615791565b919050555060006040518060e00160405280846001600160a01b031681526020018760a001516001600160a01b031681526020018760600151600001516001600160a01b03168152602001838152602001876080015163ffffffff16815260200187600001518152602001876020015181525090506000611863826116c1565b6000818152609e602052604090205490915060ff16156118f95760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e6d6967726174655175657565645760448201527f69746864726177616c733a207769746864726177616c20616c72656164792065606482015264786973747360d81b608482015260a401610b31565b6000818152609e602052604090819020805460ff19166001179055517f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9906119449083908590615b8a565b60405180910390a160408051868152602081018390527fdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630910160405180910390a1505050505b8360010193505050506116f4565b5050565b606654600290600490811614156119c55760405162461bcd60e51b8152600401610b31906157ac565b600260c9541415611a185760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b31565b600260c955611a2a8686868686613c46565b5050600160c95550505050565b611a3f613682565b61106e81613ad1565b6001600160a01b0390811660009081526099602052604090205416151590565b611a70613682565b611a7a6000613a7f565b565b4283602001511015611b005760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610b31565b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611b3c8783888860200151611d2d565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611b6c9088908390614430565b611b788787868661316b565b50505050505050565b6060600082516001600160401b03811115611b9e57611b9e614ebe565b604051908082528060200260200182016040528015611bc7578160200160208202803683370190505b50905060005b8351811015610a3b576001600160a01b03851660009081526098602052604081208551909190869084908110611c0557611c05615765565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611c4057611c40615765565b6020908102919091010152611c5481615791565b9050611bcd565b611c6433611a48565b611ce65760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610b31565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611d2192919061589e565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611da3612775565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7a9190615ba3565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa158015611eea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f129190810190615c17565b9150915060008313611f2957909590945092505050565b606080835160001415611fe3576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611f9e57611f9e615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611fd257611fd2615765565b602002602001018181525050612191565b8351611ff0906001615cd1565b6001600160401b0381111561200757612007614ebe565b604051908082528060200260200182016040528015612030578160200160208202803683370190505b50915081516001600160401b0381111561204c5761204c614ebe565b604051908082528060200260200182016040528015612075578160200160208202803683370190505b50905060005b845181101561210f5784818151811061209657612096615765565b60200260200101518382815181106120b0576120b0615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106120e2576120e2615765565b60200260200101518282815181106120fc576120fc615765565b602090810291909101015260010161207b565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600184516121349190615ce9565b8151811061214457612144615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600184516121749190615ce9565b8151811061218457612184615765565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811614156121ca5760405162461bcd60e51b8152600401610b31906157ac565b6121d3836115da565b6122535760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610b31565b61225c83611a48565b156122cf5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610b31565b6001600160a01b03831661234b5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610b31565b6001600160a01b038084166000818152609a60205260409020549091169033148061237e5750336001600160a01b038216145b806123a557506001600160a01b038181166000908152609960205260409020600101541633145b6124175760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610b31565b60008061242386611de6565b9092509050336001600160a01b0387161461247957826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516124fb576040805160008152602081019091529450612659565b81516001600160401b0381111561251457612514614ebe565b60405190808252806020026020018201604052801561253d578160200160208202803683370190505b50945060005b8251811015612657576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106125a3576125a3615765565b6020026020010151826000815181106125be576125be615765565b60200260200101906001600160a01b031690816001600160a01b0316815250508383815181106125f0576125f0615765565b60200260200101518160008151811061260b5761260b615765565b60200260200101818152505061262489878b858561290f565b88848151811061263657612636615765565b6020026020010181815250505050808061264f90615791565b915050612543565b505b50505050919050565b6111233384848461316b565b61267733611a48565b6126f55760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610b31565b61106e3382612ecf565b612707613682565b6001600160a01b03811661276c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b31565b61106e81613a7f565b60007f00000000000000000000000000000000000000000000000000000000000000004614156127a6575060975490565b6127ae6139e8565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282a91906158cd565b6001600160a01b0316336001600160a01b03161461285a5760405162461bcd60e51b8152600401610b31906158ea565b6066541981196066541916146128d85760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610b31565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161125c565b60006001600160a01b0386166129a65760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610b31565b8251612a305760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610b31565b60005b8351811015612ddd576001600160a01b03861615612a8957612a898688868481518110612a6257612a62615765565b6020026020010151868581518110612a7c57612a7c615765565b6020026020010151613607565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612ab957612ab9615765565b60200260200101516001600160a01b03161415612b82577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb8988858481518110612b1257612b12615765565b60200260200101516040518363ffffffff1660e01b8152600401612b4b9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612b6557600080fd5b505af1158015612b79573d6000803e3d6000fd5b50505050612dd5565b846001600160a01b0316876001600160a01b03161480612c5457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d858381518110612bde57612bde615765565b60200260200101516040518263ffffffff1660e01b8152600401612c1191906001600160a01b0391909116815260200190565b602060405180830381865afa158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c529190615991565b155b612d205760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610b31565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e588868481518110612d6257612d62615765565b6020026020010151868581518110612d7c57612d7c615765565b60200260200101516040518463ffffffff1660e01b8152600401612da293929190615d00565b600060405180830381600087803b158015612dbc57600080fd5b505af1158015612dd0573d6000803e3d6000fd5b505050505b600101612a33565b506001600160a01b0386166000908152609f60205260408120805491829190612e0583615791565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612e6d826116c1565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612ebb9083908590615b8a565b60405180910390a198975050505050505050565b6000612ede6020830183614c8c565b6001600160a01b03161415612f785760405162461bcd60e51b815260206004820152605460248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a2063616e6e6f742073657420606561726e696e677352656365696064820152737665726020746f207a65726f206164647265737360601b608482015260a401610b31565b6213c680612f8c6060830160408401615d24565b63ffffffff1611156130415760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610b31565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff169061307d9060608401908401615d24565b63ffffffff1610156131135760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610b31565b6001600160a01b038216600090815260996020526040902081906131378282615d61565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611d2190849061584c565b606654600090600190811614156131945760405162461bcd60e51b8152600401610b31906157ac565b61319d856115da565b1561321a5760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2073746160448201527f6b657220697320616c7265616479206163746976656c792064656c65676174656064820152601960fa1b608482015260a401610b31565b61322384611a48565b6132a35760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a206f706560448201527f7261746f72206973206e6f74207265676973746572656420696e20456967656e6064820152642630bcb2b960d91b608482015260a401610b31565b6001600160a01b038085166000908152609960205260409020600101541680158015906132d95750336001600160a01b03821614155b80156132ee5750336001600160a01b03861614155b1561345b57428460200151101561336d5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610b31565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156134075760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610b31565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff19166001179055850151613448908890889085908890610a43565b905061345982828760000151614430565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a36000806134ba88611de6565b9150915060005b82518110156113e257613508888a8584815181106134e1576134e1615765565b60200260200101518585815181106134fb576134fb615765565b6020026020010151613bcb565b6001016134c1565b6001600160a01b03811661359e5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610b31565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061363e908490615ce9565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610fb093929190615d00565b6033546001600160a01b03163314611a7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b31565b8281146137645760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610b31565b8260005b818110156138fa57600086868381811061378457613784615765565b90506020020160208101906137999190614c8c565b6001600160a01b038116600090815260a160205260408120549192508686858181106137c7576137c7615765565b90506020020135905062034bc081111561388b5760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610b31565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806138f390615791565b9050613768565b505050505050565b6065546001600160a01b031615801561392357506001600160a01b03821615155b6139a55760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610b31565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261199882613510565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc0811115613b8a5760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610b31565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613c02908490615cd1565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610fb093929190615d00565b6000613c5461062987615dc4565b6000818152609e602052604090205490915060ff16613cd55760405162461bcd60e51b81526020600482015260436024820152600080516020615efc83398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610b31565b609d544390613cea60a0890160808a01615d24565b63ffffffff16613cfa9190615cd1565b1115613d825760405162461bcd60e51b815260206004820152605f6024820152600080516020615efc83398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610b31565b613d926060870160408801614c8c565b6001600160a01b0316336001600160a01b031614613e1f5760405162461bcd60e51b81526020600482015260506024820152600080516020615efc83398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610b31565b8115613ea157613e3260a0870187615803565b85149050613ea15760405162461bcd60e51b81526020600482015260426024820152600080516020615efc83398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610b31565b6000818152609e60205260409020805460ff1916905581156140065760005b613ecd60a0880188615803565b9050811015614000574360a16000613ee860a08b018b615803565b85818110613ef857613ef8615765565b9050602002016020810190613f0d9190614c8c565b6001600160a01b03168152602081019190915260400160002054613f3760a08a0160808b01615d24565b63ffffffff16613f479190615cd1565b1115613f655760405162461bcd60e51b8152600401610b3190615dd6565b613ff8613f756020890189614c8c565b33613f8360a08b018b615803565b85818110613f9357613f93615765565b9050602002016020810190613fa89190614c8c565b613fb560c08c018c615803565b86818110613fc557613fc5615765565b905060200201358a8a87818110613fde57613fde615765565b9050602002016020810190613ff39190614c8c565b6145ea565b600101613ec0565b506143f5565b336000908152609a60205260408120546001600160a01b0316905b61402e60a0890189615803565b90508110156143f2574360a1600061404960a08c018c615803565b8581811061405957614059615765565b905060200201602081019061406e9190614c8c565b6001600160a01b0316815260208101919091526040016000205461409860a08b0160808c01615d24565b63ffffffff166140a89190615cd1565b11156140c65760405162461bcd60e51b8152600401610b3190615dd6565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06140e860a08a018a615803565b838181106140f8576140f8615765565b905060200201602081019061410d9190614c8c565b6001600160a01b0316141561425d57600061412b60208a018a614c8c565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c8361416c60c08e018e615803565b8781811061417c5761417c615765565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af11580156141d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f49190615ba3565b6001600160a01b038084166000908152609a602052604090205491925016801561425557614255818461422a60a08f018f615803565b8881811061423a5761423a615765565b905060200201602081019061424f9190614c8c565b85613bcb565b5050506143ea565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea13389898581811061429f5761429f615765565b90506020020160208101906142b49190614c8c565b6142c160a08d018d615803565b868181106142d1576142d1615765565b90506020020160208101906142e69190614c8c565b6142f360c08e018e615803565b8781811061430357614303615765565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b15801561436357600080fd5b505af1158015614377573d6000803e3d6000fd5b505050506001600160a01b038216156143ea576143ea823361439c60a08c018c615803565b858181106143ac576143ac615765565b90506020020160208101906143c19190614c8c565b6143ce60c08d018d615803565b868181106143de576143de615765565b90506020020135613bcb565b600101614021565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b1561454a57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906144709086908690600401615e5e565b602060405180830381865afa15801561448d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b19190615ebb565b6001600160e01b031916146111235760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610b31565b826001600160a01b031661455e838361472a565b6001600160a01b0316146111235760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610b31565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156146955760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b13009061465e90889088908790600401615d00565b600060405180830381600087803b15801561467857600080fd5b505af115801561468c573d6000803e3d6000fd5b50505050614723565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b15801561470f57600080fd5b505af11580156113e2573d6000803e3d6000fd5b5050505050565b60008060006147398585614746565b91509150610a3b816147b6565b60008082516041141561477d5760208301516040840151606085015160001a61477187828585614971565b945094505050506147af565b8251604014156147a7576020830151604084015161479c868383614a5e565b9350935050506147af565b506000905060025b9250929050565b60008160048111156147ca576147ca615ee5565b14156147d35750565b60018160048111156147e7576147e7615ee5565b14156148355760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b31565b600281600481111561484957614849615ee5565b14156148975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b31565b60038160048111156148ab576148ab615ee5565b14156149045760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b31565b600481600481111561491857614918615ee5565b141561106e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610b31565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156149a85750600090506003614a55565b8460ff16601b141580156149c057508460ff16601c14155b156149d15750600090506004614a55565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614a25573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614a4e57600060019250925050614a55565b9150600090505b94509492505050565b6000806001600160ff1b03831681614a7b60ff86901c601b615cd1565b9050614a8987828885614971565b935093505050935093915050565b60008083601f840112614aa957600080fd5b5081356001600160401b03811115614ac057600080fd5b6020830191508360208260051b85010111156147af57600080fd5b60008060208385031215614aee57600080fd5b82356001600160401b03811115614b0457600080fd5b614b1085828601614a97565b90969095509350505050565b6001600160a01b038116811461106e57600080fd5b8035614b3c81614b1c565b919050565b600080600080600060a08688031215614b5957600080fd5b8535614b6481614b1c565b94506020860135614b7481614b1c565b93506040860135614b8481614b1c565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b81811015614bd457835183529284019291840191600101614bb8565b50909695505050505050565b600060608284031215614bf257600080fd5b50919050565b60008083601f840112614c0a57600080fd5b5081356001600160401b03811115614c2157600080fd5b6020830191508360208285010111156147af57600080fd5b600080600060808486031215614c4e57600080fd5b614c588585614be0565b925060608401356001600160401b03811115614c7357600080fd5b614c7f86828701614bf8565b9497909650939450505050565b600060208284031215614c9e57600080fd5b8135614ca981614b1c565b9392505050565b600080600060608486031215614cc557600080fd5b8335614cd081614b1c565b92506020840135614ce081614b1c565b929592945050506040919091013590565b600060208284031215614d0357600080fd5b5035919050565b60008060008060408587031215614d2057600080fd5b84356001600160401b0380821115614d3757600080fd5b614d4388838901614a97565b90965094506020870135915080821115614d5c57600080fd5b50614d6987828801614a97565b95989497509550505050565b60008060008060008060008060c0898b031215614d9157600080fd5b8835614d9c81614b1c565b97506020890135614dac81614b1c565b9650604089013595506060890135945060808901356001600160401b0380821115614dd657600080fd5b614de28c838d01614a97565b909650945060a08b0135915080821115614dfb57600080fd5b50614e088b828c01614a97565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614e3857600080fd5b88356001600160401b0380821115614e4f57600080fd5b614e5b8c838d01614a97565b909a50985060208b0135915080821115614e7457600080fd5b614e808c838d01614a97565b909850965060408b0135915080821115614e9957600080fd5b614ea58c838d01614a97565b909650945060608b0135915080821115614dfb57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614ef657614ef6614ebe565b60405290565b604080519081016001600160401b0381118282101715614ef657614ef6614ebe565b60405160c081016001600160401b0381118282101715614ef657614ef6614ebe565b604051601f8201601f191681016001600160401b0381118282101715614f6857614f68614ebe565b604052919050565b63ffffffff8116811461106e57600080fd5b8035614b3c81614f70565b60006001600160401b03821115614fa657614fa6614ebe565b5060051b60200190565b600082601f830112614fc157600080fd5b81356020614fd6614fd183614f8d565b614f40565b82815260059290921b84018101918181019086841115614ff557600080fd5b8286015b8481101561501957803561500c81614b1c565b8352918301918301614ff9565b509695505050505050565b600082601f83011261503557600080fd5b81356020615045614fd183614f8d565b82815260059290921b8401810191818101908684111561506457600080fd5b8286015b848110156150195780358352918301918301615068565b600060e0828403121561509157600080fd5b615099614ed4565b90506150a482614b31565b81526150b260208301614b31565b60208201526150c360408301614b31565b6040820152606082013560608201526150de60808301614f82565b608082015260a08201356001600160401b03808211156150fd57600080fd5b61510985838601614fb0565b60a084015260c084013591508082111561512257600080fd5b5061512f84828501615024565b60c08301525092915050565b60006020828403121561514d57600080fd5b81356001600160401b0381111561516357600080fd5b61516f8482850161507f565b949350505050565b60006020828403121561518957600080fd5b813560ff81168114614ca957600080fd5b6000604082840312156151ac57600080fd5b6151b4614efc565b905081356151c181614b1c565b815260208201356bffffffffffffffffffffffff811681146151e257600080fd5b602082015292915050565b6000602080838503121561520057600080fd5b82356001600160401b038082111561521757600080fd5b818501915085601f83011261522b57600080fd5b8135615239614fd182614f8d565b81815260059190911b8301840190848101908883111561525857600080fd5b8585015b83811015615332578035858111156152745760008081fd5b860160e0818c03601f190181131561528c5760008081fd5b615294614f1e565b89830135888111156152a65760008081fd5b6152b48e8c83870101614fb0565b825250604080840135898111156152cb5760008081fd5b6152d98f8d83880101615024565b8c8401525060606152eb818601614b31565b82840152608091506152ff8f83870161519a565b9083015261530f60c08501614f82565b9082015261531e838301614b31565b60a08201528552505091860191860161525c565b5098975050505050505050565b801515811461106e57600080fd5b60008060008060006080868803121561536557600080fd5b85356001600160401b038082111561537c57600080fd5b9087019060e0828a03121561539057600080fd5b909550602087013590808211156153a657600080fd5b506153b388828901614a97565b9095509350506040860135915060608601356153ce8161533f565b809150509295509295909350565b600080604083850312156153ef57600080fd5b82356153fa81614b1c565b9150602083013561540a81614b1c565b809150509250929050565b60006040828403121561542757600080fd5b61542f614efc565b905081356001600160401b038082111561544857600080fd5b818401915084601f83011261545c57600080fd5b813560208282111561547057615470614ebe565b615482601f8301601f19168201614f40565b9250818352868183860101111561549857600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a086880312156154d557600080fd5b85356154e081614b1c565b945060208601356154f081614b1c565b935060408601356001600160401b038082111561550c57600080fd5b61551889838a01615415565b9450606088013591508082111561552e57600080fd5b5061553b88828901615415565b95989497509295608001359392505050565b6000806040838503121561556057600080fd5b823561556b81614b1c565b915060208301356001600160401b0381111561558657600080fd5b61559285828601614fb0565b9150509250929050565b600081518084526020808501945080840160005b838110156155cc578151875295820195908201906001016155b0565b509495945050505050565b602081526000614ca9602083018461559c565b600080602083850312156155fd57600080fd5b82356001600160401b0381111561561357600080fd5b614b1085828601614bf8565b6000806040838503121561563257600080fd5b823561563d81614b1c565b946020939093013593505050565b6000806000806080858703121561566157600080fd5b843561566c81614b1c565b935060208501359250604085013561568381614b1c565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156155cc5781516001600160a01b0316875295820195908201906001016156a7565b6040815260006156df6040830185615693565b82810360208401526112a0818561559c565b60008060006060848603121561570657600080fd5b833561571181614b1c565b925060208401356001600160401b0381111561572c57600080fd5b61573886828701615415565b925050604084013590509250925092565b60006060828403121561575b57600080fd5b614ca98383614be0565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156157a5576157a561577b565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e198336030181126157f957600080fd5b9190910192915050565b6000808335601e1984360301811261581a57600080fd5b8301803591506001600160401b0382111561583457600080fd5b6020019150600581901b36038213156147af57600080fd5b60608101823561585b81614b1c565b6001600160a01b03908116835260208401359061587782614b1c565b166020830152604083013561588b81614f70565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000602082840312156158df57600080fd5b8151614ca981614b1c565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b6000602082840312156159a357600080fd5b8151614ca98161533f565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de198336030181126157f957600080fd5b600060208284031215615a1e57600080fd5b8135614ca98161533f565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a0850152615a8460e0850182615693565b905060c083015184820360c08601526112a0828261559c565b602081526000614ca96020830184615a29565b602081526000825160e06020840152615acd610100840182615693565b90506020840151601f19848303016040850152615aea828261559c565b915050604084015160018060a01b03808216606086015260608601519150808251166080860152506bffffffffffffffffffffffff60208201511660a0850152506080840151615b4260c085018263ffffffff169052565b5060a08401516001600160a01b03811660e0850152610a3b565b60008060408385031215615b6f57600080fd5b8251615b7a8161533f565b6020939093015192949293505050565b82815260406020820152600061516f6040830184615a29565b600060208284031215615bb557600080fd5b5051919050565b600082601f830112615bcd57600080fd5b81516020615bdd614fd183614f8d565b82815260059290921b84018101918181019086841115615bfc57600080fd5b8286015b848110156150195780518352918301918301615c00565b60008060408385031215615c2a57600080fd5b82516001600160401b0380821115615c4157600080fd5b818501915085601f830112615c5557600080fd5b81516020615c65614fd183614f8d565b82815260059290921b84018101918181019089841115615c8457600080fd5b948201945b83861015615cab578551615c9c81614b1c565b82529482019490820190615c89565b91880151919650909350505080821115615cc457600080fd5b5061559285828601615bbc565b60008219821115615ce457615ce461577b565b500190565b600082821015615cfb57615cfb61577b565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215615d3657600080fd5b8135614ca981614f70565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135615d6c81614b1c565b615d768183615d41565b50600181016020830135615d8981614b1c565b615d938183615d41565b506040830135615da281614f70565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b6000615dd0368361507f565b92915050565b6020808252606e90820152600080516020615efc83398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b81811015615e9257858101830151858201606001528201615e76565b81811115615ea4576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215615ecd57600080fd5b81516001600160e01b031981168114614ca957600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a2646970667358221220bcbba4065a75abbd97ed71aab418bc339c2a6eb768e7b17620bef87d64e458be64736f6c634300080c0033 diff --git a/pkg/bindings/DelegationManagerStorage/binding.go b/pkg/bindings/DelegationManagerStorage/binding.go new file mode 100644 index 000000000..d342ab6c8 --- /dev/null +++ b/pkg/bindings/DelegationManagerStorage/binding.go @@ -0,0 +1,3211 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package DelegationManagerStorage + +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 +) + +// IDelegationManagerOperatorDetails is an auto generated low-level Go binding around an user-defined struct. +type IDelegationManagerOperatorDetails struct { + EarningsReceiver common.Address + DelegationApprover common.Address + StakerOptOutWindowBlocks uint32 +} + +// IDelegationManagerQueuedWithdrawalParams is an auto generated low-level Go binding around an user-defined struct. +type IDelegationManagerQueuedWithdrawalParams struct { + Strategies []common.Address + Shares []*big.Int + Withdrawer common.Address +} + +// 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 +} + +// ISignatureUtilsSignatureWithExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithExpiry struct { + Signature []byte + Expiry *big.Int +} + +// IStrategyManagerDeprecatedStructQueuedWithdrawal is an auto generated low-level Go binding around an user-defined struct. +type IStrategyManagerDeprecatedStructQueuedWithdrawal struct { + Strategies []common.Address + Shares []*big.Int + Staker common.Address + WithdrawerAndNonce IStrategyManagerDeprecatedStructWithdrawerAndNonce + WithdrawalStartBlock uint32 + DelegatedAddress common.Address +} + +// IStrategyManagerDeprecatedStructWithdrawerAndNonce is an auto generated low-level Go binding around an user-defined struct. +type IStrategyManagerDeprecatedStructWithdrawerAndNonce struct { + Withdrawer common.Address + Nonce *big.Int +} + +// 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\":\"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\":\"earningsReceiver\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"migrateQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawalsToQueue\",\"type\":\"tuple[]\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_QueuedWithdrawal[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawerAndNonce\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_WithdrawerAndNonce\",\"components\":[{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"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\":\"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\":\"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\":\"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\":\"WithdrawalMigrated\",\"inputs\":[{\"name\":\"oldWithdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"newWithdrawalRoot\",\"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}]", +} + +// DelegationManagerStorageABI is the input ABI used to generate the binding from. +// Deprecated: Use DelegationManagerStorageMetaData.ABI instead. +var DelegationManagerStorageABI = DelegationManagerStorageMetaData.ABI + +// DelegationManagerStorage is an auto generated Go binding around an Ethereum contract. +type DelegationManagerStorage struct { + DelegationManagerStorageCaller // Read-only binding to the contract + DelegationManagerStorageTransactor // Write-only binding to the contract + DelegationManagerStorageFilterer // Log filterer for contract events +} + +// DelegationManagerStorageCaller is an auto generated read-only Go binding around an Ethereum contract. +type DelegationManagerStorageCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DelegationManagerStorageTransactor is an auto generated write-only Go binding around an Ethereum contract. +type DelegationManagerStorageTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DelegationManagerStorageFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type DelegationManagerStorageFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DelegationManagerStorageSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type DelegationManagerStorageSession struct { + Contract *DelegationManagerStorage // 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 +} + +// DelegationManagerStorageCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type DelegationManagerStorageCallerSession struct { + Contract *DelegationManagerStorageCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// DelegationManagerStorageTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type DelegationManagerStorageTransactorSession struct { + Contract *DelegationManagerStorageTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// DelegationManagerStorageRaw is an auto generated low-level Go binding around an Ethereum contract. +type DelegationManagerStorageRaw struct { + Contract *DelegationManagerStorage // Generic contract binding to access the raw methods on +} + +// DelegationManagerStorageCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type DelegationManagerStorageCallerRaw struct { + Contract *DelegationManagerStorageCaller // Generic read-only contract binding to access the raw methods on +} + +// DelegationManagerStorageTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type DelegationManagerStorageTransactorRaw struct { + Contract *DelegationManagerStorageTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewDelegationManagerStorage creates a new instance of DelegationManagerStorage, bound to a specific deployed contract. +func NewDelegationManagerStorage(address common.Address, backend bind.ContractBackend) (*DelegationManagerStorage, error) { + contract, err := bindDelegationManagerStorage(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &DelegationManagerStorage{DelegationManagerStorageCaller: DelegationManagerStorageCaller{contract: contract}, DelegationManagerStorageTransactor: DelegationManagerStorageTransactor{contract: contract}, DelegationManagerStorageFilterer: DelegationManagerStorageFilterer{contract: contract}}, nil +} + +// NewDelegationManagerStorageCaller creates a new read-only instance of DelegationManagerStorage, bound to a specific deployed contract. +func NewDelegationManagerStorageCaller(address common.Address, caller bind.ContractCaller) (*DelegationManagerStorageCaller, error) { + contract, err := bindDelegationManagerStorage(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &DelegationManagerStorageCaller{contract: contract}, nil +} + +// NewDelegationManagerStorageTransactor creates a new write-only instance of DelegationManagerStorage, bound to a specific deployed contract. +func NewDelegationManagerStorageTransactor(address common.Address, transactor bind.ContractTransactor) (*DelegationManagerStorageTransactor, error) { + contract, err := bindDelegationManagerStorage(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &DelegationManagerStorageTransactor{contract: contract}, nil +} + +// NewDelegationManagerStorageFilterer creates a new log filterer instance of DelegationManagerStorage, bound to a specific deployed contract. +func NewDelegationManagerStorageFilterer(address common.Address, filterer bind.ContractFilterer) (*DelegationManagerStorageFilterer, error) { + contract, err := bindDelegationManagerStorage(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &DelegationManagerStorageFilterer{contract: contract}, nil +} + +// bindDelegationManagerStorage binds a generic wrapper to an already deployed contract. +func bindDelegationManagerStorage(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := DelegationManagerStorageMetaData.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 (_DelegationManagerStorage *DelegationManagerStorageRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _DelegationManagerStorage.Contract.DelegationManagerStorageCaller.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 (_DelegationManagerStorage *DelegationManagerStorageRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.DelegationManagerStorageTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_DelegationManagerStorage *DelegationManagerStorageRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.DelegationManagerStorageTransactor.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 (_DelegationManagerStorage *DelegationManagerStorageCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _DelegationManagerStorage.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 (_DelegationManagerStorage *DelegationManagerStorageTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_DelegationManagerStorage *DelegationManagerStorageTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.contract.Transact(opts, method, params...) +} + +// DELEGATIONAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0x04a4f979. +// +// Solidity: function DELEGATION_APPROVAL_TYPEHASH() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) DELEGATIONAPPROVALTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "DELEGATION_APPROVAL_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DELEGATIONAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0x04a4f979. +// +// Solidity: function DELEGATION_APPROVAL_TYPEHASH() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageSession) DELEGATIONAPPROVALTYPEHASH() ([32]byte, error) { + return _DelegationManagerStorage.Contract.DELEGATIONAPPROVALTYPEHASH(&_DelegationManagerStorage.CallOpts) +} + +// DELEGATIONAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0x04a4f979. +// +// Solidity: function DELEGATION_APPROVAL_TYPEHASH() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) DELEGATIONAPPROVALTYPEHASH() ([32]byte, error) { + return _DelegationManagerStorage.Contract.DELEGATIONAPPROVALTYPEHASH(&_DelegationManagerStorage.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) DOMAINTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "DOMAIN_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageSession) DOMAINTYPEHASH() ([32]byte, error) { + return _DelegationManagerStorage.Contract.DOMAINTYPEHASH(&_DelegationManagerStorage.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) DOMAINTYPEHASH() ([32]byte, error) { + return _DelegationManagerStorage.Contract.DOMAINTYPEHASH(&_DelegationManagerStorage.CallOpts) +} + +// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. +// +// 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, "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 (_DelegationManagerStorage *DelegationManagerStorageSession) MAXWITHDRAWALDELAYBLOCKS() (*big.Int, error) { + return _DelegationManagerStorage.Contract.MAXWITHDRAWALDELAYBLOCKS(&_DelegationManagerStorage.CallOpts) +} + +// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. +// +// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) MAXWITHDRAWALDELAYBLOCKS() (*big.Int, error) { + return _DelegationManagerStorage.Contract.MAXWITHDRAWALDELAYBLOCKS(&_DelegationManagerStorage.CallOpts) +} + +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// +// 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, "STAKER_DELEGATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { + return _DelegationManagerStorage.Contract.STAKERDELEGATIONTYPEHASH(&_DelegationManagerStorage.CallOpts) +} + +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { + return _DelegationManagerStorage.Contract.STAKERDELEGATIONTYPEHASH(&_DelegationManagerStorage.CallOpts) +} + +// CalculateCurrentStakerDelegationDigestHash is a free data retrieval call binding the contract method 0x1bbce091. +// +// Solidity: function calculateCurrentStakerDelegationDigestHash(address staker, address operator, uint256 expiry) view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) CalculateCurrentStakerDelegationDigestHash(opts *bind.CallOpts, staker common.Address, operator common.Address, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "calculateCurrentStakerDelegationDigestHash", staker, operator, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateCurrentStakerDelegationDigestHash is a free data retrieval call binding the contract method 0x1bbce091. +// +// Solidity: function calculateCurrentStakerDelegationDigestHash(address staker, address operator, uint256 expiry) view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageSession) CalculateCurrentStakerDelegationDigestHash(staker common.Address, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _DelegationManagerStorage.Contract.CalculateCurrentStakerDelegationDigestHash(&_DelegationManagerStorage.CallOpts, staker, operator, expiry) +} + +// CalculateCurrentStakerDelegationDigestHash is a free data retrieval call binding the contract method 0x1bbce091. +// +// Solidity: function calculateCurrentStakerDelegationDigestHash(address staker, address operator, uint256 expiry) view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) CalculateCurrentStakerDelegationDigestHash(staker common.Address, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _DelegationManagerStorage.Contract.CalculateCurrentStakerDelegationDigestHash(&_DelegationManagerStorage.CallOpts, staker, operator, expiry) +} + +// CalculateDelegationApprovalDigestHash is a free data retrieval call binding the contract method 0x0b9f487a. +// +// Solidity: function calculateDelegationApprovalDigestHash(address staker, address operator, address _delegationApprover, bytes32 approverSalt, uint256 expiry) view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) CalculateDelegationApprovalDigestHash(opts *bind.CallOpts, staker common.Address, operator common.Address, _delegationApprover common.Address, approverSalt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "calculateDelegationApprovalDigestHash", staker, operator, _delegationApprover, approverSalt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateDelegationApprovalDigestHash is a free data retrieval call binding the contract method 0x0b9f487a. +// +// Solidity: function calculateDelegationApprovalDigestHash(address staker, address operator, address _delegationApprover, bytes32 approverSalt, uint256 expiry) view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageSession) CalculateDelegationApprovalDigestHash(staker common.Address, operator common.Address, _delegationApprover common.Address, approverSalt [32]byte, expiry *big.Int) ([32]byte, error) { + return _DelegationManagerStorage.Contract.CalculateDelegationApprovalDigestHash(&_DelegationManagerStorage.CallOpts, staker, operator, _delegationApprover, approverSalt, expiry) +} + +// CalculateDelegationApprovalDigestHash is a free data retrieval call binding the contract method 0x0b9f487a. +// +// Solidity: function calculateDelegationApprovalDigestHash(address staker, address operator, address _delegationApprover, bytes32 approverSalt, uint256 expiry) view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) CalculateDelegationApprovalDigestHash(staker common.Address, operator common.Address, _delegationApprover common.Address, approverSalt [32]byte, expiry *big.Int) ([32]byte, error) { + return _DelegationManagerStorage.Contract.CalculateDelegationApprovalDigestHash(&_DelegationManagerStorage.CallOpts, staker, operator, _delegationApprover, approverSalt, expiry) +} + +// CalculateStakerDelegationDigestHash is a free data retrieval call binding the contract method 0xc94b5111. +// +// Solidity: function calculateStakerDelegationDigestHash(address staker, uint256 _stakerNonce, address operator, uint256 expiry) view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) CalculateStakerDelegationDigestHash(opts *bind.CallOpts, staker common.Address, _stakerNonce *big.Int, operator common.Address, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "calculateStakerDelegationDigestHash", staker, _stakerNonce, operator, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateStakerDelegationDigestHash is a free data retrieval call binding the contract method 0xc94b5111. +// +// Solidity: function calculateStakerDelegationDigestHash(address staker, uint256 _stakerNonce, address operator, uint256 expiry) view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageSession) CalculateStakerDelegationDigestHash(staker common.Address, _stakerNonce *big.Int, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _DelegationManagerStorage.Contract.CalculateStakerDelegationDigestHash(&_DelegationManagerStorage.CallOpts, staker, _stakerNonce, operator, expiry) +} + +// CalculateStakerDelegationDigestHash is a free data retrieval call binding the contract method 0xc94b5111. +// +// Solidity: function calculateStakerDelegationDigestHash(address staker, uint256 _stakerNonce, address operator, uint256 expiry) view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) CalculateStakerDelegationDigestHash(staker common.Address, _stakerNonce *big.Int, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _DelegationManagerStorage.Contract.CalculateStakerDelegationDigestHash(&_DelegationManagerStorage.CallOpts, staker, _stakerNonce, operator, expiry) +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0x597b36da. +// +// Solidity: function calculateWithdrawalRoot((address,address,address,uint256,uint32,address[],uint256[]) withdrawal) pure returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) CalculateWithdrawalRoot(opts *bind.CallOpts, withdrawal IDelegationManagerWithdrawal) ([32]byte, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "calculateWithdrawalRoot", withdrawal) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0x597b36da. +// +// Solidity: function calculateWithdrawalRoot((address,address,address,uint256,uint32,address[],uint256[]) withdrawal) pure returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageSession) CalculateWithdrawalRoot(withdrawal IDelegationManagerWithdrawal) ([32]byte, error) { + return _DelegationManagerStorage.Contract.CalculateWithdrawalRoot(&_DelegationManagerStorage.CallOpts, withdrawal) +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0x597b36da. +// +// Solidity: function calculateWithdrawalRoot((address,address,address,uint256,uint32,address[],uint256[]) withdrawal) pure returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) CalculateWithdrawalRoot(withdrawal IDelegationManagerWithdrawal) ([32]byte, error) { + return _DelegationManagerStorage.Contract.CalculateWithdrawalRoot(&_DelegationManagerStorage.CallOpts, withdrawal) +} + +// CumulativeWithdrawalsQueued is a free data retrieval call binding the contract method 0xa1788484. +// +// Solidity: function cumulativeWithdrawalsQueued(address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) CumulativeWithdrawalsQueued(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "cumulativeWithdrawalsQueued", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CumulativeWithdrawalsQueued is a free data retrieval call binding the contract method 0xa1788484. +// +// Solidity: function cumulativeWithdrawalsQueued(address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageSession) CumulativeWithdrawalsQueued(arg0 common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.CumulativeWithdrawalsQueued(&_DelegationManagerStorage.CallOpts, arg0) +} + +// CumulativeWithdrawalsQueued is a free data retrieval call binding the contract method 0xa1788484. +// +// Solidity: function cumulativeWithdrawalsQueued(address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) CumulativeWithdrawalsQueued(arg0 common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.CumulativeWithdrawalsQueued(&_DelegationManagerStorage.CallOpts, arg0) +} + +// DelegatedTo is a free data retrieval call binding the contract method 0x65da1264. +// +// Solidity: function delegatedTo(address ) view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) DelegatedTo(opts *bind.CallOpts, arg0 common.Address) (common.Address, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "delegatedTo", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DelegatedTo is a free data retrieval call binding the contract method 0x65da1264. +// +// Solidity: function delegatedTo(address ) view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageSession) DelegatedTo(arg0 common.Address) (common.Address, error) { + return _DelegationManagerStorage.Contract.DelegatedTo(&_DelegationManagerStorage.CallOpts, arg0) +} + +// DelegatedTo is a free data retrieval call binding the contract method 0x65da1264. +// +// Solidity: function delegatedTo(address ) view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) DelegatedTo(arg0 common.Address) (common.Address, error) { + return _DelegationManagerStorage.Contract.DelegatedTo(&_DelegationManagerStorage.CallOpts, arg0) +} + +// DelegationApprover is a free data retrieval call binding the contract method 0x3cdeb5e0. +// +// Solidity: function delegationApprover(address operator) view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) DelegationApprover(opts *bind.CallOpts, operator common.Address) (common.Address, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "delegationApprover", operator) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DelegationApprover is a free data retrieval call binding the contract method 0x3cdeb5e0. +// +// Solidity: function delegationApprover(address operator) view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageSession) DelegationApprover(operator common.Address) (common.Address, error) { + return _DelegationManagerStorage.Contract.DelegationApprover(&_DelegationManagerStorage.CallOpts, operator) +} + +// DelegationApprover is a free data retrieval call binding the contract method 0x3cdeb5e0. +// +// Solidity: function delegationApprover(address operator) view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) DelegationApprover(operator common.Address) (common.Address, error) { + return _DelegationManagerStorage.Contract.DelegationApprover(&_DelegationManagerStorage.CallOpts, operator) +} + +// DelegationApproverSaltIsSpent is a free data retrieval call binding the contract method 0xbb45fef2. +// +// Solidity: function delegationApproverSaltIsSpent(address , bytes32 ) view returns(bool) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) DelegationApproverSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "delegationApproverSaltIsSpent", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// DelegationApproverSaltIsSpent is a free data retrieval call binding the contract method 0xbb45fef2. +// +// Solidity: function delegationApproverSaltIsSpent(address , bytes32 ) view returns(bool) +func (_DelegationManagerStorage *DelegationManagerStorageSession) DelegationApproverSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _DelegationManagerStorage.Contract.DelegationApproverSaltIsSpent(&_DelegationManagerStorage.CallOpts, arg0, arg1) +} + +// DelegationApproverSaltIsSpent is a free data retrieval call binding the contract method 0xbb45fef2. +// +// Solidity: function delegationApproverSaltIsSpent(address , bytes32 ) view returns(bool) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) DelegationApproverSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _DelegationManagerStorage.Contract.DelegationApproverSaltIsSpent(&_DelegationManagerStorage.CallOpts, arg0, arg1) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _DelegationManagerStorage.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 + +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageSession) DomainSeparator() ([32]byte, error) { + return _DelegationManagerStorage.Contract.DomainSeparator(&_DelegationManagerStorage.CallOpts) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) DomainSeparator() ([32]byte, error) { + return _DelegationManagerStorage.Contract.DomainSeparator(&_DelegationManagerStorage.CallOpts) +} + +// EarningsReceiver is a free data retrieval call binding the contract method 0x5f966f14. +// +// Solidity: function earningsReceiver(address operator) view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) EarningsReceiver(opts *bind.CallOpts, operator common.Address) (common.Address, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "earningsReceiver", operator) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EarningsReceiver is a free data retrieval call binding the contract method 0x5f966f14. +// +// Solidity: function earningsReceiver(address operator) view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageSession) EarningsReceiver(operator common.Address) (common.Address, error) { + return _DelegationManagerStorage.Contract.EarningsReceiver(&_DelegationManagerStorage.CallOpts, operator) +} + +// EarningsReceiver is a free data retrieval call binding the contract method 0x5f966f14. +// +// Solidity: function earningsReceiver(address operator) view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) EarningsReceiver(operator common.Address) (common.Address, error) { + return _DelegationManagerStorage.Contract.EarningsReceiver(&_DelegationManagerStorage.CallOpts, operator) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) EigenPodManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DelegationManagerStorage.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 (_DelegationManagerStorage *DelegationManagerStorageSession) EigenPodManager() (common.Address, error) { + return _DelegationManagerStorage.Contract.EigenPodManager(&_DelegationManagerStorage.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) EigenPodManager() (common.Address, error) { + 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) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) GetWithdrawalDelay(opts *bind.CallOpts, strategies []common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "getWithdrawalDelay", strategies) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. +// +// Solidity: function getWithdrawalDelay(address[] strategies) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageSession) GetWithdrawalDelay(strategies []common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.GetWithdrawalDelay(&_DelegationManagerStorage.CallOpts, strategies) +} + +// GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. +// +// Solidity: function getWithdrawalDelay(address[] strategies) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) GetWithdrawalDelay(strategies []common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.GetWithdrawalDelay(&_DelegationManagerStorage.CallOpts, strategies) +} + +// IsDelegated is a free data retrieval call binding the contract method 0x3e28391d. +// +// Solidity: function isDelegated(address staker) view returns(bool) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) IsDelegated(opts *bind.CallOpts, staker common.Address) (bool, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "isDelegated", staker) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsDelegated is a free data retrieval call binding the contract method 0x3e28391d. +// +// Solidity: function isDelegated(address staker) view returns(bool) +func (_DelegationManagerStorage *DelegationManagerStorageSession) IsDelegated(staker common.Address) (bool, error) { + return _DelegationManagerStorage.Contract.IsDelegated(&_DelegationManagerStorage.CallOpts, staker) +} + +// IsDelegated is a free data retrieval call binding the contract method 0x3e28391d. +// +// Solidity: function isDelegated(address staker) view returns(bool) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) IsDelegated(staker common.Address) (bool, error) { + return _DelegationManagerStorage.Contract.IsDelegated(&_DelegationManagerStorage.CallOpts, staker) +} + +// IsOperator is a free data retrieval call binding the contract method 0x6d70f7ae. +// +// Solidity: function isOperator(address operator) view returns(bool) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) IsOperator(opts *bind.CallOpts, operator common.Address) (bool, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "isOperator", operator) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsOperator is a free data retrieval call binding the contract method 0x6d70f7ae. +// +// Solidity: function isOperator(address operator) view returns(bool) +func (_DelegationManagerStorage *DelegationManagerStorageSession) IsOperator(operator common.Address) (bool, error) { + return _DelegationManagerStorage.Contract.IsOperator(&_DelegationManagerStorage.CallOpts, operator) +} + +// IsOperator is a free data retrieval call binding the contract method 0x6d70f7ae. +// +// Solidity: function isOperator(address operator) view returns(bool) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) IsOperator(operator common.Address) (bool, error) { + return _DelegationManagerStorage.Contract.IsOperator(&_DelegationManagerStorage.CallOpts, operator) +} + +// MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. +// +// Solidity: function minWithdrawalDelayBlocks() view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) MinWithdrawalDelayBlocks(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "minWithdrawalDelayBlocks") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. +// +// Solidity: function minWithdrawalDelayBlocks() view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageSession) MinWithdrawalDelayBlocks() (*big.Int, error) { + return _DelegationManagerStorage.Contract.MinWithdrawalDelayBlocks(&_DelegationManagerStorage.CallOpts) +} + +// MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. +// +// Solidity: function minWithdrawalDelayBlocks() view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) MinWithdrawalDelayBlocks() (*big.Int, error) { + return _DelegationManagerStorage.Contract.MinWithdrawalDelayBlocks(&_DelegationManagerStorage.CallOpts) +} + +// OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. +// +// Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) OperatorDetails(opts *bind.CallOpts, operator common.Address) (IDelegationManagerOperatorDetails, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "operatorDetails", operator) + + if err != nil { + return *new(IDelegationManagerOperatorDetails), err + } + + out0 := *abi.ConvertType(out[0], new(IDelegationManagerOperatorDetails)).(*IDelegationManagerOperatorDetails) + + return out0, err + +} + +// OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. +// +// Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) +func (_DelegationManagerStorage *DelegationManagerStorageSession) OperatorDetails(operator common.Address) (IDelegationManagerOperatorDetails, error) { + return _DelegationManagerStorage.Contract.OperatorDetails(&_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)) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) OperatorDetails(operator common.Address) (IDelegationManagerOperatorDetails, error) { + return _DelegationManagerStorage.Contract.OperatorDetails(&_DelegationManagerStorage.CallOpts, operator) +} + +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// +// 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, "operatorShares", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// +// 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) +} + +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// +// 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. +// +// Solidity: function pendingWithdrawals(bytes32 ) view returns(bool) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) PendingWithdrawals(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "pendingWithdrawals", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// PendingWithdrawals is a free data retrieval call binding the contract method 0xb7f06ebe. +// +// Solidity: function pendingWithdrawals(bytes32 ) view returns(bool) +func (_DelegationManagerStorage *DelegationManagerStorageSession) PendingWithdrawals(arg0 [32]byte) (bool, error) { + return _DelegationManagerStorage.Contract.PendingWithdrawals(&_DelegationManagerStorage.CallOpts, arg0) +} + +// PendingWithdrawals is a free data retrieval call binding the contract method 0xb7f06ebe. +// +// Solidity: function pendingWithdrawals(bytes32 ) view returns(bool) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) PendingWithdrawals(arg0 [32]byte) (bool, error) { + return _DelegationManagerStorage.Contract.PendingWithdrawals(&_DelegationManagerStorage.CallOpts, arg0) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) Slasher(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "slasher") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageSession) Slasher() (common.Address, error) { + return _DelegationManagerStorage.Contract.Slasher(&_DelegationManagerStorage.CallOpts) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) Slasher() (common.Address, error) { + return _DelegationManagerStorage.Contract.Slasher(&_DelegationManagerStorage.CallOpts) +} + +// StakerNonce is a free data retrieval call binding the contract method 0x29c77d4f. +// +// Solidity: function stakerNonce(address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) StakerNonce(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "stakerNonce", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerNonce is a free data retrieval call binding the contract method 0x29c77d4f. +// +// Solidity: function stakerNonce(address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageSession) StakerNonce(arg0 common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.StakerNonce(&_DelegationManagerStorage.CallOpts, arg0) +} + +// StakerNonce is a free data retrieval call binding the contract method 0x29c77d4f. +// +// Solidity: function stakerNonce(address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) StakerNonce(arg0 common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.StakerNonce(&_DelegationManagerStorage.CallOpts, arg0) +} + +// StakerOptOutWindowBlocks is a free data retrieval call binding the contract method 0x16928365. +// +// Solidity: function stakerOptOutWindowBlocks(address operator) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) StakerOptOutWindowBlocks(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "stakerOptOutWindowBlocks", operator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerOptOutWindowBlocks is a free data retrieval call binding the contract method 0x16928365. +// +// Solidity: function stakerOptOutWindowBlocks(address operator) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageSession) StakerOptOutWindowBlocks(operator common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.StakerOptOutWindowBlocks(&_DelegationManagerStorage.CallOpts, operator) +} + +// StakerOptOutWindowBlocks is a free data retrieval call binding the contract method 0x16928365. +// +// Solidity: function stakerOptOutWindowBlocks(address operator) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) StakerOptOutWindowBlocks(operator common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.StakerOptOutWindowBlocks(&_DelegationManagerStorage.CallOpts, operator) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "strategyManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageSession) StrategyManager() (common.Address, error) { + return _DelegationManagerStorage.Contract.StrategyManager(&_DelegationManagerStorage.CallOpts) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) StrategyManager() (common.Address, error) { + return _DelegationManagerStorage.Contract.StrategyManager(&_DelegationManagerStorage.CallOpts) +} + +// StrategyWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc488375a. +// +// Solidity: function strategyWithdrawalDelayBlocks(address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) StrategyWithdrawalDelayBlocks(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "strategyWithdrawalDelayBlocks", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StrategyWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc488375a. +// +// Solidity: function strategyWithdrawalDelayBlocks(address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageSession) StrategyWithdrawalDelayBlocks(arg0 common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.StrategyWithdrawalDelayBlocks(&_DelegationManagerStorage.CallOpts, arg0) +} + +// StrategyWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc488375a. +// +// Solidity: function strategyWithdrawalDelayBlocks(address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) StrategyWithdrawalDelayBlocks(arg0 common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.StrategyWithdrawalDelayBlocks(&_DelegationManagerStorage.CallOpts, arg0) +} + +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// +// 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 0x60d7faed. +// +// 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 0x60d7faed. +// +// 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) +} + +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// +// 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 0x33404396. +// +// 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 0x33404396. +// +// 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 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 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 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. +// +// Solidity: function delegateTo(address operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) DelegateTo(opts *bind.TransactOpts, operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "delegateTo", operator, approverSignatureAndExpiry, approverSalt) +} + +// DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. +// +// Solidity: function delegateTo(address operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) DelegateTo(operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.DelegateTo(&_DelegationManagerStorage.TransactOpts, operator, approverSignatureAndExpiry, approverSalt) +} + +// DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. +// +// Solidity: function delegateTo(address operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) DelegateTo(operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.DelegateTo(&_DelegationManagerStorage.TransactOpts, operator, approverSignatureAndExpiry, approverSalt) +} + +// DelegateToBySignature is a paid mutator transaction binding the contract method 0x7f548071. +// +// Solidity: function delegateToBySignature(address staker, address operator, (bytes,uint256) stakerSignatureAndExpiry, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) DelegateToBySignature(opts *bind.TransactOpts, staker common.Address, operator common.Address, stakerSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "delegateToBySignature", staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) +} + +// DelegateToBySignature is a paid mutator transaction binding the contract method 0x7f548071. +// +// Solidity: function delegateToBySignature(address staker, address operator, (bytes,uint256) stakerSignatureAndExpiry, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) DelegateToBySignature(staker common.Address, operator common.Address, stakerSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.DelegateToBySignature(&_DelegationManagerStorage.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) +} + +// DelegateToBySignature is a paid mutator transaction binding the contract method 0x7f548071. +// +// Solidity: function delegateToBySignature(address staker, address operator, (bytes,uint256) stakerSignatureAndExpiry, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) DelegateToBySignature(staker common.Address, operator common.Address, stakerSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.DelegateToBySignature(&_DelegationManagerStorage.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) +} + +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// +// 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) +} + +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// +// 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) +} + +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// +// 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) +} + +// MigrateQueuedWithdrawals is a paid mutator transaction binding the contract method 0x5cfe8d2c. +// +// Solidity: function migrateQueuedWithdrawals((address[],uint256[],address,(address,uint96),uint32,address)[] withdrawalsToQueue) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) MigrateQueuedWithdrawals(opts *bind.TransactOpts, withdrawalsToQueue []IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "migrateQueuedWithdrawals", withdrawalsToQueue) +} + +// MigrateQueuedWithdrawals is a paid mutator transaction binding the contract method 0x5cfe8d2c. +// +// Solidity: function migrateQueuedWithdrawals((address[],uint256[],address,(address,uint96),uint32,address)[] withdrawalsToQueue) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) MigrateQueuedWithdrawals(withdrawalsToQueue []IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.MigrateQueuedWithdrawals(&_DelegationManagerStorage.TransactOpts, withdrawalsToQueue) +} + +// MigrateQueuedWithdrawals is a paid mutator transaction binding the contract method 0x5cfe8d2c. +// +// Solidity: function migrateQueuedWithdrawals((address[],uint256[],address,(address,uint96),uint32,address)[] withdrawalsToQueue) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) MigrateQueuedWithdrawals(withdrawalsToQueue []IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.MigrateQueuedWithdrawals(&_DelegationManagerStorage.TransactOpts, withdrawalsToQueue) +} + +// ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. +// +// Solidity: function modifyOperatorDetails((address,address,uint32) newOperatorDetails) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) ModifyOperatorDetails(opts *bind.TransactOpts, newOperatorDetails IDelegationManagerOperatorDetails) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "modifyOperatorDetails", newOperatorDetails) +} + +// ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. +// +// Solidity: function modifyOperatorDetails((address,address,uint32) newOperatorDetails) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) ModifyOperatorDetails(newOperatorDetails IDelegationManagerOperatorDetails) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.ModifyOperatorDetails(&_DelegationManagerStorage.TransactOpts, newOperatorDetails) +} + +// ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. +// +// Solidity: function modifyOperatorDetails((address,address,uint32) newOperatorDetails) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) ModifyOperatorDetails(newOperatorDetails IDelegationManagerOperatorDetails) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.ModifyOperatorDetails(&_DelegationManagerStorage.TransactOpts, newOperatorDetails) +} + +// QueueWithdrawals is a paid mutator transaction binding the contract method 0x0dd8dd02. +// +// Solidity: function queueWithdrawals((address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes32[]) +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) QueueWithdrawals(opts *bind.TransactOpts, queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "queueWithdrawals", queuedWithdrawalParams) +} + +// QueueWithdrawals is a paid mutator transaction binding the contract method 0x0dd8dd02. +// +// Solidity: function queueWithdrawals((address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes32[]) +func (_DelegationManagerStorage *DelegationManagerStorageSession) QueueWithdrawals(queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.QueueWithdrawals(&_DelegationManagerStorage.TransactOpts, queuedWithdrawalParams) +} + +// QueueWithdrawals is a paid mutator transaction binding the contract method 0x0dd8dd02. +// +// Solidity: function queueWithdrawals((address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes32[]) +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) QueueWithdrawals(queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.QueueWithdrawals(&_DelegationManagerStorage.TransactOpts, queuedWithdrawalParams) +} + +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// +// 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 0x0f589e59. +// +// 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 0x0f589e59. +// +// 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. +// +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoot) +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) Undelegate(opts *bind.TransactOpts, staker common.Address) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "undelegate", staker) +} + +// Undelegate is a paid mutator transaction binding the contract method 0xda8be864. +// +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoot) +func (_DelegationManagerStorage *DelegationManagerStorageSession) Undelegate(staker common.Address) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.Undelegate(&_DelegationManagerStorage.TransactOpts, staker) +} + +// Undelegate is a paid mutator transaction binding the contract method 0xda8be864. +// +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoot) +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) Undelegate(staker common.Address) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.Undelegate(&_DelegationManagerStorage.TransactOpts, staker) +} + +// UpdateOperatorMetadataURI is a paid mutator transaction binding the contract method 0x99be81c8. +// +// Solidity: function updateOperatorMetadataURI(string metadataURI) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) UpdateOperatorMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "updateOperatorMetadataURI", metadataURI) +} + +// UpdateOperatorMetadataURI is a paid mutator transaction binding the contract method 0x99be81c8. +// +// Solidity: function updateOperatorMetadataURI(string metadataURI) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) UpdateOperatorMetadataURI(metadataURI string) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.UpdateOperatorMetadataURI(&_DelegationManagerStorage.TransactOpts, metadataURI) +} + +// UpdateOperatorMetadataURI is a paid mutator transaction binding the contract method 0x99be81c8. +// +// Solidity: function updateOperatorMetadataURI(string metadataURI) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) UpdateOperatorMetadataURI(metadataURI string) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.UpdateOperatorMetadataURI(&_DelegationManagerStorage.TransactOpts, metadataURI) +} + +// DelegationManagerStorageMinWithdrawalDelayBlocksSetIterator is returned from FilterMinWithdrawalDelayBlocksSet and is used to iterate over the raw logs and unpacked data for MinWithdrawalDelayBlocksSet events raised by the DelegationManagerStorage contract. +type DelegationManagerStorageMinWithdrawalDelayBlocksSetIterator struct { + Event *DelegationManagerStorageMinWithdrawalDelayBlocksSet // 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 *DelegationManagerStorageMinWithdrawalDelayBlocksSetIterator) 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(DelegationManagerStorageMinWithdrawalDelayBlocksSet) + 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(DelegationManagerStorageMinWithdrawalDelayBlocksSet) + 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 *DelegationManagerStorageMinWithdrawalDelayBlocksSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStorageMinWithdrawalDelayBlocksSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStorageMinWithdrawalDelayBlocksSet represents a MinWithdrawalDelayBlocksSet event raised by the DelegationManagerStorage contract. +type DelegationManagerStorageMinWithdrawalDelayBlocksSet struct { + PreviousValue *big.Int + NewValue *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMinWithdrawalDelayBlocksSet is a free log retrieval operation binding the contract event 0xafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69. +// +// Solidity: event MinWithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterMinWithdrawalDelayBlocksSet(opts *bind.FilterOpts) (*DelegationManagerStorageMinWithdrawalDelayBlocksSetIterator, error) { + + logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "MinWithdrawalDelayBlocksSet") + if err != nil { + return nil, err + } + return &DelegationManagerStorageMinWithdrawalDelayBlocksSetIterator{contract: _DelegationManagerStorage.contract, event: "MinWithdrawalDelayBlocksSet", logs: logs, sub: sub}, nil +} + +// WatchMinWithdrawalDelayBlocksSet is a free log subscription operation binding the contract event 0xafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69. +// +// Solidity: event MinWithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchMinWithdrawalDelayBlocksSet(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageMinWithdrawalDelayBlocksSet) (event.Subscription, error) { + + logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "MinWithdrawalDelayBlocksSet") + 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(DelegationManagerStorageMinWithdrawalDelayBlocksSet) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "MinWithdrawalDelayBlocksSet", 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 +} + +// ParseMinWithdrawalDelayBlocksSet is a log parse operation binding the contract event 0xafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69. +// +// Solidity: event MinWithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseMinWithdrawalDelayBlocksSet(log types.Log) (*DelegationManagerStorageMinWithdrawalDelayBlocksSet, error) { + event := new(DelegationManagerStorageMinWithdrawalDelayBlocksSet) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "MinWithdrawalDelayBlocksSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStorageOperatorDetailsModifiedIterator is returned from FilterOperatorDetailsModified and is used to iterate over the raw logs and unpacked data for OperatorDetailsModified events raised by the DelegationManagerStorage contract. +type DelegationManagerStorageOperatorDetailsModifiedIterator struct { + Event *DelegationManagerStorageOperatorDetailsModified // 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 *DelegationManagerStorageOperatorDetailsModifiedIterator) 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(DelegationManagerStorageOperatorDetailsModified) + 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(DelegationManagerStorageOperatorDetailsModified) + 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 *DelegationManagerStorageOperatorDetailsModifiedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStorageOperatorDetailsModifiedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStorageOperatorDetailsModified represents a OperatorDetailsModified event raised by the DelegationManagerStorage contract. +type DelegationManagerStorageOperatorDetailsModified struct { + Operator common.Address + NewOperatorDetails IDelegationManagerOperatorDetails + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorDetailsModified is a free log retrieval operation binding the contract event 0xfebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac. +// +// Solidity: event OperatorDetailsModified(address indexed operator, (address,address,uint32) newOperatorDetails) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterOperatorDetailsModified(opts *bind.FilterOpts, operator []common.Address) (*DelegationManagerStorageOperatorDetailsModifiedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "OperatorDetailsModified", operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerStorageOperatorDetailsModifiedIterator{contract: _DelegationManagerStorage.contract, event: "OperatorDetailsModified", logs: logs, sub: sub}, nil +} + +// WatchOperatorDetailsModified is a free log subscription operation binding the contract event 0xfebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac. +// +// Solidity: event OperatorDetailsModified(address indexed operator, (address,address,uint32) newOperatorDetails) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchOperatorDetailsModified(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageOperatorDetailsModified, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "OperatorDetailsModified", 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(DelegationManagerStorageOperatorDetailsModified) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "OperatorDetailsModified", 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 +} + +// ParseOperatorDetailsModified is a log parse operation binding the contract event 0xfebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac. +// +// Solidity: event OperatorDetailsModified(address indexed operator, (address,address,uint32) newOperatorDetails) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseOperatorDetailsModified(log types.Log) (*DelegationManagerStorageOperatorDetailsModified, error) { + event := new(DelegationManagerStorageOperatorDetailsModified) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "OperatorDetailsModified", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStorageOperatorMetadataURIUpdatedIterator is returned from FilterOperatorMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for OperatorMetadataURIUpdated events raised by the DelegationManagerStorage contract. +type DelegationManagerStorageOperatorMetadataURIUpdatedIterator struct { + Event *DelegationManagerStorageOperatorMetadataURIUpdated // 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 *DelegationManagerStorageOperatorMetadataURIUpdatedIterator) 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(DelegationManagerStorageOperatorMetadataURIUpdated) + 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(DelegationManagerStorageOperatorMetadataURIUpdated) + 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 *DelegationManagerStorageOperatorMetadataURIUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStorageOperatorMetadataURIUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStorageOperatorMetadataURIUpdated represents a OperatorMetadataURIUpdated event raised by the DelegationManagerStorage contract. +type DelegationManagerStorageOperatorMetadataURIUpdated struct { + Operator common.Address + MetadataURI string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorMetadataURIUpdated is a free log retrieval operation binding the contract event 0x02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090. +// +// Solidity: event OperatorMetadataURIUpdated(address indexed operator, string metadataURI) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterOperatorMetadataURIUpdated(opts *bind.FilterOpts, operator []common.Address) (*DelegationManagerStorageOperatorMetadataURIUpdatedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "OperatorMetadataURIUpdated", operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerStorageOperatorMetadataURIUpdatedIterator{contract: _DelegationManagerStorage.contract, event: "OperatorMetadataURIUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorMetadataURIUpdated is a free log subscription operation binding the contract event 0x02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090. +// +// Solidity: event OperatorMetadataURIUpdated(address indexed operator, string metadataURI) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchOperatorMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageOperatorMetadataURIUpdated, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "OperatorMetadataURIUpdated", 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(DelegationManagerStorageOperatorMetadataURIUpdated) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "OperatorMetadataURIUpdated", 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 +} + +// ParseOperatorMetadataURIUpdated is a log parse operation binding the contract event 0x02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090. +// +// Solidity: event OperatorMetadataURIUpdated(address indexed operator, string metadataURI) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseOperatorMetadataURIUpdated(log types.Log) (*DelegationManagerStorageOperatorMetadataURIUpdated, error) { + event := new(DelegationManagerStorageOperatorMetadataURIUpdated) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "OperatorMetadataURIUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStorageOperatorRegisteredIterator is returned from FilterOperatorRegistered and is used to iterate over the raw logs and unpacked data for OperatorRegistered events raised by the DelegationManagerStorage contract. +type DelegationManagerStorageOperatorRegisteredIterator struct { + Event *DelegationManagerStorageOperatorRegistered // 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 *DelegationManagerStorageOperatorRegisteredIterator) 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(DelegationManagerStorageOperatorRegistered) + 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(DelegationManagerStorageOperatorRegistered) + 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 *DelegationManagerStorageOperatorRegisteredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStorageOperatorRegisteredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStorageOperatorRegistered represents a OperatorRegistered event raised by the DelegationManagerStorage contract. +type DelegationManagerStorageOperatorRegistered struct { + Operator common.Address + OperatorDetails IDelegationManagerOperatorDetails + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorRegistered is a free log retrieval operation binding the contract event 0x8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e2. +// +// Solidity: event OperatorRegistered(address indexed operator, (address,address,uint32) operatorDetails) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterOperatorRegistered(opts *bind.FilterOpts, operator []common.Address) (*DelegationManagerStorageOperatorRegisteredIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "OperatorRegistered", operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerStorageOperatorRegisteredIterator{contract: _DelegationManagerStorage.contract, event: "OperatorRegistered", logs: logs, sub: sub}, nil +} + +// WatchOperatorRegistered is a free log subscription operation binding the contract event 0x8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e2. +// +// Solidity: event OperatorRegistered(address indexed operator, (address,address,uint32) operatorDetails) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchOperatorRegistered(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageOperatorRegistered, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "OperatorRegistered", 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(DelegationManagerStorageOperatorRegistered) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "OperatorRegistered", 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 +} + +// ParseOperatorRegistered is a log parse operation binding the contract event 0x8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e2. +// +// Solidity: event OperatorRegistered(address indexed operator, (address,address,uint32) operatorDetails) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseOperatorRegistered(log types.Log) (*DelegationManagerStorageOperatorRegistered, error) { + event := new(DelegationManagerStorageOperatorRegistered) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "OperatorRegistered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStorageOperatorSharesDecreasedIterator is returned from FilterOperatorSharesDecreased and is used to iterate over the raw logs and unpacked data for OperatorSharesDecreased events raised by the DelegationManagerStorage contract. +type DelegationManagerStorageOperatorSharesDecreasedIterator struct { + Event *DelegationManagerStorageOperatorSharesDecreased // 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 *DelegationManagerStorageOperatorSharesDecreasedIterator) 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(DelegationManagerStorageOperatorSharesDecreased) + 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(DelegationManagerStorageOperatorSharesDecreased) + 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 *DelegationManagerStorageOperatorSharesDecreasedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStorageOperatorSharesDecreasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStorageOperatorSharesDecreased represents a OperatorSharesDecreased event raised by the DelegationManagerStorage contract. +type DelegationManagerStorageOperatorSharesDecreased struct { + Operator common.Address + Staker common.Address + Strategy common.Address + Shares *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSharesDecreased is a free log retrieval operation binding the contract event 0x6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd. +// +// Solidity: event OperatorSharesDecreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterOperatorSharesDecreased(opts *bind.FilterOpts, operator []common.Address) (*DelegationManagerStorageOperatorSharesDecreasedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "OperatorSharesDecreased", operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerStorageOperatorSharesDecreasedIterator{contract: _DelegationManagerStorage.contract, event: "OperatorSharesDecreased", logs: logs, sub: sub}, nil +} + +// WatchOperatorSharesDecreased is a free log subscription operation binding the contract event 0x6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd. +// +// Solidity: event OperatorSharesDecreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchOperatorSharesDecreased(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageOperatorSharesDecreased, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "OperatorSharesDecreased", 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(DelegationManagerStorageOperatorSharesDecreased) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "OperatorSharesDecreased", 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 +} + +// ParseOperatorSharesDecreased is a log parse operation binding the contract event 0x6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd. +// +// Solidity: event OperatorSharesDecreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseOperatorSharesDecreased(log types.Log) (*DelegationManagerStorageOperatorSharesDecreased, error) { + event := new(DelegationManagerStorageOperatorSharesDecreased) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "OperatorSharesDecreased", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStorageOperatorSharesIncreasedIterator is returned from FilterOperatorSharesIncreased and is used to iterate over the raw logs and unpacked data for OperatorSharesIncreased events raised by the DelegationManagerStorage contract. +type DelegationManagerStorageOperatorSharesIncreasedIterator struct { + Event *DelegationManagerStorageOperatorSharesIncreased // 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 *DelegationManagerStorageOperatorSharesIncreasedIterator) 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(DelegationManagerStorageOperatorSharesIncreased) + 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(DelegationManagerStorageOperatorSharesIncreased) + 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 *DelegationManagerStorageOperatorSharesIncreasedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStorageOperatorSharesIncreasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStorageOperatorSharesIncreased represents a OperatorSharesIncreased event raised by the DelegationManagerStorage contract. +type DelegationManagerStorageOperatorSharesIncreased struct { + Operator common.Address + Staker common.Address + Strategy common.Address + Shares *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSharesIncreased is a free log retrieval operation binding the contract event 0x1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c. +// +// Solidity: event OperatorSharesIncreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterOperatorSharesIncreased(opts *bind.FilterOpts, operator []common.Address) (*DelegationManagerStorageOperatorSharesIncreasedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "OperatorSharesIncreased", operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerStorageOperatorSharesIncreasedIterator{contract: _DelegationManagerStorage.contract, event: "OperatorSharesIncreased", logs: logs, sub: sub}, nil +} + +// WatchOperatorSharesIncreased is a free log subscription operation binding the contract event 0x1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c. +// +// Solidity: event OperatorSharesIncreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchOperatorSharesIncreased(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageOperatorSharesIncreased, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "OperatorSharesIncreased", 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(DelegationManagerStorageOperatorSharesIncreased) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "OperatorSharesIncreased", 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 +} + +// ParseOperatorSharesIncreased is a log parse operation binding the contract event 0x1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c. +// +// Solidity: event OperatorSharesIncreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseOperatorSharesIncreased(log types.Log) (*DelegationManagerStorageOperatorSharesIncreased, error) { + event := new(DelegationManagerStorageOperatorSharesIncreased) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "OperatorSharesIncreased", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStorageStakerDelegatedIterator is returned from FilterStakerDelegated and is used to iterate over the raw logs and unpacked data for StakerDelegated events raised by the DelegationManagerStorage contract. +type DelegationManagerStorageStakerDelegatedIterator struct { + Event *DelegationManagerStorageStakerDelegated // 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 *DelegationManagerStorageStakerDelegatedIterator) 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(DelegationManagerStorageStakerDelegated) + 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(DelegationManagerStorageStakerDelegated) + 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 *DelegationManagerStorageStakerDelegatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStorageStakerDelegatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStorageStakerDelegated represents a StakerDelegated event raised by the DelegationManagerStorage contract. +type DelegationManagerStorageStakerDelegated struct { + Staker common.Address + Operator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStakerDelegated is a free log retrieval operation binding the contract event 0xc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d8743304. +// +// Solidity: event StakerDelegated(address indexed staker, address indexed operator) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterStakerDelegated(opts *bind.FilterOpts, staker []common.Address, operator []common.Address) (*DelegationManagerStorageStakerDelegatedIterator, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "StakerDelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerStorageStakerDelegatedIterator{contract: _DelegationManagerStorage.contract, event: "StakerDelegated", logs: logs, sub: sub}, nil +} + +// WatchStakerDelegated is a free log subscription operation binding the contract event 0xc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d8743304. +// +// Solidity: event StakerDelegated(address indexed staker, address indexed operator) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchStakerDelegated(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageStakerDelegated, staker []common.Address, operator []common.Address) (event.Subscription, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "StakerDelegated", stakerRule, 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(DelegationManagerStorageStakerDelegated) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "StakerDelegated", 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 +} + +// ParseStakerDelegated is a log parse operation binding the contract event 0xc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d8743304. +// +// Solidity: event StakerDelegated(address indexed staker, address indexed operator) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseStakerDelegated(log types.Log) (*DelegationManagerStorageStakerDelegated, error) { + event := new(DelegationManagerStorageStakerDelegated) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "StakerDelegated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStorageStakerForceUndelegatedIterator is returned from FilterStakerForceUndelegated and is used to iterate over the raw logs and unpacked data for StakerForceUndelegated events raised by the DelegationManagerStorage contract. +type DelegationManagerStorageStakerForceUndelegatedIterator struct { + Event *DelegationManagerStorageStakerForceUndelegated // 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 *DelegationManagerStorageStakerForceUndelegatedIterator) 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(DelegationManagerStorageStakerForceUndelegated) + 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(DelegationManagerStorageStakerForceUndelegated) + 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 *DelegationManagerStorageStakerForceUndelegatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStorageStakerForceUndelegatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStorageStakerForceUndelegated represents a StakerForceUndelegated event raised by the DelegationManagerStorage contract. +type DelegationManagerStorageStakerForceUndelegated struct { + Staker common.Address + Operator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStakerForceUndelegated is a free log retrieval operation binding the contract event 0xf0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a. +// +// Solidity: event StakerForceUndelegated(address indexed staker, address indexed operator) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterStakerForceUndelegated(opts *bind.FilterOpts, staker []common.Address, operator []common.Address) (*DelegationManagerStorageStakerForceUndelegatedIterator, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "StakerForceUndelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerStorageStakerForceUndelegatedIterator{contract: _DelegationManagerStorage.contract, event: "StakerForceUndelegated", logs: logs, sub: sub}, nil +} + +// WatchStakerForceUndelegated is a free log subscription operation binding the contract event 0xf0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a. +// +// Solidity: event StakerForceUndelegated(address indexed staker, address indexed operator) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchStakerForceUndelegated(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageStakerForceUndelegated, staker []common.Address, operator []common.Address) (event.Subscription, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "StakerForceUndelegated", stakerRule, 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(DelegationManagerStorageStakerForceUndelegated) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "StakerForceUndelegated", 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 +} + +// ParseStakerForceUndelegated is a log parse operation binding the contract event 0xf0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a. +// +// Solidity: event StakerForceUndelegated(address indexed staker, address indexed operator) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseStakerForceUndelegated(log types.Log) (*DelegationManagerStorageStakerForceUndelegated, error) { + event := new(DelegationManagerStorageStakerForceUndelegated) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "StakerForceUndelegated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStorageStakerUndelegatedIterator is returned from FilterStakerUndelegated and is used to iterate over the raw logs and unpacked data for StakerUndelegated events raised by the DelegationManagerStorage contract. +type DelegationManagerStorageStakerUndelegatedIterator struct { + Event *DelegationManagerStorageStakerUndelegated // 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 *DelegationManagerStorageStakerUndelegatedIterator) 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(DelegationManagerStorageStakerUndelegated) + 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(DelegationManagerStorageStakerUndelegated) + 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 *DelegationManagerStorageStakerUndelegatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStorageStakerUndelegatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStorageStakerUndelegated represents a StakerUndelegated event raised by the DelegationManagerStorage contract. +type DelegationManagerStorageStakerUndelegated struct { + Staker common.Address + Operator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStakerUndelegated is a free log retrieval operation binding the contract event 0xfee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af44676. +// +// Solidity: event StakerUndelegated(address indexed staker, address indexed operator) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterStakerUndelegated(opts *bind.FilterOpts, staker []common.Address, operator []common.Address) (*DelegationManagerStorageStakerUndelegatedIterator, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "StakerUndelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return &DelegationManagerStorageStakerUndelegatedIterator{contract: _DelegationManagerStorage.contract, event: "StakerUndelegated", logs: logs, sub: sub}, nil +} + +// WatchStakerUndelegated is a free log subscription operation binding the contract event 0xfee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af44676. +// +// Solidity: event StakerUndelegated(address indexed staker, address indexed operator) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchStakerUndelegated(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageStakerUndelegated, staker []common.Address, operator []common.Address) (event.Subscription, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "StakerUndelegated", stakerRule, 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(DelegationManagerStorageStakerUndelegated) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "StakerUndelegated", 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 +} + +// ParseStakerUndelegated is a log parse operation binding the contract event 0xfee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af44676. +// +// Solidity: event StakerUndelegated(address indexed staker, address indexed operator) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseStakerUndelegated(log types.Log) (*DelegationManagerStorageStakerUndelegated, error) { + event := new(DelegationManagerStorageStakerUndelegated) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "StakerUndelegated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStorageStrategyWithdrawalDelayBlocksSetIterator is returned from FilterStrategyWithdrawalDelayBlocksSet and is used to iterate over the raw logs and unpacked data for StrategyWithdrawalDelayBlocksSet events raised by the DelegationManagerStorage contract. +type DelegationManagerStorageStrategyWithdrawalDelayBlocksSetIterator struct { + Event *DelegationManagerStorageStrategyWithdrawalDelayBlocksSet // 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 *DelegationManagerStorageStrategyWithdrawalDelayBlocksSetIterator) 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(DelegationManagerStorageStrategyWithdrawalDelayBlocksSet) + 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(DelegationManagerStorageStrategyWithdrawalDelayBlocksSet) + 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 *DelegationManagerStorageStrategyWithdrawalDelayBlocksSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStorageStrategyWithdrawalDelayBlocksSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStorageStrategyWithdrawalDelayBlocksSet represents a StrategyWithdrawalDelayBlocksSet event raised by the DelegationManagerStorage contract. +type DelegationManagerStorageStrategyWithdrawalDelayBlocksSet struct { + Strategy common.Address + PreviousValue *big.Int + NewValue *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyWithdrawalDelayBlocksSet is a free log retrieval operation binding the contract event 0x0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d. +// +// Solidity: event StrategyWithdrawalDelayBlocksSet(address strategy, uint256 previousValue, uint256 newValue) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterStrategyWithdrawalDelayBlocksSet(opts *bind.FilterOpts) (*DelegationManagerStorageStrategyWithdrawalDelayBlocksSetIterator, error) { + + logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "StrategyWithdrawalDelayBlocksSet") + if err != nil { + return nil, err + } + return &DelegationManagerStorageStrategyWithdrawalDelayBlocksSetIterator{contract: _DelegationManagerStorage.contract, event: "StrategyWithdrawalDelayBlocksSet", logs: logs, sub: sub}, nil +} + +// WatchStrategyWithdrawalDelayBlocksSet is a free log subscription operation binding the contract event 0x0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d. +// +// Solidity: event StrategyWithdrawalDelayBlocksSet(address strategy, uint256 previousValue, uint256 newValue) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchStrategyWithdrawalDelayBlocksSet(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageStrategyWithdrawalDelayBlocksSet) (event.Subscription, error) { + + logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "StrategyWithdrawalDelayBlocksSet") + 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(DelegationManagerStorageStrategyWithdrawalDelayBlocksSet) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "StrategyWithdrawalDelayBlocksSet", 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 +} + +// ParseStrategyWithdrawalDelayBlocksSet is a log parse operation binding the contract event 0x0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d. +// +// Solidity: event StrategyWithdrawalDelayBlocksSet(address strategy, uint256 previousValue, uint256 newValue) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseStrategyWithdrawalDelayBlocksSet(log types.Log) (*DelegationManagerStorageStrategyWithdrawalDelayBlocksSet, error) { + event := new(DelegationManagerStorageStrategyWithdrawalDelayBlocksSet) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "StrategyWithdrawalDelayBlocksSet", 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 + + 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 *DelegationManagerStorageWithdrawalCompletedIterator) 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(DelegationManagerStorageWithdrawalCompleted) + 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(DelegationManagerStorageWithdrawalCompleted) + 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 *DelegationManagerStorageWithdrawalCompletedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStorageWithdrawalCompletedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStorageWithdrawalCompleted represents a WithdrawalCompleted event raised by the DelegationManagerStorage contract. +type DelegationManagerStorageWithdrawalCompleted struct { + WithdrawalRoot [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalCompleted is a free log retrieval operation binding the contract event 0xc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d. +// +// Solidity: event WithdrawalCompleted(bytes32 withdrawalRoot) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterWithdrawalCompleted(opts *bind.FilterOpts) (*DelegationManagerStorageWithdrawalCompletedIterator, error) { + + logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "WithdrawalCompleted") + if err != nil { + return nil, err + } + return &DelegationManagerStorageWithdrawalCompletedIterator{contract: _DelegationManagerStorage.contract, event: "WithdrawalCompleted", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalCompleted is a free log subscription operation binding the contract event 0xc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d. +// +// Solidity: event WithdrawalCompleted(bytes32 withdrawalRoot) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchWithdrawalCompleted(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageWithdrawalCompleted) (event.Subscription, error) { + + logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "WithdrawalCompleted") + 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(DelegationManagerStorageWithdrawalCompleted) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "WithdrawalCompleted", 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 +} + +// ParseWithdrawalCompleted is a log parse operation binding the contract event 0xc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d. +// +// Solidity: event WithdrawalCompleted(bytes32 withdrawalRoot) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseWithdrawalCompleted(log types.Log) (*DelegationManagerStorageWithdrawalCompleted, error) { + event := new(DelegationManagerStorageWithdrawalCompleted) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "WithdrawalCompleted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStorageWithdrawalMigratedIterator is returned from FilterWithdrawalMigrated and is used to iterate over the raw logs and unpacked data for WithdrawalMigrated events raised by the DelegationManagerStorage contract. +type DelegationManagerStorageWithdrawalMigratedIterator struct { + Event *DelegationManagerStorageWithdrawalMigrated // 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 *DelegationManagerStorageWithdrawalMigratedIterator) 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(DelegationManagerStorageWithdrawalMigrated) + 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(DelegationManagerStorageWithdrawalMigrated) + 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 *DelegationManagerStorageWithdrawalMigratedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStorageWithdrawalMigratedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStorageWithdrawalMigrated represents a WithdrawalMigrated event raised by the DelegationManagerStorage contract. +type DelegationManagerStorageWithdrawalMigrated struct { + OldWithdrawalRoot [32]byte + NewWithdrawalRoot [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalMigrated is a free log retrieval operation binding the contract event 0xdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630. +// +// Solidity: event WithdrawalMigrated(bytes32 oldWithdrawalRoot, bytes32 newWithdrawalRoot) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterWithdrawalMigrated(opts *bind.FilterOpts) (*DelegationManagerStorageWithdrawalMigratedIterator, error) { + + logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "WithdrawalMigrated") + if err != nil { + return nil, err + } + return &DelegationManagerStorageWithdrawalMigratedIterator{contract: _DelegationManagerStorage.contract, event: "WithdrawalMigrated", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalMigrated is a free log subscription operation binding the contract event 0xdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630. +// +// Solidity: event WithdrawalMigrated(bytes32 oldWithdrawalRoot, bytes32 newWithdrawalRoot) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchWithdrawalMigrated(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageWithdrawalMigrated) (event.Subscription, error) { + + logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "WithdrawalMigrated") + 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(DelegationManagerStorageWithdrawalMigrated) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "WithdrawalMigrated", 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 +} + +// ParseWithdrawalMigrated is a log parse operation binding the contract event 0xdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630. +// +// Solidity: event WithdrawalMigrated(bytes32 oldWithdrawalRoot, bytes32 newWithdrawalRoot) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseWithdrawalMigrated(log types.Log) (*DelegationManagerStorageWithdrawalMigrated, error) { + event := new(DelegationManagerStorageWithdrawalMigrated) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "WithdrawalMigrated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelegationManagerStorageWithdrawalQueuedIterator is returned from FilterWithdrawalQueued and is used to iterate over the raw logs and unpacked data for WithdrawalQueued events raised by the DelegationManagerStorage contract. +type DelegationManagerStorageWithdrawalQueuedIterator struct { + Event *DelegationManagerStorageWithdrawalQueued // 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 *DelegationManagerStorageWithdrawalQueuedIterator) 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(DelegationManagerStorageWithdrawalQueued) + 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(DelegationManagerStorageWithdrawalQueued) + 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 *DelegationManagerStorageWithdrawalQueuedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStorageWithdrawalQueuedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStorageWithdrawalQueued represents a WithdrawalQueued event raised by the DelegationManagerStorage contract. +type DelegationManagerStorageWithdrawalQueued struct { + WithdrawalRoot [32]byte + Withdrawal IDelegationManagerWithdrawal + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalQueued is a free log retrieval operation binding the contract event 0x9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9. +// +// Solidity: event WithdrawalQueued(bytes32 withdrawalRoot, (address,address,address,uint256,uint32,address[],uint256[]) withdrawal) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterWithdrawalQueued(opts *bind.FilterOpts) (*DelegationManagerStorageWithdrawalQueuedIterator, error) { + + logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "WithdrawalQueued") + if err != nil { + return nil, err + } + return &DelegationManagerStorageWithdrawalQueuedIterator{contract: _DelegationManagerStorage.contract, event: "WithdrawalQueued", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalQueued is a free log subscription operation binding the contract event 0x9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9. +// +// Solidity: event WithdrawalQueued(bytes32 withdrawalRoot, (address,address,address,uint256,uint32,address[],uint256[]) withdrawal) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchWithdrawalQueued(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageWithdrawalQueued) (event.Subscription, error) { + + logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "WithdrawalQueued") + 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(DelegationManagerStorageWithdrawalQueued) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "WithdrawalQueued", 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 +} + +// ParseWithdrawalQueued is a log parse operation binding the contract event 0x9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9. +// +// Solidity: event WithdrawalQueued(bytes32 withdrawalRoot, (address,address,address,uint256,uint32,address[],uint256[]) withdrawal) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseWithdrawalQueued(log types.Log) (*DelegationManagerStorageWithdrawalQueued, error) { + event := new(DelegationManagerStorageWithdrawalQueued) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "WithdrawalQueued", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/DelegationManagerStorage/tmp.abi b/pkg/bindings/DelegationManagerStorage/tmp.abi new file mode 100644 index 000000000..a1a3b1fab --- /dev/null +++ b/pkg/bindings/DelegationManagerStorage/tmp.abi @@ -0,0 +1,1394 @@ +[ + { + "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": "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": "struct IDelegationManager.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": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "completeQueuedWithdrawal", + "inputs": [ + { + "name": "withdrawal", + "type": "tuple", + "internalType": "struct IDelegationManager.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": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + }, + { + "name": "tokens", + "type": "address[]", + "internalType": "contract IERC20[]" + }, + { + "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": "struct IDelegationManager.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": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + }, + { + "name": "tokens", + "type": "address[][]", + "internalType": "contract IERC20[][]" + }, + { + "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": "contract IStrategy" + }, + { + "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": "struct ISignatureUtils.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": "struct ISignatureUtils.SignatureWithExpiry", + "components": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "approverSignatureAndExpiry", + "type": "tuple", + "internalType": "struct ISignatureUtils.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": "earningsReceiver", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eigenPodManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IEigenPodManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getOperatorShares", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getWithdrawalDelay", + "inputs": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "increaseDelegatedShares", + "inputs": [ + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "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": "migrateQueuedWithdrawals", + "inputs": [ + { + "name": "withdrawalsToQueue", + "type": "tuple[]", + "internalType": "struct IStrategyManager.DeprecatedStruct_QueuedWithdrawal[]", + "components": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "withdrawerAndNonce", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_WithdrawerAndNonce", + "components": [ + { + "name": "withdrawer", + "type": "address", + "internalType": "address" + }, + { + "name": "nonce", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "name": "withdrawalStartBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "delegatedAddress", + "type": "address", + "internalType": "address" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "minWithdrawalDelayBlocks", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "modifyOperatorDetails", + "inputs": [ + { + "name": "newOperatorDetails", + "type": "tuple", + "internalType": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "contract IStrategy" + } + ], + "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": "struct IDelegationManager.QueuedWithdrawalParams[]", + "components": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "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": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "contract ISlasher" + } + ], + "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": "contract IStrategyManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "strategyWithdrawalDelayBlocks", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IStrategy" + } + ], + "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": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "contract IStrategy" + }, + { + "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": "contract IStrategy" + }, + { + "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": "contract IStrategy" + }, + { + "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": "WithdrawalMigrated", + "inputs": [ + { + "name": "oldWithdrawalRoot", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "newWithdrawalRoot", + "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": "struct IDelegationManager.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": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/DelegationManagerStorage/tmp.bin b/pkg/bindings/DelegationManagerStorage/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/DelegationManagerStorage/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/EIP1271SignatureUtils/binding.go b/pkg/bindings/EIP1271SignatureUtils/binding.go new file mode 100644 index 000000000..d5903bc37 --- /dev/null +++ b/pkg/bindings/EIP1271SignatureUtils/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 EIP1271SignatureUtils + +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 +) + +// EIP1271SignatureUtilsMetaData contains all meta data concerning the EIP1271SignatureUtils contract. +var EIP1271SignatureUtilsMetaData = &bind.MetaData{ + ABI: "[]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209832fdd04d36d0bbe78b7b9457ca6759978d3e81a33602cb69f518c735ee384664736f6c634300080c0033", +} + +// EIP1271SignatureUtilsABI is the input ABI used to generate the binding from. +// Deprecated: Use EIP1271SignatureUtilsMetaData.ABI instead. +var EIP1271SignatureUtilsABI = EIP1271SignatureUtilsMetaData.ABI + +// EIP1271SignatureUtilsBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use EIP1271SignatureUtilsMetaData.Bin instead. +var EIP1271SignatureUtilsBin = EIP1271SignatureUtilsMetaData.Bin + +// DeployEIP1271SignatureUtils deploys a new Ethereum contract, binding an instance of EIP1271SignatureUtils to it. +func DeployEIP1271SignatureUtils(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *EIP1271SignatureUtils, error) { + parsed, err := EIP1271SignatureUtilsMetaData.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(EIP1271SignatureUtilsBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &EIP1271SignatureUtils{EIP1271SignatureUtilsCaller: EIP1271SignatureUtilsCaller{contract: contract}, EIP1271SignatureUtilsTransactor: EIP1271SignatureUtilsTransactor{contract: contract}, EIP1271SignatureUtilsFilterer: EIP1271SignatureUtilsFilterer{contract: contract}}, nil +} + +// EIP1271SignatureUtils is an auto generated Go binding around an Ethereum contract. +type EIP1271SignatureUtils struct { + EIP1271SignatureUtilsCaller // Read-only binding to the contract + EIP1271SignatureUtilsTransactor // Write-only binding to the contract + EIP1271SignatureUtilsFilterer // Log filterer for contract events +} + +// EIP1271SignatureUtilsCaller is an auto generated read-only Go binding around an Ethereum contract. +type EIP1271SignatureUtilsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EIP1271SignatureUtilsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type EIP1271SignatureUtilsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EIP1271SignatureUtilsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type EIP1271SignatureUtilsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EIP1271SignatureUtilsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type EIP1271SignatureUtilsSession struct { + Contract *EIP1271SignatureUtils // 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 +} + +// EIP1271SignatureUtilsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type EIP1271SignatureUtilsCallerSession struct { + Contract *EIP1271SignatureUtilsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// EIP1271SignatureUtilsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type EIP1271SignatureUtilsTransactorSession struct { + Contract *EIP1271SignatureUtilsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// EIP1271SignatureUtilsRaw is an auto generated low-level Go binding around an Ethereum contract. +type EIP1271SignatureUtilsRaw struct { + Contract *EIP1271SignatureUtils // Generic contract binding to access the raw methods on +} + +// EIP1271SignatureUtilsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type EIP1271SignatureUtilsCallerRaw struct { + Contract *EIP1271SignatureUtilsCaller // Generic read-only contract binding to access the raw methods on +} + +// EIP1271SignatureUtilsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type EIP1271SignatureUtilsTransactorRaw struct { + Contract *EIP1271SignatureUtilsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewEIP1271SignatureUtils creates a new instance of EIP1271SignatureUtils, bound to a specific deployed contract. +func NewEIP1271SignatureUtils(address common.Address, backend bind.ContractBackend) (*EIP1271SignatureUtils, error) { + contract, err := bindEIP1271SignatureUtils(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &EIP1271SignatureUtils{EIP1271SignatureUtilsCaller: EIP1271SignatureUtilsCaller{contract: contract}, EIP1271SignatureUtilsTransactor: EIP1271SignatureUtilsTransactor{contract: contract}, EIP1271SignatureUtilsFilterer: EIP1271SignatureUtilsFilterer{contract: contract}}, nil +} + +// NewEIP1271SignatureUtilsCaller creates a new read-only instance of EIP1271SignatureUtils, bound to a specific deployed contract. +func NewEIP1271SignatureUtilsCaller(address common.Address, caller bind.ContractCaller) (*EIP1271SignatureUtilsCaller, error) { + contract, err := bindEIP1271SignatureUtils(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &EIP1271SignatureUtilsCaller{contract: contract}, nil +} + +// NewEIP1271SignatureUtilsTransactor creates a new write-only instance of EIP1271SignatureUtils, bound to a specific deployed contract. +func NewEIP1271SignatureUtilsTransactor(address common.Address, transactor bind.ContractTransactor) (*EIP1271SignatureUtilsTransactor, error) { + contract, err := bindEIP1271SignatureUtils(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &EIP1271SignatureUtilsTransactor{contract: contract}, nil +} + +// NewEIP1271SignatureUtilsFilterer creates a new log filterer instance of EIP1271SignatureUtils, bound to a specific deployed contract. +func NewEIP1271SignatureUtilsFilterer(address common.Address, filterer bind.ContractFilterer) (*EIP1271SignatureUtilsFilterer, error) { + contract, err := bindEIP1271SignatureUtils(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &EIP1271SignatureUtilsFilterer{contract: contract}, nil +} + +// bindEIP1271SignatureUtils binds a generic wrapper to an already deployed contract. +func bindEIP1271SignatureUtils(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := EIP1271SignatureUtilsMetaData.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 (_EIP1271SignatureUtils *EIP1271SignatureUtilsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EIP1271SignatureUtils.Contract.EIP1271SignatureUtilsCaller.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 (_EIP1271SignatureUtils *EIP1271SignatureUtilsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EIP1271SignatureUtils.Contract.EIP1271SignatureUtilsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EIP1271SignatureUtils *EIP1271SignatureUtilsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EIP1271SignatureUtils.Contract.EIP1271SignatureUtilsTransactor.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 (_EIP1271SignatureUtils *EIP1271SignatureUtilsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EIP1271SignatureUtils.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 (_EIP1271SignatureUtils *EIP1271SignatureUtilsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EIP1271SignatureUtils.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EIP1271SignatureUtils *EIP1271SignatureUtilsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EIP1271SignatureUtils.Contract.contract.Transact(opts, method, params...) +} diff --git a/pkg/bindings/EIP1271SignatureUtils/tmp.abi b/pkg/bindings/EIP1271SignatureUtils/tmp.abi new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/pkg/bindings/EIP1271SignatureUtils/tmp.abi @@ -0,0 +1 @@ +[] diff --git a/pkg/bindings/EIP1271SignatureUtils/tmp.bin b/pkg/bindings/EIP1271SignatureUtils/tmp.bin new file mode 100644 index 000000000..ce5c07a9c --- /dev/null +++ b/pkg/bindings/EIP1271SignatureUtils/tmp.bin @@ -0,0 +1 @@ +0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209832fdd04d36d0bbe78b7b9457ca6759978d3e81a33602cb69f518c735ee384664736f6c634300080c0033 diff --git a/pkg/bindings/Eigen/binding.go b/pkg/bindings/Eigen/binding.go new file mode 100644 index 000000000..3000876ed --- /dev/null +++ b/pkg/bindings/Eigen/binding.go @@ -0,0 +1,2974 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package Eigen + +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 +) + +// ERC20VotesUpgradeableCheckpoint is an auto generated low-level Go binding around an user-defined struct. +type ERC20VotesUpgradeableCheckpoint struct { + FromBlock uint32 + Votes *big.Int +} + +// 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: "0x60a06040523480156200001157600080fd5b506040516200342538038062003425833981016040819052620000349162000113565b6001600160a01b0381166080526200004b62000052565b5062000145565b600054610100900460ff1615620000bf5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161462000111576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012657600080fd5b81516001600160a01b03811681146200013e57600080fd5b9392505050565b6080516132b66200016f6000396000818161034801528181611475015261156401526132b66000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c806381b9716111610146578063a9059cbb116100c3578063dd62ed3e11610087578063dd62ed3e146105c5578063de0e9a3e146105d8578063ea598cb0146105eb578063eb415f45146105fe578063f1127ed814610606578063f2fde38b1461064357600080fd5b8063a9059cbb14610566578063aad41a4114610579578063b8c255941461058c578063c3cda5201461059f578063d505accf146105b257600080fd5b806395d89b411161010a57806395d89b411461051b5780639ab24eb0146105235780639aec4bae14610536578063a457c2d714610540578063a7d1195d1461055357600080fd5b806381b971611461049c57806384b0196e146104bd5780638da5cb5b146104d85780638e539e8c146104e957806391ddadf4146104fc57600080fd5b80633a46b1a8116101df5780635c19a95c116101a35780635c19a95c146103f95780636fcfff451461040c57806370a0823114610434578063715018a61461045d57806378aa33ba146104655780637ecebe001461048957600080fd5b80633a46b1a8146103305780633f4da4c6146103435780634bf5d7e91461038257806353957125146103ac578063587cde1e146103cd57600080fd5b80631ffacdef116102265780631ffacdef146102e057806323b872dd146102f3578063313ce567146103065780633644e51514610315578063395093511461031d57600080fd5b80630455e6941461026357806306fdde031461029c578063095ea7b3146102b15780631249c58b146102c457806318160ddd146102ce575b600080fd5b610287610271366004612b8a565b6101336020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102a4610656565b6040516102939190612bf2565b6102876102bf366004612c05565b6106e8565b6102cc610700565b005b6067545b604051908152602001610293565b6102cc6102ee366004612c3d565b61084b565b610287610301366004612c74565b6108b4565b60405160128152602001610293565b6102d26108d8565b61028761032b366004612c05565b6108e7565b6102d261033e366004612c05565b610909565b61036a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610293565b60408051808201909152600e81526d06d6f64653d74696d657374616d760941b60208201526102a4565b6102d26103ba366004612b8a565b6101306020526000908152604090205481565b61036a6103db366004612b8a565b6001600160a01b03908116600090815260fe60205260409020541690565b6102cc610407366004612b8a565b61098e565b61041f61041a366004612b8a565b61099b565b60405163ffffffff9091168152602001610293565b6102d2610442366004612b8a565b6001600160a01b031660009081526065602052604090205490565b6102cc6109c3565b610287610473366004612b8a565b6101346020526000908152604090205460ff1681565b6102d2610497366004612b8a565b6109d7565b6102d26104aa366004612b8a565b6101316020526000908152604090205481565b6104c56109f5565b6040516102939796959493929190612cb0565b6033546001600160a01b031661036a565b6102d26104f7366004612d46565b610a93565b610504610afb565b60405165ffffffffffff9091168152602001610293565b6102a4610b06565b6102d2610531366004612b8a565b610b15565b6102d26101325481565b61028761054e366004612c05565b610b97565b6102cc610561366004612e35565b610c12565b610287610574366004612c05565b61103f565b6102cc610587366004612f78565b61104d565b6102cc61059a366004612c3d565b611128565b6102cc6105ad366004612ff5565b611189565b6102cc6105c036600461304d565b6112bf565b6102d26105d33660046130b7565b611423565b6102cc6105e6366004612d46565b61144e565b6102cc6105f9366004612d46565b611542565b6102cc61163b565b6106196106143660046130ea565b611704565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610293565b6102cc610651366004612b8a565b611788565b6060606880546106659061311f565b80601f01602080910402602001604051908101604052809291908181526020018280546106919061311f565b80156106de5780601f106106b3576101008083540402835291602001916106de565b820191906000526020600020905b8154815290600101906020018083116106c157829003601f168201915b5050505050905090565b6000336106f68185856117fe565b5060019392505050565b336000908152610131602052604090205461077a5760405162461bcd60e51b815260206004820152602f60248201527f456967656e2e6d696e743a206d73672e73656e64657220686173206e6f206d6960448201526e6e74696e6720616c6c6f77616e636560881b60648201526084015b60405180910390fd5b336000908152610130602052604090205442116107f35760405162461bcd60e51b815260206004820152603160248201527f456967656e2e6d696e743a206d73672e73656e646572206973206e6f7420616c6044820152701b1bddd959081d1bc81b5a5b9d081e595d607a1b6064820152608401610771565b336000818152610131602052604081208054919055906108139082611922565b60405181815233907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859060200160405180910390a250565b6108536119b3565b6001600160a01b03821660008181526101336020908152604091829020805460ff191685151590811790915591519182527fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed284362227191015b60405180910390a25050565b6000336108c2858285611a0d565b6108cd858585611a81565b506001949350505050565b60006108e2611c3d565b905090565b6000336106f68185856108fa8383611423565b610904919061316a565b6117fe565b6000610913610afb565b65ffffffffffff1682106109655760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610771565b6001600160a01b038316600090815260ff602052604090206109879083611c47565b9392505050565b6109983382611d30565b50565b6001600160a01b038116600090815260ff60205260408120546109bd90611daa565b92915050565b6109cb6119b3565b6109d56000611e13565b565b6001600160a01b038116600090815260cb60205260408120546109bd565b6000606080600080600060606097546000801b148015610a155750609854155b610a595760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610771565b610a61611e65565b610a69611e74565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000610a9d610afb565b65ffffffffffff168210610aef5760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610771565b6109bd61010083611c47565b60006108e242611e83565b6060606980546106659061311f565b6001600160a01b038116600090815260ff60205260408120548015610b84576001600160a01b038316600090815260ff6020526040902080546000198301908110610b6257610b62613182565b60009182526020909120015464010000000090046001600160e01b0316610b87565b60005b6001600160e01b03169392505050565b60003381610ba58286611423565b905083811015610c055760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610771565b6108cd82868684036117fe565b600054610100900460ff1615808015610c325750600054600160ff909116105b80610c4c5750303b158015610c4c575060005460ff166001145b610caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610771565b6000805460ff191660011790558015610cd2576000805461ff0019166101001790555b610cda611eea565b610d1e6040518060400160405280600581526020016422b4b3b2b760d91b8152506040518060400160405280600581526020016422a4a3a2a760d91b815250611f19565b610d2785611e13565b610d4d6040518060400160405280600581526020016422a4a3a2a760d91b815250611f4e565b8251845114610dd45760405162461bcd60e51b815260206004820152604760248201527f456967656e2e696e697469616c697a653a206d696e7465727320616e64206d6960448201527f6e74696e67416c6c6f77616e636573206d757374206265207468652073616d65606482015266040d8cadccee8d60cb1b608482015260a401610771565b8151845114610e5b5760405162461bcd60e51b815260206004820152604760248201527f456967656e2e696e697469616c697a653a206d696e7465727320616e64206d6960448201527f6e74416c6c6f776564416674657273206d757374206265207468652073616d65606482015266040d8cadccee8d60cb1b608482015260a401610771565b60005b8451811015610fea57838181518110610e7957610e79613182565b60200260200101516101316000878481518110610e9857610e98613182565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550828181518110610ed657610ed6613182565b60200260200101516101306000878481518110610ef557610ef5613182565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555060016101336000878481518110610f3a57610f3a613182565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550848181518110610f8b57610f8b613182565b60200260200101516001600160a01b03167fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed28436222716001604051610fd0911515815260200190565b60405180910390a280610fe281613198565b915050610e5e565b50600019610132558015611038576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6000336106f6818585611a81565b8281146110c25760405162461bcd60e51b815260206004820152603e60248201527f456967656e2e6d756c746973656e643a2072656365697665727320616e64206160448201527f6d6f756e7473206d757374206265207468652073616d65206c656e67746800006064820152608401610771565b60005b8381101561103857611116338686848181106110e3576110e3613182565b90506020020160208101906110f89190612b8a565b85858581811061110a5761110a613182565b90506020020135611a81565b8061112081613198565b9150506110c5565b6111306119b3565b6001600160a01b03821660008181526101346020908152604091829020805460ff191685151590811790915591519182527f72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b91016108a8565b834211156111d95760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610771565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906112539061124b9060a00160405160208183030381529060405280519060200120611f98565b858585611fc5565b905061125e81611fed565b86146112ac5760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610771565b6112b68188611d30565b50505050505050565b8342111561130f5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610771565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861133e8c611fed565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061139982611f98565b905060006113a982878787611fc5565b9050896001600160a01b0316816001600160a01b03161461140c5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610771565b6114178a8a8a6117fe565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b611459333083611a81565b60405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea91906131b3565b6109985760405162461bcd60e51b8152602060048201526024808201527f456967656e2e756e777261703a2062454947454e207472616e736665722066616044820152631a5b195960e21b6064820152608401610771565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af11580156115b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d991906131b3565b6116305760405162461bcd60e51b815260206004820152602260248201527f456967656e2e777261703a2062454947454e207472616e73666572206661696c604482015261195960f21b6064820152608401610771565b610998303383611a81565b6116436119b3565b60001961013254146116d35760405162461bcd60e51b815260206004820152604d60248201527f456967656e2e64697361626c655472616e736665725265737472696374696f6e60448201527f733a207472616e73666572207265737472696374696f6e732061726520616c7260648201526c1958591e48191a5cd8589b1959609a1b608482015260a401610771565b60006101328190556040517f2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f649190a1565b60408051808201909152600080825260208201526001600160a01b038316600090815260ff60205260409020805463ffffffff841690811061174857611748613182565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6117906119b3565b6001600160a01b0381166117f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610771565b61099881611e13565b6001600160a01b0383166118605760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610771565b6001600160a01b0382166118c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610771565b6001600160a01b0383811660008181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61192c8282612015565b6067546001600160e01b03101561199e5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401610771565b6119ad6101006120ea836120f6565b50505050565b6033546001600160a01b031633146109d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610771565b6000611a198484611423565b905060001981146119ad5781811015611a745760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610771565b6119ad84848484036117fe565b6001600160a01b038316611ae55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610771565b6001600160a01b038216611b475760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610771565b611b5283838361226b565b6001600160a01b03831660009081526065602052604090205481811015611bca5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610771565b6001600160a01b0380851660008181526065602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c2a9086815260200190565b60405180910390a36119ad848484612365565b60006108e2612397565b815460009081816005811115611ca1576000611c628461240b565b611c6c90856131d0565b600088815260209020909150869082015463ffffffff161115611c9157809150611c9f565b611c9c81600161316a565b92505b505b80821015611cee576000611cb583836124f0565b600088815260209020909150869082015463ffffffff161115611cda57809150611ce8565b611ce581600161316a565b92505b50611ca1565b8015611d1a576000868152602090208101600019015464010000000090046001600160e01b0316611d1d565b60005b6001600160e01b03169695505050505050565b6001600160a01b03828116600081815260fe6020818152604080842080546065845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46119ad82848361250b565b600063ffffffff821115611e0f5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610771565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060609980546106659061311f565b6060609a80546106659061311f565b600065ffffffffffff821115611e0f5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610771565b600054610100900460ff16611f115760405162461bcd60e51b8152600401610771906131e7565b6109d5612648565b600054610100900460ff16611f405760405162461bcd60e51b8152600401610771906131e7565b611f4a8282612678565b5050565b600054610100900460ff16611f755760405162461bcd60e51b8152600401610771906131e7565b61099881604051806040016040528060018152602001603160f81b8152506126c6565b60006109bd611fa5611c3d565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000611fd687878787612723565b91509150611fe3816127e7565b5095945050505050565b6001600160a01b038116600090815260cb602052604090208054600181018255905b50919050565b6001600160a01b03821661206b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610771565b6120776000838361226b565b8060676000828254612089919061316a565b90915550506001600160a01b0382166000818152606560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611f4a60008383612365565b6000610987828461316a565b825460009081908181156121435760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b03166020820152612158565b60408051808201909152600080825260208201525b905080602001516001600160e01b0316935061217884868863ffffffff16565b92506000821180156121a2575061218d610afb565b65ffffffffffff16816000015163ffffffff16145b156121e7576121b083612935565b60008881526020902083016000190180546001600160e01b03929092166401000000000263ffffffff909216919091179055612261565b86604051806040016040528061220b6121fe610afb565b65ffffffffffff16611daa565b63ffffffff16815260200161221f86612935565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b610132544211612360576001600160a01b038316158061229357506001600160a01b03831630145b806122a657506001600160a01b03821630145b806122ca57506001600160a01b0383166000908152610133602052604090205460ff165b806122ee57506001600160a01b0382166000908152610134602052604090205460ff165b6123605760405162461bcd60e51b815260206004820152603a60248201527f456967656e2e5f6265666f7265546f6b656e5472616e736665723a2066726f6d60448201527f206f7220746f206d7573742062652077686974656c69737465640000000000006064820152608401610771565b505050565b6001600160a01b03838116600090815260fe60205260408082205485841683529120546123609291821691168361250b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6123c261299e565b6123ca6129f7565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008161241a57506000919050565b6000600161242784612a28565b901c6001901b9050600181848161244057612440613232565b048201901c9050600181848161245857612458613232565b048201901c9050600181848161247057612470613232565b048201901c9050600181848161248857612488613232565b048201901c905060018184816124a0576124a0613232565b048201901c905060018184816124b8576124b8613232565b048201901c905060018184816124d0576124d0613232565b048201901c9050610987818285816124ea576124ea613232565b04612abc565b60006124ff6002848418613248565b6109879084841661316a565b816001600160a01b0316836001600160a01b03161415801561252d5750600081115b15612360576001600160a01b038316156125bb576001600160a01b038316600090815260ff60205260408120819061256890612ad2856120f6565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516125b0929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615612360576001600160a01b038216600090815260ff6020526040812081906125f1906120ea856120f6565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612639929190918252602082015260400190565b60405180910390a25050505050565b600054610100900460ff1661266f5760405162461bcd60e51b8152600401610771906131e7565b6109d533611e13565b600054610100900460ff1661269f5760405162461bcd60e51b8152600401610771906131e7565b81516126b2906068906020850190612ade565b508051612360906069906020840190612ade565b600054610100900460ff166126ed5760405162461bcd60e51b8152600401610771906131e7565b8151612700906099906020850190612ade565b50805161271490609a906020840190612ade565b50506000609781905560985550565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561275a57506000905060036127de565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156127ae573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127d7576000600192509250506127de565b9150600090505b94509492505050565b60008160048111156127fb576127fb61326a565b14156128045750565b60018160048111156128185761281861326a565b14156128665760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610771565b600281600481111561287a5761287a61326a565b14156128c85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610771565b60038160048111156128dc576128dc61326a565b14156109985760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610771565b60006001600160e01b03821115611e0f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610771565b6000806129a9611e65565b8051909150156129c0578051602090910120919050565b60975480156129cf5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080612a02611e74565b805190915015612a19578051602090910120919050565b60985480156129cf5792915050565b600080608083901c15612a3d57608092831c92015b604083901c15612a4f57604092831c92015b602083901c15612a6157602092831c92015b601083901c15612a7357601092831c92015b600883901c15612a8557600892831c92015b600483901c15612a9757600492831c92015b600283901c15612aa957600292831c92015b600183901c156109bd5760010192915050565b6000818310612acb5781610987565b5090919050565b600061098782846131d0565b828054612aea9061311f565b90600052602060002090601f016020900481019282612b0c5760008555612b52565b82601f10612b2557805160ff1916838001178555612b52565b82800160010185558215612b52579182015b82811115612b52578251825591602001919060010190612b37565b50611e0f9291505b80821115611e0f5760008155600101612b5a565b80356001600160a01b0381168114612b8557600080fd5b919050565b600060208284031215612b9c57600080fd5b61098782612b6e565b6000815180845260005b81811015612bcb57602081850181015186830182015201612baf565b81811115612bdd576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006109876020830184612ba5565b60008060408385031215612c1857600080fd5b612c2183612b6e565b946020939093013593505050565b801515811461099857600080fd5b60008060408385031215612c5057600080fd5b612c5983612b6e565b91506020830135612c6981612c2f565b809150509250929050565b600080600060608486031215612c8957600080fd5b612c9284612b6e565b9250612ca060208501612b6e565b9150604084013590509250925092565b60ff60f81b881681526000602060e081840152612cd060e084018a612ba5565b8381036040850152612ce2818a612ba5565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015612d3457835183529284019291840191600101612d18565b50909c9b505050505050505050505050565b600060208284031215612d5857600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612d9e57612d9e612d5f565b604052919050565b600067ffffffffffffffff821115612dc057612dc0612d5f565b5060051b60200190565b600082601f830112612ddb57600080fd5b81356020612df0612deb83612da6565b612d75565b82815260059290921b84018101918181019086841115612e0f57600080fd5b8286015b84811015612e2a5780358352918301918301612e13565b509695505050505050565b60008060008060808587031215612e4b57600080fd5b612e5485612b6e565b935060208086013567ffffffffffffffff80821115612e7257600080fd5b818801915088601f830112612e8657600080fd5b8135612e94612deb82612da6565b81815260059190911b8301840190848101908b831115612eb357600080fd5b938501935b82851015612ed857612ec985612b6e565b82529385019390850190612eb8565b975050506040880135925080831115612ef057600080fd5b612efc89848a01612dca565b94506060880135925080831115612f1257600080fd5b5050612f2087828801612dca565b91505092959194509250565b60008083601f840112612f3e57600080fd5b50813567ffffffffffffffff811115612f5657600080fd5b6020830191508360208260051b8501011115612f7157600080fd5b9250929050565b60008060008060408587031215612f8e57600080fd5b843567ffffffffffffffff80821115612fa657600080fd5b612fb288838901612f2c565b90965094506020870135915080821115612fcb57600080fd5b50612fd887828801612f2c565b95989497509550505050565b803560ff81168114612b8557600080fd5b60008060008060008060c0878903121561300e57600080fd5b61301787612b6e565b9550602087013594506040870135935061303360608801612fe4565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561306857600080fd5b61307188612b6e565b965061307f60208901612b6e565b9550604088013594506060880135935061309b60808901612fe4565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156130ca57600080fd5b6130d383612b6e565b91506130e160208401612b6e565b90509250929050565b600080604083850312156130fd57600080fd5b61310683612b6e565b9150602083013563ffffffff81168114612c6957600080fd5b600181811c9082168061313357607f821691505b6020821081141561200f57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561317d5761317d613154565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156131ac576131ac613154565b5060010190565b6000602082840312156131c557600080fd5b815161098781612c2f565b6000828210156131e2576131e2613154565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261326557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220157f2ca25e510bd4fd72de78a17088fba90e2f64b3d97431afd1978ac5933b9664736f6c634300080c0033", +} + +// EigenABI is the input ABI used to generate the binding from. +// Deprecated: Use EigenMetaData.ABI instead. +var EigenABI = EigenMetaData.ABI + +// EigenBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use EigenMetaData.Bin instead. +var EigenBin = EigenMetaData.Bin + +// DeployEigen deploys a new Ethereum contract, binding an instance of Eigen to it. +func DeployEigen(auth *bind.TransactOpts, backend bind.ContractBackend, _bEIGEN common.Address) (common.Address, *types.Transaction, *Eigen, error) { + parsed, err := EigenMetaData.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(EigenBin), backend, _bEIGEN) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Eigen{EigenCaller: EigenCaller{contract: contract}, EigenTransactor: EigenTransactor{contract: contract}, EigenFilterer: EigenFilterer{contract: contract}}, nil +} + +// Eigen is an auto generated Go binding around an Ethereum contract. +type Eigen struct { + EigenCaller // Read-only binding to the contract + EigenTransactor // Write-only binding to the contract + EigenFilterer // Log filterer for contract events +} + +// EigenCaller is an auto generated read-only Go binding around an Ethereum contract. +type EigenCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenTransactor is an auto generated write-only Go binding around an Ethereum contract. +type EigenTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type EigenFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type EigenSession struct { + Contract *Eigen // 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 +} + +// EigenCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type EigenCallerSession struct { + Contract *EigenCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// EigenTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type EigenTransactorSession struct { + Contract *EigenTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// EigenRaw is an auto generated low-level Go binding around an Ethereum contract. +type EigenRaw struct { + Contract *Eigen // Generic contract binding to access the raw methods on +} + +// EigenCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type EigenCallerRaw struct { + Contract *EigenCaller // Generic read-only contract binding to access the raw methods on +} + +// EigenTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type EigenTransactorRaw struct { + Contract *EigenTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewEigen creates a new instance of Eigen, bound to a specific deployed contract. +func NewEigen(address common.Address, backend bind.ContractBackend) (*Eigen, error) { + contract, err := bindEigen(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Eigen{EigenCaller: EigenCaller{contract: contract}, EigenTransactor: EigenTransactor{contract: contract}, EigenFilterer: EigenFilterer{contract: contract}}, nil +} + +// NewEigenCaller creates a new read-only instance of Eigen, bound to a specific deployed contract. +func NewEigenCaller(address common.Address, caller bind.ContractCaller) (*EigenCaller, error) { + contract, err := bindEigen(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &EigenCaller{contract: contract}, nil +} + +// NewEigenTransactor creates a new write-only instance of Eigen, bound to a specific deployed contract. +func NewEigenTransactor(address common.Address, transactor bind.ContractTransactor) (*EigenTransactor, error) { + contract, err := bindEigen(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &EigenTransactor{contract: contract}, nil +} + +// NewEigenFilterer creates a new log filterer instance of Eigen, bound to a specific deployed contract. +func NewEigenFilterer(address common.Address, filterer bind.ContractFilterer) (*EigenFilterer, error) { + contract, err := bindEigen(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &EigenFilterer{contract: contract}, nil +} + +// bindEigen binds a generic wrapper to an already deployed contract. +func bindEigen(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := EigenMetaData.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 (_Eigen *EigenRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Eigen.Contract.EigenCaller.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 (_Eigen *EigenRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Eigen.Contract.EigenTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Eigen *EigenRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Eigen.Contract.EigenTransactor.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 (_Eigen *EigenCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Eigen.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 (_Eigen *EigenTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Eigen.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Eigen *EigenTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Eigen.Contract.contract.Transact(opts, method, params...) +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() pure returns(string) +func (_Eigen *EigenCaller) CLOCKMODE(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "CLOCK_MODE") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() pure returns(string) +func (_Eigen *EigenSession) CLOCKMODE() (string, error) { + return _Eigen.Contract.CLOCKMODE(&_Eigen.CallOpts) +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() pure returns(string) +func (_Eigen *EigenCallerSession) CLOCKMODE() (string, error) { + return _Eigen.Contract.CLOCKMODE(&_Eigen.CallOpts) +} + +// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515. +// +// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32) +func (_Eigen *EigenCaller) DOMAINSEPARATOR(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "DOMAIN_SEPARATOR") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515. +// +// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32) +func (_Eigen *EigenSession) DOMAINSEPARATOR() ([32]byte, error) { + return _Eigen.Contract.DOMAINSEPARATOR(&_Eigen.CallOpts) +} + +// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515. +// +// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32) +func (_Eigen *EigenCallerSession) DOMAINSEPARATOR() ([32]byte, error) { + return _Eigen.Contract.DOMAINSEPARATOR(&_Eigen.CallOpts) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_Eigen *EigenCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "allowance", owner, spender) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_Eigen *EigenSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _Eigen.Contract.Allowance(&_Eigen.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_Eigen *EigenCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _Eigen.Contract.Allowance(&_Eigen.CallOpts, owner, spender) +} + +// AllowedFrom is a free data retrieval call binding the contract method 0x0455e694. +// +// Solidity: function allowedFrom(address ) view returns(bool) +func (_Eigen *EigenCaller) AllowedFrom(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "allowedFrom", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedFrom is a free data retrieval call binding the contract method 0x0455e694. +// +// Solidity: function allowedFrom(address ) view returns(bool) +func (_Eigen *EigenSession) AllowedFrom(arg0 common.Address) (bool, error) { + return _Eigen.Contract.AllowedFrom(&_Eigen.CallOpts, arg0) +} + +// AllowedFrom is a free data retrieval call binding the contract method 0x0455e694. +// +// Solidity: function allowedFrom(address ) view returns(bool) +func (_Eigen *EigenCallerSession) AllowedFrom(arg0 common.Address) (bool, error) { + return _Eigen.Contract.AllowedFrom(&_Eigen.CallOpts, arg0) +} + +// AllowedTo is a free data retrieval call binding the contract method 0x78aa33ba. +// +// Solidity: function allowedTo(address ) view returns(bool) +func (_Eigen *EigenCaller) AllowedTo(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "allowedTo", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedTo is a free data retrieval call binding the contract method 0x78aa33ba. +// +// Solidity: function allowedTo(address ) view returns(bool) +func (_Eigen *EigenSession) AllowedTo(arg0 common.Address) (bool, error) { + return _Eigen.Contract.AllowedTo(&_Eigen.CallOpts, arg0) +} + +// AllowedTo is a free data retrieval call binding the contract method 0x78aa33ba. +// +// Solidity: function allowedTo(address ) view returns(bool) +func (_Eigen *EigenCallerSession) AllowedTo(arg0 common.Address) (bool, error) { + return _Eigen.Contract.AllowedTo(&_Eigen.CallOpts, arg0) +} + +// BEIGEN is a free data retrieval call binding the contract method 0x3f4da4c6. +// +// Solidity: function bEIGEN() view returns(address) +func (_Eigen *EigenCaller) BEIGEN(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "bEIGEN") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BEIGEN is a free data retrieval call binding the contract method 0x3f4da4c6. +// +// Solidity: function bEIGEN() view returns(address) +func (_Eigen *EigenSession) BEIGEN() (common.Address, error) { + return _Eigen.Contract.BEIGEN(&_Eigen.CallOpts) +} + +// BEIGEN is a free data retrieval call binding the contract method 0x3f4da4c6. +// +// Solidity: function bEIGEN() view returns(address) +func (_Eigen *EigenCallerSession) BEIGEN() (common.Address, error) { + return _Eigen.Contract.BEIGEN(&_Eigen.CallOpts) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_Eigen *EigenCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "balanceOf", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_Eigen *EigenSession) BalanceOf(account common.Address) (*big.Int, error) { + return _Eigen.Contract.BalanceOf(&_Eigen.CallOpts, account) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_Eigen *EigenCallerSession) BalanceOf(account common.Address) (*big.Int, error) { + return _Eigen.Contract.BalanceOf(&_Eigen.CallOpts, account) +} + +// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8. +// +// Solidity: function checkpoints(address account, uint32 pos) view returns((uint32,uint224)) +func (_Eigen *EigenCaller) Checkpoints(opts *bind.CallOpts, account common.Address, pos uint32) (ERC20VotesUpgradeableCheckpoint, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "checkpoints", account, pos) + + if err != nil { + return *new(ERC20VotesUpgradeableCheckpoint), err + } + + out0 := *abi.ConvertType(out[0], new(ERC20VotesUpgradeableCheckpoint)).(*ERC20VotesUpgradeableCheckpoint) + + return out0, err + +} + +// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8. +// +// Solidity: function checkpoints(address account, uint32 pos) view returns((uint32,uint224)) +func (_Eigen *EigenSession) Checkpoints(account common.Address, pos uint32) (ERC20VotesUpgradeableCheckpoint, error) { + return _Eigen.Contract.Checkpoints(&_Eigen.CallOpts, account, pos) +} + +// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8. +// +// Solidity: function checkpoints(address account, uint32 pos) view returns((uint32,uint224)) +func (_Eigen *EigenCallerSession) Checkpoints(account common.Address, pos uint32) (ERC20VotesUpgradeableCheckpoint, error) { + return _Eigen.Contract.Checkpoints(&_Eigen.CallOpts, account, pos) +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_Eigen *EigenCaller) Clock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "clock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_Eigen *EigenSession) Clock() (*big.Int, error) { + return _Eigen.Contract.Clock(&_Eigen.CallOpts) +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_Eigen *EigenCallerSession) Clock() (*big.Int, error) { + return _Eigen.Contract.Clock(&_Eigen.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_Eigen *EigenCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_Eigen *EigenSession) Decimals() (uint8, error) { + return _Eigen.Contract.Decimals(&_Eigen.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_Eigen *EigenCallerSession) Decimals() (uint8, error) { + return _Eigen.Contract.Decimals(&_Eigen.CallOpts) +} + +// Delegates is a free data retrieval call binding the contract method 0x587cde1e. +// +// Solidity: function delegates(address account) view returns(address) +func (_Eigen *EigenCaller) Delegates(opts *bind.CallOpts, account common.Address) (common.Address, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "delegates", account) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegates is a free data retrieval call binding the contract method 0x587cde1e. +// +// Solidity: function delegates(address account) view returns(address) +func (_Eigen *EigenSession) Delegates(account common.Address) (common.Address, error) { + return _Eigen.Contract.Delegates(&_Eigen.CallOpts, account) +} + +// Delegates is a free data retrieval call binding the contract method 0x587cde1e. +// +// Solidity: function delegates(address account) view returns(address) +func (_Eigen *EigenCallerSession) Delegates(account common.Address) (common.Address, error) { + return _Eigen.Contract.Delegates(&_Eigen.CallOpts, account) +} + +// Eip712Domain is a free data retrieval call binding the contract method 0x84b0196e. +// +// Solidity: function eip712Domain() view returns(bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions) +func (_Eigen *EigenCaller) Eip712Domain(opts *bind.CallOpts) (struct { + Fields [1]byte + Name string + Version string + ChainId *big.Int + VerifyingContract common.Address + Salt [32]byte + Extensions []*big.Int +}, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "eip712Domain") + + outstruct := new(struct { + Fields [1]byte + Name string + Version string + ChainId *big.Int + VerifyingContract common.Address + Salt [32]byte + Extensions []*big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.Fields = *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + outstruct.Name = *abi.ConvertType(out[1], new(string)).(*string) + outstruct.Version = *abi.ConvertType(out[2], new(string)).(*string) + outstruct.ChainId = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.VerifyingContract = *abi.ConvertType(out[4], new(common.Address)).(*common.Address) + outstruct.Salt = *abi.ConvertType(out[5], new([32]byte)).(*[32]byte) + outstruct.Extensions = *abi.ConvertType(out[6], new([]*big.Int)).(*[]*big.Int) + + return *outstruct, err + +} + +// Eip712Domain is a free data retrieval call binding the contract method 0x84b0196e. +// +// Solidity: function eip712Domain() view returns(bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions) +func (_Eigen *EigenSession) Eip712Domain() (struct { + Fields [1]byte + Name string + Version string + ChainId *big.Int + VerifyingContract common.Address + Salt [32]byte + Extensions []*big.Int +}, error) { + return _Eigen.Contract.Eip712Domain(&_Eigen.CallOpts) +} + +// Eip712Domain is a free data retrieval call binding the contract method 0x84b0196e. +// +// Solidity: function eip712Domain() view returns(bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions) +func (_Eigen *EigenCallerSession) Eip712Domain() (struct { + Fields [1]byte + Name string + Version string + ChainId *big.Int + VerifyingContract common.Address + Salt [32]byte + Extensions []*big.Int +}, error) { + return _Eigen.Contract.Eip712Domain(&_Eigen.CallOpts) +} + +// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c. +// +// Solidity: function getPastTotalSupply(uint256 timepoint) view returns(uint256) +func (_Eigen *EigenCaller) GetPastTotalSupply(opts *bind.CallOpts, timepoint *big.Int) (*big.Int, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "getPastTotalSupply", timepoint) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c. +// +// Solidity: function getPastTotalSupply(uint256 timepoint) view returns(uint256) +func (_Eigen *EigenSession) GetPastTotalSupply(timepoint *big.Int) (*big.Int, error) { + return _Eigen.Contract.GetPastTotalSupply(&_Eigen.CallOpts, timepoint) +} + +// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c. +// +// Solidity: function getPastTotalSupply(uint256 timepoint) view returns(uint256) +func (_Eigen *EigenCallerSession) GetPastTotalSupply(timepoint *big.Int) (*big.Int, error) { + return _Eigen.Contract.GetPastTotalSupply(&_Eigen.CallOpts, timepoint) +} + +// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8. +// +// Solidity: function getPastVotes(address account, uint256 timepoint) view returns(uint256) +func (_Eigen *EigenCaller) GetPastVotes(opts *bind.CallOpts, account common.Address, timepoint *big.Int) (*big.Int, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "getPastVotes", account, timepoint) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8. +// +// Solidity: function getPastVotes(address account, uint256 timepoint) view returns(uint256) +func (_Eigen *EigenSession) GetPastVotes(account common.Address, timepoint *big.Int) (*big.Int, error) { + return _Eigen.Contract.GetPastVotes(&_Eigen.CallOpts, account, timepoint) +} + +// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8. +// +// Solidity: function getPastVotes(address account, uint256 timepoint) view returns(uint256) +func (_Eigen *EigenCallerSession) GetPastVotes(account common.Address, timepoint *big.Int) (*big.Int, error) { + return _Eigen.Contract.GetPastVotes(&_Eigen.CallOpts, account, timepoint) +} + +// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0. +// +// Solidity: function getVotes(address account) view returns(uint256) +func (_Eigen *EigenCaller) GetVotes(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "getVotes", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0. +// +// Solidity: function getVotes(address account) view returns(uint256) +func (_Eigen *EigenSession) GetVotes(account common.Address) (*big.Int, error) { + return _Eigen.Contract.GetVotes(&_Eigen.CallOpts, account) +} + +// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0. +// +// Solidity: function getVotes(address account) view returns(uint256) +func (_Eigen *EigenCallerSession) GetVotes(account common.Address) (*big.Int, error) { + return _Eigen.Contract.GetVotes(&_Eigen.CallOpts, account) +} + +// MintAllowedAfter is a free data retrieval call binding the contract method 0x53957125. +// +// Solidity: function mintAllowedAfter(address ) view returns(uint256) +func (_Eigen *EigenCaller) MintAllowedAfter(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "mintAllowedAfter", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MintAllowedAfter is a free data retrieval call binding the contract method 0x53957125. +// +// Solidity: function mintAllowedAfter(address ) view returns(uint256) +func (_Eigen *EigenSession) MintAllowedAfter(arg0 common.Address) (*big.Int, error) { + return _Eigen.Contract.MintAllowedAfter(&_Eigen.CallOpts, arg0) +} + +// MintAllowedAfter is a free data retrieval call binding the contract method 0x53957125. +// +// Solidity: function mintAllowedAfter(address ) view returns(uint256) +func (_Eigen *EigenCallerSession) MintAllowedAfter(arg0 common.Address) (*big.Int, error) { + return _Eigen.Contract.MintAllowedAfter(&_Eigen.CallOpts, arg0) +} + +// MintingAllowance is a free data retrieval call binding the contract method 0x81b97161. +// +// Solidity: function mintingAllowance(address ) view returns(uint256) +func (_Eigen *EigenCaller) MintingAllowance(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "mintingAllowance", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MintingAllowance is a free data retrieval call binding the contract method 0x81b97161. +// +// Solidity: function mintingAllowance(address ) view returns(uint256) +func (_Eigen *EigenSession) MintingAllowance(arg0 common.Address) (*big.Int, error) { + return _Eigen.Contract.MintingAllowance(&_Eigen.CallOpts, arg0) +} + +// MintingAllowance is a free data retrieval call binding the contract method 0x81b97161. +// +// Solidity: function mintingAllowance(address ) view returns(uint256) +func (_Eigen *EigenCallerSession) MintingAllowance(arg0 common.Address) (*big.Int, error) { + return _Eigen.Contract.MintingAllowance(&_Eigen.CallOpts, arg0) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_Eigen *EigenCaller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_Eigen *EigenSession) Name() (string, error) { + return _Eigen.Contract.Name(&_Eigen.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_Eigen *EigenCallerSession) Name() (string, error) { + return _Eigen.Contract.Name(&_Eigen.CallOpts) +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address owner) view returns(uint256) +func (_Eigen *EigenCaller) Nonces(opts *bind.CallOpts, owner common.Address) (*big.Int, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "nonces", owner) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address owner) view returns(uint256) +func (_Eigen *EigenSession) Nonces(owner common.Address) (*big.Int, error) { + return _Eigen.Contract.Nonces(&_Eigen.CallOpts, owner) +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address owner) view returns(uint256) +func (_Eigen *EigenCallerSession) Nonces(owner common.Address) (*big.Int, error) { + return _Eigen.Contract.Nonces(&_Eigen.CallOpts, owner) +} + +// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45. +// +// Solidity: function numCheckpoints(address account) view returns(uint32) +func (_Eigen *EigenCaller) NumCheckpoints(opts *bind.CallOpts, account common.Address) (uint32, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "numCheckpoints", account) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45. +// +// Solidity: function numCheckpoints(address account) view returns(uint32) +func (_Eigen *EigenSession) NumCheckpoints(account common.Address) (uint32, error) { + return _Eigen.Contract.NumCheckpoints(&_Eigen.CallOpts, account) +} + +// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45. +// +// Solidity: function numCheckpoints(address account) view returns(uint32) +func (_Eigen *EigenCallerSession) NumCheckpoints(account common.Address) (uint32, error) { + return _Eigen.Contract.NumCheckpoints(&_Eigen.CallOpts, account) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_Eigen *EigenCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Eigen.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 (_Eigen *EigenSession) Owner() (common.Address, error) { + return _Eigen.Contract.Owner(&_Eigen.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_Eigen *EigenCallerSession) Owner() (common.Address, error) { + return _Eigen.Contract.Owner(&_Eigen.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_Eigen *EigenCaller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_Eigen *EigenSession) Symbol() (string, error) { + return _Eigen.Contract.Symbol(&_Eigen.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_Eigen *EigenCallerSession) Symbol() (string, error) { + return _Eigen.Contract.Symbol(&_Eigen.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_Eigen *EigenCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_Eigen *EigenSession) TotalSupply() (*big.Int, error) { + return _Eigen.Contract.TotalSupply(&_Eigen.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_Eigen *EigenCallerSession) TotalSupply() (*big.Int, error) { + return _Eigen.Contract.TotalSupply(&_Eigen.CallOpts) +} + +// TransferRestrictionsDisabledAfter is a free data retrieval call binding the contract method 0x9aec4bae. +// +// Solidity: function transferRestrictionsDisabledAfter() view returns(uint256) +func (_Eigen *EigenCaller) TransferRestrictionsDisabledAfter(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Eigen.contract.Call(opts, &out, "transferRestrictionsDisabledAfter") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TransferRestrictionsDisabledAfter is a free data retrieval call binding the contract method 0x9aec4bae. +// +// Solidity: function transferRestrictionsDisabledAfter() view returns(uint256) +func (_Eigen *EigenSession) TransferRestrictionsDisabledAfter() (*big.Int, error) { + return _Eigen.Contract.TransferRestrictionsDisabledAfter(&_Eigen.CallOpts) +} + +// TransferRestrictionsDisabledAfter is a free data retrieval call binding the contract method 0x9aec4bae. +// +// Solidity: function transferRestrictionsDisabledAfter() view returns(uint256) +func (_Eigen *EigenCallerSession) TransferRestrictionsDisabledAfter() (*big.Int, error) { + return _Eigen.Contract.TransferRestrictionsDisabledAfter(&_Eigen.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_Eigen *EigenTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "approve", spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_Eigen *EigenSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _Eigen.Contract.Approve(&_Eigen.TransactOpts, spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_Eigen *EigenTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _Eigen.Contract.Approve(&_Eigen.TransactOpts, spender, amount) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_Eigen *EigenTransactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "decreaseAllowance", spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_Eigen *EigenSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _Eigen.Contract.DecreaseAllowance(&_Eigen.TransactOpts, spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_Eigen *EigenTransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _Eigen.Contract.DecreaseAllowance(&_Eigen.TransactOpts, spender, subtractedValue) +} + +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. +// +// Solidity: function delegate(address delegatee) returns() +func (_Eigen *EigenTransactor) Delegate(opts *bind.TransactOpts, delegatee common.Address) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "delegate", delegatee) +} + +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. +// +// Solidity: function delegate(address delegatee) returns() +func (_Eigen *EigenSession) Delegate(delegatee common.Address) (*types.Transaction, error) { + return _Eigen.Contract.Delegate(&_Eigen.TransactOpts, delegatee) +} + +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. +// +// Solidity: function delegate(address delegatee) returns() +func (_Eigen *EigenTransactorSession) Delegate(delegatee common.Address) (*types.Transaction, error) { + return _Eigen.Contract.Delegate(&_Eigen.TransactOpts, delegatee) +} + +// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520. +// +// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns() +func (_Eigen *EigenTransactor) DelegateBySig(opts *bind.TransactOpts, delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "delegateBySig", delegatee, nonce, expiry, v, r, s) +} + +// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520. +// +// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns() +func (_Eigen *EigenSession) DelegateBySig(delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _Eigen.Contract.DelegateBySig(&_Eigen.TransactOpts, delegatee, nonce, expiry, v, r, s) +} + +// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520. +// +// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns() +func (_Eigen *EigenTransactorSession) DelegateBySig(delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _Eigen.Contract.DelegateBySig(&_Eigen.TransactOpts, delegatee, nonce, expiry, v, r, s) +} + +// DisableTransferRestrictions is a paid mutator transaction binding the contract method 0xeb415f45. +// +// Solidity: function disableTransferRestrictions() returns() +func (_Eigen *EigenTransactor) DisableTransferRestrictions(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "disableTransferRestrictions") +} + +// DisableTransferRestrictions is a paid mutator transaction binding the contract method 0xeb415f45. +// +// Solidity: function disableTransferRestrictions() returns() +func (_Eigen *EigenSession) DisableTransferRestrictions() (*types.Transaction, error) { + return _Eigen.Contract.DisableTransferRestrictions(&_Eigen.TransactOpts) +} + +// DisableTransferRestrictions is a paid mutator transaction binding the contract method 0xeb415f45. +// +// Solidity: function disableTransferRestrictions() returns() +func (_Eigen *EigenTransactorSession) DisableTransferRestrictions() (*types.Transaction, error) { + return _Eigen.Contract.DisableTransferRestrictions(&_Eigen.TransactOpts) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_Eigen *EigenTransactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "increaseAllowance", spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_Eigen *EigenSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _Eigen.Contract.IncreaseAllowance(&_Eigen.TransactOpts, spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_Eigen *EigenTransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _Eigen.Contract.IncreaseAllowance(&_Eigen.TransactOpts, spender, addedValue) +} + +// Initialize is a paid mutator transaction binding the contract method 0xa7d1195d. +// +// Solidity: function initialize(address initialOwner, address[] minters, uint256[] mintingAllowances, uint256[] mintAllowedAfters) returns() +func (_Eigen *EigenTransactor) Initialize(opts *bind.TransactOpts, initialOwner common.Address, minters []common.Address, mintingAllowances []*big.Int, mintAllowedAfters []*big.Int) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "initialize", initialOwner, minters, mintingAllowances, mintAllowedAfters) +} + +// Initialize is a paid mutator transaction binding the contract method 0xa7d1195d. +// +// Solidity: function initialize(address initialOwner, address[] minters, uint256[] mintingAllowances, uint256[] mintAllowedAfters) returns() +func (_Eigen *EigenSession) Initialize(initialOwner common.Address, minters []common.Address, mintingAllowances []*big.Int, mintAllowedAfters []*big.Int) (*types.Transaction, error) { + return _Eigen.Contract.Initialize(&_Eigen.TransactOpts, initialOwner, minters, mintingAllowances, mintAllowedAfters) +} + +// Initialize is a paid mutator transaction binding the contract method 0xa7d1195d. +// +// Solidity: function initialize(address initialOwner, address[] minters, uint256[] mintingAllowances, uint256[] mintAllowedAfters) returns() +func (_Eigen *EigenTransactorSession) Initialize(initialOwner common.Address, minters []common.Address, mintingAllowances []*big.Int, mintAllowedAfters []*big.Int) (*types.Transaction, error) { + return _Eigen.Contract.Initialize(&_Eigen.TransactOpts, initialOwner, minters, mintingAllowances, mintAllowedAfters) +} + +// Mint is a paid mutator transaction binding the contract method 0x1249c58b. +// +// Solidity: function mint() returns() +func (_Eigen *EigenTransactor) Mint(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "mint") +} + +// Mint is a paid mutator transaction binding the contract method 0x1249c58b. +// +// Solidity: function mint() returns() +func (_Eigen *EigenSession) Mint() (*types.Transaction, error) { + return _Eigen.Contract.Mint(&_Eigen.TransactOpts) +} + +// Mint is a paid mutator transaction binding the contract method 0x1249c58b. +// +// Solidity: function mint() returns() +func (_Eigen *EigenTransactorSession) Mint() (*types.Transaction, error) { + return _Eigen.Contract.Mint(&_Eigen.TransactOpts) +} + +// Multisend is a paid mutator transaction binding the contract method 0xaad41a41. +// +// Solidity: function multisend(address[] receivers, uint256[] amounts) returns() +func (_Eigen *EigenTransactor) Multisend(opts *bind.TransactOpts, receivers []common.Address, amounts []*big.Int) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "multisend", receivers, amounts) +} + +// Multisend is a paid mutator transaction binding the contract method 0xaad41a41. +// +// Solidity: function multisend(address[] receivers, uint256[] amounts) returns() +func (_Eigen *EigenSession) Multisend(receivers []common.Address, amounts []*big.Int) (*types.Transaction, error) { + return _Eigen.Contract.Multisend(&_Eigen.TransactOpts, receivers, amounts) +} + +// Multisend is a paid mutator transaction binding the contract method 0xaad41a41. +// +// Solidity: function multisend(address[] receivers, uint256[] amounts) returns() +func (_Eigen *EigenTransactorSession) Multisend(receivers []common.Address, amounts []*big.Int) (*types.Transaction, error) { + return _Eigen.Contract.Multisend(&_Eigen.TransactOpts, receivers, amounts) +} + +// Permit is a paid mutator transaction binding the contract method 0xd505accf. +// +// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns() +func (_Eigen *EigenTransactor) Permit(opts *bind.TransactOpts, owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "permit", owner, spender, value, deadline, v, r, s) +} + +// Permit is a paid mutator transaction binding the contract method 0xd505accf. +// +// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns() +func (_Eigen *EigenSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _Eigen.Contract.Permit(&_Eigen.TransactOpts, owner, spender, value, deadline, v, r, s) +} + +// Permit is a paid mutator transaction binding the contract method 0xd505accf. +// +// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns() +func (_Eigen *EigenTransactorSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _Eigen.Contract.Permit(&_Eigen.TransactOpts, owner, spender, value, deadline, v, r, s) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_Eigen *EigenTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_Eigen *EigenSession) RenounceOwnership() (*types.Transaction, error) { + return _Eigen.Contract.RenounceOwnership(&_Eigen.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_Eigen *EigenTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _Eigen.Contract.RenounceOwnership(&_Eigen.TransactOpts) +} + +// SetAllowedFrom is a paid mutator transaction binding the contract method 0x1ffacdef. +// +// Solidity: function setAllowedFrom(address from, bool isAllowedFrom) returns() +func (_Eigen *EigenTransactor) SetAllowedFrom(opts *bind.TransactOpts, from common.Address, isAllowedFrom bool) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "setAllowedFrom", from, isAllowedFrom) +} + +// SetAllowedFrom is a paid mutator transaction binding the contract method 0x1ffacdef. +// +// Solidity: function setAllowedFrom(address from, bool isAllowedFrom) returns() +func (_Eigen *EigenSession) SetAllowedFrom(from common.Address, isAllowedFrom bool) (*types.Transaction, error) { + return _Eigen.Contract.SetAllowedFrom(&_Eigen.TransactOpts, from, isAllowedFrom) +} + +// SetAllowedFrom is a paid mutator transaction binding the contract method 0x1ffacdef. +// +// Solidity: function setAllowedFrom(address from, bool isAllowedFrom) returns() +func (_Eigen *EigenTransactorSession) SetAllowedFrom(from common.Address, isAllowedFrom bool) (*types.Transaction, error) { + return _Eigen.Contract.SetAllowedFrom(&_Eigen.TransactOpts, from, isAllowedFrom) +} + +// SetAllowedTo is a paid mutator transaction binding the contract method 0xb8c25594. +// +// Solidity: function setAllowedTo(address to, bool isAllowedTo) returns() +func (_Eigen *EigenTransactor) SetAllowedTo(opts *bind.TransactOpts, to common.Address, isAllowedTo bool) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "setAllowedTo", to, isAllowedTo) +} + +// SetAllowedTo is a paid mutator transaction binding the contract method 0xb8c25594. +// +// Solidity: function setAllowedTo(address to, bool isAllowedTo) returns() +func (_Eigen *EigenSession) SetAllowedTo(to common.Address, isAllowedTo bool) (*types.Transaction, error) { + return _Eigen.Contract.SetAllowedTo(&_Eigen.TransactOpts, to, isAllowedTo) +} + +// SetAllowedTo is a paid mutator transaction binding the contract method 0xb8c25594. +// +// Solidity: function setAllowedTo(address to, bool isAllowedTo) returns() +func (_Eigen *EigenTransactorSession) SetAllowedTo(to common.Address, isAllowedTo bool) (*types.Transaction, error) { + return _Eigen.Contract.SetAllowedTo(&_Eigen.TransactOpts, to, isAllowedTo) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_Eigen *EigenTransactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "transfer", to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_Eigen *EigenSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _Eigen.Contract.Transfer(&_Eigen.TransactOpts, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_Eigen *EigenTransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _Eigen.Contract.Transfer(&_Eigen.TransactOpts, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_Eigen *EigenTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "transferFrom", from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_Eigen *EigenSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _Eigen.Contract.TransferFrom(&_Eigen.TransactOpts, from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_Eigen *EigenTransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _Eigen.Contract.TransferFrom(&_Eigen.TransactOpts, from, to, amount) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_Eigen *EigenTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_Eigen *EigenSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _Eigen.Contract.TransferOwnership(&_Eigen.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_Eigen *EigenTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _Eigen.Contract.TransferOwnership(&_Eigen.TransactOpts, newOwner) +} + +// Unwrap is a paid mutator transaction binding the contract method 0xde0e9a3e. +// +// Solidity: function unwrap(uint256 amount) returns() +func (_Eigen *EigenTransactor) Unwrap(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "unwrap", amount) +} + +// Unwrap is a paid mutator transaction binding the contract method 0xde0e9a3e. +// +// Solidity: function unwrap(uint256 amount) returns() +func (_Eigen *EigenSession) Unwrap(amount *big.Int) (*types.Transaction, error) { + return _Eigen.Contract.Unwrap(&_Eigen.TransactOpts, amount) +} + +// Unwrap is a paid mutator transaction binding the contract method 0xde0e9a3e. +// +// Solidity: function unwrap(uint256 amount) returns() +func (_Eigen *EigenTransactorSession) Unwrap(amount *big.Int) (*types.Transaction, error) { + return _Eigen.Contract.Unwrap(&_Eigen.TransactOpts, amount) +} + +// Wrap is a paid mutator transaction binding the contract method 0xea598cb0. +// +// Solidity: function wrap(uint256 amount) returns() +func (_Eigen *EigenTransactor) Wrap(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _Eigen.contract.Transact(opts, "wrap", amount) +} + +// Wrap is a paid mutator transaction binding the contract method 0xea598cb0. +// +// Solidity: function wrap(uint256 amount) returns() +func (_Eigen *EigenSession) Wrap(amount *big.Int) (*types.Transaction, error) { + return _Eigen.Contract.Wrap(&_Eigen.TransactOpts, amount) +} + +// Wrap is a paid mutator transaction binding the contract method 0xea598cb0. +// +// Solidity: function wrap(uint256 amount) returns() +func (_Eigen *EigenTransactorSession) Wrap(amount *big.Int) (*types.Transaction, error) { + return _Eigen.Contract.Wrap(&_Eigen.TransactOpts, amount) +} + +// EigenApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the Eigen contract. +type EigenApprovalIterator struct { + Event *EigenApproval // 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 *EigenApprovalIterator) 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(EigenApproval) + 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(EigenApproval) + 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 *EigenApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenApproval represents a Approval event raised by the Eigen contract. +type EigenApproval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_Eigen *EigenFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*EigenApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _Eigen.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &EigenApprovalIterator{contract: _Eigen.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_Eigen *EigenFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *EigenApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _Eigen.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + 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(EigenApproval) + if err := _Eigen.contract.UnpackLog(event, "Approval", 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 +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_Eigen *EigenFilterer) ParseApproval(log types.Log) (*EigenApproval, error) { + event := new(EigenApproval) + if err := _Eigen.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenDelegateChangedIterator is returned from FilterDelegateChanged and is used to iterate over the raw logs and unpacked data for DelegateChanged events raised by the Eigen contract. +type EigenDelegateChangedIterator struct { + Event *EigenDelegateChanged // 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 *EigenDelegateChangedIterator) 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(EigenDelegateChanged) + 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(EigenDelegateChanged) + 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 *EigenDelegateChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenDelegateChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenDelegateChanged represents a DelegateChanged event raised by the Eigen contract. +type EigenDelegateChanged struct { + Delegator common.Address + FromDelegate common.Address + ToDelegate common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDelegateChanged is a free log retrieval operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f. +// +// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate) +func (_Eigen *EigenFilterer) FilterDelegateChanged(opts *bind.FilterOpts, delegator []common.Address, fromDelegate []common.Address, toDelegate []common.Address) (*EigenDelegateChangedIterator, error) { + + var delegatorRule []interface{} + for _, delegatorItem := range delegator { + delegatorRule = append(delegatorRule, delegatorItem) + } + var fromDelegateRule []interface{} + for _, fromDelegateItem := range fromDelegate { + fromDelegateRule = append(fromDelegateRule, fromDelegateItem) + } + var toDelegateRule []interface{} + for _, toDelegateItem := range toDelegate { + toDelegateRule = append(toDelegateRule, toDelegateItem) + } + + logs, sub, err := _Eigen.contract.FilterLogs(opts, "DelegateChanged", delegatorRule, fromDelegateRule, toDelegateRule) + if err != nil { + return nil, err + } + return &EigenDelegateChangedIterator{contract: _Eigen.contract, event: "DelegateChanged", logs: logs, sub: sub}, nil +} + +// WatchDelegateChanged is a free log subscription operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f. +// +// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate) +func (_Eigen *EigenFilterer) WatchDelegateChanged(opts *bind.WatchOpts, sink chan<- *EigenDelegateChanged, delegator []common.Address, fromDelegate []common.Address, toDelegate []common.Address) (event.Subscription, error) { + + var delegatorRule []interface{} + for _, delegatorItem := range delegator { + delegatorRule = append(delegatorRule, delegatorItem) + } + var fromDelegateRule []interface{} + for _, fromDelegateItem := range fromDelegate { + fromDelegateRule = append(fromDelegateRule, fromDelegateItem) + } + var toDelegateRule []interface{} + for _, toDelegateItem := range toDelegate { + toDelegateRule = append(toDelegateRule, toDelegateItem) + } + + logs, sub, err := _Eigen.contract.WatchLogs(opts, "DelegateChanged", delegatorRule, fromDelegateRule, toDelegateRule) + 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(EigenDelegateChanged) + if err := _Eigen.contract.UnpackLog(event, "DelegateChanged", 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 +} + +// ParseDelegateChanged is a log parse operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f. +// +// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate) +func (_Eigen *EigenFilterer) ParseDelegateChanged(log types.Log) (*EigenDelegateChanged, error) { + event := new(EigenDelegateChanged) + if err := _Eigen.contract.UnpackLog(event, "DelegateChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenDelegateVotesChangedIterator is returned from FilterDelegateVotesChanged and is used to iterate over the raw logs and unpacked data for DelegateVotesChanged events raised by the Eigen contract. +type EigenDelegateVotesChangedIterator struct { + Event *EigenDelegateVotesChanged // 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 *EigenDelegateVotesChangedIterator) 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(EigenDelegateVotesChanged) + 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(EigenDelegateVotesChanged) + 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 *EigenDelegateVotesChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenDelegateVotesChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenDelegateVotesChanged represents a DelegateVotesChanged event raised by the Eigen contract. +type EigenDelegateVotesChanged struct { + Delegate common.Address + PreviousBalance *big.Int + NewBalance *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDelegateVotesChanged is a free log retrieval operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724. +// +// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance) +func (_Eigen *EigenFilterer) FilterDelegateVotesChanged(opts *bind.FilterOpts, delegate []common.Address) (*EigenDelegateVotesChangedIterator, error) { + + var delegateRule []interface{} + for _, delegateItem := range delegate { + delegateRule = append(delegateRule, delegateItem) + } + + logs, sub, err := _Eigen.contract.FilterLogs(opts, "DelegateVotesChanged", delegateRule) + if err != nil { + return nil, err + } + return &EigenDelegateVotesChangedIterator{contract: _Eigen.contract, event: "DelegateVotesChanged", logs: logs, sub: sub}, nil +} + +// WatchDelegateVotesChanged is a free log subscription operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724. +// +// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance) +func (_Eigen *EigenFilterer) WatchDelegateVotesChanged(opts *bind.WatchOpts, sink chan<- *EigenDelegateVotesChanged, delegate []common.Address) (event.Subscription, error) { + + var delegateRule []interface{} + for _, delegateItem := range delegate { + delegateRule = append(delegateRule, delegateItem) + } + + logs, sub, err := _Eigen.contract.WatchLogs(opts, "DelegateVotesChanged", delegateRule) + 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(EigenDelegateVotesChanged) + if err := _Eigen.contract.UnpackLog(event, "DelegateVotesChanged", 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 +} + +// ParseDelegateVotesChanged is a log parse operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724. +// +// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance) +func (_Eigen *EigenFilterer) ParseDelegateVotesChanged(log types.Log) (*EigenDelegateVotesChanged, error) { + event := new(EigenDelegateVotesChanged) + if err := _Eigen.contract.UnpackLog(event, "DelegateVotesChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenEIP712DomainChangedIterator is returned from FilterEIP712DomainChanged and is used to iterate over the raw logs and unpacked data for EIP712DomainChanged events raised by the Eigen contract. +type EigenEIP712DomainChangedIterator struct { + Event *EigenEIP712DomainChanged // 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 *EigenEIP712DomainChangedIterator) 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(EigenEIP712DomainChanged) + 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(EigenEIP712DomainChanged) + 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 *EigenEIP712DomainChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenEIP712DomainChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenEIP712DomainChanged represents a EIP712DomainChanged event raised by the Eigen contract. +type EigenEIP712DomainChanged struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterEIP712DomainChanged is a free log retrieval operation binding the contract event 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31. +// +// Solidity: event EIP712DomainChanged() +func (_Eigen *EigenFilterer) FilterEIP712DomainChanged(opts *bind.FilterOpts) (*EigenEIP712DomainChangedIterator, error) { + + logs, sub, err := _Eigen.contract.FilterLogs(opts, "EIP712DomainChanged") + if err != nil { + return nil, err + } + return &EigenEIP712DomainChangedIterator{contract: _Eigen.contract, event: "EIP712DomainChanged", logs: logs, sub: sub}, nil +} + +// WatchEIP712DomainChanged is a free log subscription operation binding the contract event 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31. +// +// Solidity: event EIP712DomainChanged() +func (_Eigen *EigenFilterer) WatchEIP712DomainChanged(opts *bind.WatchOpts, sink chan<- *EigenEIP712DomainChanged) (event.Subscription, error) { + + logs, sub, err := _Eigen.contract.WatchLogs(opts, "EIP712DomainChanged") + 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(EigenEIP712DomainChanged) + if err := _Eigen.contract.UnpackLog(event, "EIP712DomainChanged", 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 +} + +// ParseEIP712DomainChanged is a log parse operation binding the contract event 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31. +// +// Solidity: event EIP712DomainChanged() +func (_Eigen *EigenFilterer) ParseEIP712DomainChanged(log types.Log) (*EigenEIP712DomainChanged, error) { + event := new(EigenEIP712DomainChanged) + if err := _Eigen.contract.UnpackLog(event, "EIP712DomainChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the Eigen contract. +type EigenInitializedIterator struct { + Event *EigenInitialized // 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 *EigenInitializedIterator) 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(EigenInitialized) + 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(EigenInitialized) + 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 *EigenInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenInitialized represents a Initialized event raised by the Eigen contract. +type EigenInitialized 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 (_Eigen *EigenFilterer) FilterInitialized(opts *bind.FilterOpts) (*EigenInitializedIterator, error) { + + logs, sub, err := _Eigen.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &EigenInitializedIterator{contract: _Eigen.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 (_Eigen *EigenFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *EigenInitialized) (event.Subscription, error) { + + logs, sub, err := _Eigen.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(EigenInitialized) + if err := _Eigen.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 (_Eigen *EigenFilterer) ParseInitialized(log types.Log) (*EigenInitialized, error) { + event := new(EigenInitialized) + if err := _Eigen.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenMintIterator is returned from FilterMint and is used to iterate over the raw logs and unpacked data for Mint events raised by the Eigen contract. +type EigenMintIterator struct { + Event *EigenMint // 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 *EigenMintIterator) 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(EigenMint) + 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(EigenMint) + 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 *EigenMintIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenMintIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenMint represents a Mint event raised by the Eigen contract. +type EigenMint struct { + Minter common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMint is a free log retrieval operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885. +// +// Solidity: event Mint(address indexed minter, uint256 amount) +func (_Eigen *EigenFilterer) FilterMint(opts *bind.FilterOpts, minter []common.Address) (*EigenMintIterator, error) { + + var minterRule []interface{} + for _, minterItem := range minter { + minterRule = append(minterRule, minterItem) + } + + logs, sub, err := _Eigen.contract.FilterLogs(opts, "Mint", minterRule) + if err != nil { + return nil, err + } + return &EigenMintIterator{contract: _Eigen.contract, event: "Mint", logs: logs, sub: sub}, nil +} + +// WatchMint is a free log subscription operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885. +// +// Solidity: event Mint(address indexed minter, uint256 amount) +func (_Eigen *EigenFilterer) WatchMint(opts *bind.WatchOpts, sink chan<- *EigenMint, minter []common.Address) (event.Subscription, error) { + + var minterRule []interface{} + for _, minterItem := range minter { + minterRule = append(minterRule, minterItem) + } + + logs, sub, err := _Eigen.contract.WatchLogs(opts, "Mint", minterRule) + 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(EigenMint) + if err := _Eigen.contract.UnpackLog(event, "Mint", 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 +} + +// ParseMint is a log parse operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885. +// +// Solidity: event Mint(address indexed minter, uint256 amount) +func (_Eigen *EigenFilterer) ParseMint(log types.Log) (*EigenMint, error) { + event := new(EigenMint) + if err := _Eigen.contract.UnpackLog(event, "Mint", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the Eigen contract. +type EigenOwnershipTransferredIterator struct { + Event *EigenOwnershipTransferred // 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 *EigenOwnershipTransferredIterator) 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(EigenOwnershipTransferred) + 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(EigenOwnershipTransferred) + 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 *EigenOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenOwnershipTransferred represents a OwnershipTransferred event raised by the Eigen contract. +type EigenOwnershipTransferred 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 (_Eigen *EigenFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*EigenOwnershipTransferredIterator, 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 := _Eigen.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &EigenOwnershipTransferredIterator{contract: _Eigen.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 (_Eigen *EigenFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *EigenOwnershipTransferred, 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 := _Eigen.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(EigenOwnershipTransferred) + if err := _Eigen.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 (_Eigen *EigenFilterer) ParseOwnershipTransferred(log types.Log) (*EigenOwnershipTransferred, error) { + event := new(EigenOwnershipTransferred) + if err := _Eigen.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenSetAllowedFromIterator is returned from FilterSetAllowedFrom and is used to iterate over the raw logs and unpacked data for SetAllowedFrom events raised by the Eigen contract. +type EigenSetAllowedFromIterator struct { + Event *EigenSetAllowedFrom // 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 *EigenSetAllowedFromIterator) 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(EigenSetAllowedFrom) + 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(EigenSetAllowedFrom) + 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 *EigenSetAllowedFromIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenSetAllowedFromIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenSetAllowedFrom represents a SetAllowedFrom event raised by the Eigen contract. +type EigenSetAllowedFrom struct { + From common.Address + IsAllowedFrom bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSetAllowedFrom is a free log retrieval operation binding the contract event 0xcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed2843622271. +// +// Solidity: event SetAllowedFrom(address indexed from, bool isAllowedFrom) +func (_Eigen *EigenFilterer) FilterSetAllowedFrom(opts *bind.FilterOpts, from []common.Address) (*EigenSetAllowedFromIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _Eigen.contract.FilterLogs(opts, "SetAllowedFrom", fromRule) + if err != nil { + return nil, err + } + return &EigenSetAllowedFromIterator{contract: _Eigen.contract, event: "SetAllowedFrom", logs: logs, sub: sub}, nil +} + +// WatchSetAllowedFrom is a free log subscription operation binding the contract event 0xcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed2843622271. +// +// Solidity: event SetAllowedFrom(address indexed from, bool isAllowedFrom) +func (_Eigen *EigenFilterer) WatchSetAllowedFrom(opts *bind.WatchOpts, sink chan<- *EigenSetAllowedFrom, from []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _Eigen.contract.WatchLogs(opts, "SetAllowedFrom", fromRule) + 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(EigenSetAllowedFrom) + if err := _Eigen.contract.UnpackLog(event, "SetAllowedFrom", 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 +} + +// ParseSetAllowedFrom is a log parse operation binding the contract event 0xcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed2843622271. +// +// Solidity: event SetAllowedFrom(address indexed from, bool isAllowedFrom) +func (_Eigen *EigenFilterer) ParseSetAllowedFrom(log types.Log) (*EigenSetAllowedFrom, error) { + event := new(EigenSetAllowedFrom) + if err := _Eigen.contract.UnpackLog(event, "SetAllowedFrom", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenSetAllowedToIterator is returned from FilterSetAllowedTo and is used to iterate over the raw logs and unpacked data for SetAllowedTo events raised by the Eigen contract. +type EigenSetAllowedToIterator struct { + Event *EigenSetAllowedTo // 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 *EigenSetAllowedToIterator) 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(EigenSetAllowedTo) + 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(EigenSetAllowedTo) + 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 *EigenSetAllowedToIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenSetAllowedToIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenSetAllowedTo represents a SetAllowedTo event raised by the Eigen contract. +type EigenSetAllowedTo struct { + To common.Address + IsAllowedTo bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSetAllowedTo is a free log retrieval operation binding the contract event 0x72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b. +// +// Solidity: event SetAllowedTo(address indexed to, bool isAllowedTo) +func (_Eigen *EigenFilterer) FilterSetAllowedTo(opts *bind.FilterOpts, to []common.Address) (*EigenSetAllowedToIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _Eigen.contract.FilterLogs(opts, "SetAllowedTo", toRule) + if err != nil { + return nil, err + } + return &EigenSetAllowedToIterator{contract: _Eigen.contract, event: "SetAllowedTo", logs: logs, sub: sub}, nil +} + +// WatchSetAllowedTo is a free log subscription operation binding the contract event 0x72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b. +// +// Solidity: event SetAllowedTo(address indexed to, bool isAllowedTo) +func (_Eigen *EigenFilterer) WatchSetAllowedTo(opts *bind.WatchOpts, sink chan<- *EigenSetAllowedTo, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _Eigen.contract.WatchLogs(opts, "SetAllowedTo", toRule) + 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(EigenSetAllowedTo) + if err := _Eigen.contract.UnpackLog(event, "SetAllowedTo", 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 +} + +// ParseSetAllowedTo is a log parse operation binding the contract event 0x72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b. +// +// Solidity: event SetAllowedTo(address indexed to, bool isAllowedTo) +func (_Eigen *EigenFilterer) ParseSetAllowedTo(log types.Log) (*EigenSetAllowedTo, error) { + event := new(EigenSetAllowedTo) + if err := _Eigen.contract.UnpackLog(event, "SetAllowedTo", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the Eigen contract. +type EigenTransferIterator struct { + Event *EigenTransfer // 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 *EigenTransferIterator) 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(EigenTransfer) + 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(EigenTransfer) + 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 *EigenTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenTransfer represents a Transfer event raised by the Eigen contract. +type EigenTransfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_Eigen *EigenFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*EigenTransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _Eigen.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &EigenTransferIterator{contract: _Eigen.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_Eigen *EigenFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *EigenTransfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _Eigen.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + 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(EigenTransfer) + if err := _Eigen.contract.UnpackLog(event, "Transfer", 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 +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_Eigen *EigenFilterer) ParseTransfer(log types.Log) (*EigenTransfer, error) { + event := new(EigenTransfer) + if err := _Eigen.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenTransferRestrictionsDisabledIterator is returned from FilterTransferRestrictionsDisabled and is used to iterate over the raw logs and unpacked data for TransferRestrictionsDisabled events raised by the Eigen contract. +type EigenTransferRestrictionsDisabledIterator struct { + Event *EigenTransferRestrictionsDisabled // 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 *EigenTransferRestrictionsDisabledIterator) 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(EigenTransferRestrictionsDisabled) + 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(EigenTransferRestrictionsDisabled) + 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 *EigenTransferRestrictionsDisabledIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenTransferRestrictionsDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenTransferRestrictionsDisabled represents a TransferRestrictionsDisabled event raised by the Eigen contract. +type EigenTransferRestrictionsDisabled struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransferRestrictionsDisabled is a free log retrieval operation binding the contract event 0x2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f64. +// +// Solidity: event TransferRestrictionsDisabled() +func (_Eigen *EigenFilterer) FilterTransferRestrictionsDisabled(opts *bind.FilterOpts) (*EigenTransferRestrictionsDisabledIterator, error) { + + logs, sub, err := _Eigen.contract.FilterLogs(opts, "TransferRestrictionsDisabled") + if err != nil { + return nil, err + } + return &EigenTransferRestrictionsDisabledIterator{contract: _Eigen.contract, event: "TransferRestrictionsDisabled", logs: logs, sub: sub}, nil +} + +// WatchTransferRestrictionsDisabled is a free log subscription operation binding the contract event 0x2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f64. +// +// Solidity: event TransferRestrictionsDisabled() +func (_Eigen *EigenFilterer) WatchTransferRestrictionsDisabled(opts *bind.WatchOpts, sink chan<- *EigenTransferRestrictionsDisabled) (event.Subscription, error) { + + logs, sub, err := _Eigen.contract.WatchLogs(opts, "TransferRestrictionsDisabled") + 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(EigenTransferRestrictionsDisabled) + if err := _Eigen.contract.UnpackLog(event, "TransferRestrictionsDisabled", 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 +} + +// ParseTransferRestrictionsDisabled is a log parse operation binding the contract event 0x2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f64. +// +// Solidity: event TransferRestrictionsDisabled() +func (_Eigen *EigenFilterer) ParseTransferRestrictionsDisabled(log types.Log) (*EigenTransferRestrictionsDisabled, error) { + event := new(EigenTransferRestrictionsDisabled) + if err := _Eigen.contract.UnpackLog(event, "TransferRestrictionsDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/Eigen/tmp.abi b/pkg/bindings/Eigen/tmp.abi new file mode 100644 index 000000000..9aa9a0003 --- /dev/null +++ b/pkg/bindings/Eigen/tmp.abi @@ -0,0 +1,1022 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_bEIGEN", + "type": "address", + "internalType": "contract IERC20" + } + ], + "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": "contract IERC20" + } + ], + "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": "struct ERC20VotesUpgradeable.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 + } +] diff --git a/pkg/bindings/Eigen/tmp.bin b/pkg/bindings/Eigen/tmp.bin new file mode 100644 index 000000000..5452980c5 --- /dev/null +++ b/pkg/bindings/Eigen/tmp.bin @@ -0,0 +1 @@ +0x60a06040523480156200001157600080fd5b506040516200342538038062003425833981016040819052620000349162000113565b6001600160a01b0381166080526200004b62000052565b5062000145565b600054610100900460ff1615620000bf5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161462000111576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012657600080fd5b81516001600160a01b03811681146200013e57600080fd5b9392505050565b6080516132b66200016f6000396000818161034801528181611475015261156401526132b66000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c806381b9716111610146578063a9059cbb116100c3578063dd62ed3e11610087578063dd62ed3e146105c5578063de0e9a3e146105d8578063ea598cb0146105eb578063eb415f45146105fe578063f1127ed814610606578063f2fde38b1461064357600080fd5b8063a9059cbb14610566578063aad41a4114610579578063b8c255941461058c578063c3cda5201461059f578063d505accf146105b257600080fd5b806395d89b411161010a57806395d89b411461051b5780639ab24eb0146105235780639aec4bae14610536578063a457c2d714610540578063a7d1195d1461055357600080fd5b806381b971611461049c57806384b0196e146104bd5780638da5cb5b146104d85780638e539e8c146104e957806391ddadf4146104fc57600080fd5b80633a46b1a8116101df5780635c19a95c116101a35780635c19a95c146103f95780636fcfff451461040c57806370a0823114610434578063715018a61461045d57806378aa33ba146104655780637ecebe001461048957600080fd5b80633a46b1a8146103305780633f4da4c6146103435780634bf5d7e91461038257806353957125146103ac578063587cde1e146103cd57600080fd5b80631ffacdef116102265780631ffacdef146102e057806323b872dd146102f3578063313ce567146103065780633644e51514610315578063395093511461031d57600080fd5b80630455e6941461026357806306fdde031461029c578063095ea7b3146102b15780631249c58b146102c457806318160ddd146102ce575b600080fd5b610287610271366004612b8a565b6101336020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102a4610656565b6040516102939190612bf2565b6102876102bf366004612c05565b6106e8565b6102cc610700565b005b6067545b604051908152602001610293565b6102cc6102ee366004612c3d565b61084b565b610287610301366004612c74565b6108b4565b60405160128152602001610293565b6102d26108d8565b61028761032b366004612c05565b6108e7565b6102d261033e366004612c05565b610909565b61036a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610293565b60408051808201909152600e81526d06d6f64653d74696d657374616d760941b60208201526102a4565b6102d26103ba366004612b8a565b6101306020526000908152604090205481565b61036a6103db366004612b8a565b6001600160a01b03908116600090815260fe60205260409020541690565b6102cc610407366004612b8a565b61098e565b61041f61041a366004612b8a565b61099b565b60405163ffffffff9091168152602001610293565b6102d2610442366004612b8a565b6001600160a01b031660009081526065602052604090205490565b6102cc6109c3565b610287610473366004612b8a565b6101346020526000908152604090205460ff1681565b6102d2610497366004612b8a565b6109d7565b6102d26104aa366004612b8a565b6101316020526000908152604090205481565b6104c56109f5565b6040516102939796959493929190612cb0565b6033546001600160a01b031661036a565b6102d26104f7366004612d46565b610a93565b610504610afb565b60405165ffffffffffff9091168152602001610293565b6102a4610b06565b6102d2610531366004612b8a565b610b15565b6102d26101325481565b61028761054e366004612c05565b610b97565b6102cc610561366004612e35565b610c12565b610287610574366004612c05565b61103f565b6102cc610587366004612f78565b61104d565b6102cc61059a366004612c3d565b611128565b6102cc6105ad366004612ff5565b611189565b6102cc6105c036600461304d565b6112bf565b6102d26105d33660046130b7565b611423565b6102cc6105e6366004612d46565b61144e565b6102cc6105f9366004612d46565b611542565b6102cc61163b565b6106196106143660046130ea565b611704565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610293565b6102cc610651366004612b8a565b611788565b6060606880546106659061311f565b80601f01602080910402602001604051908101604052809291908181526020018280546106919061311f565b80156106de5780601f106106b3576101008083540402835291602001916106de565b820191906000526020600020905b8154815290600101906020018083116106c157829003601f168201915b5050505050905090565b6000336106f68185856117fe565b5060019392505050565b336000908152610131602052604090205461077a5760405162461bcd60e51b815260206004820152602f60248201527f456967656e2e6d696e743a206d73672e73656e64657220686173206e6f206d6960448201526e6e74696e6720616c6c6f77616e636560881b60648201526084015b60405180910390fd5b336000908152610130602052604090205442116107f35760405162461bcd60e51b815260206004820152603160248201527f456967656e2e6d696e743a206d73672e73656e646572206973206e6f7420616c6044820152701b1bddd959081d1bc81b5a5b9d081e595d607a1b6064820152608401610771565b336000818152610131602052604081208054919055906108139082611922565b60405181815233907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859060200160405180910390a250565b6108536119b3565b6001600160a01b03821660008181526101336020908152604091829020805460ff191685151590811790915591519182527fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed284362227191015b60405180910390a25050565b6000336108c2858285611a0d565b6108cd858585611a81565b506001949350505050565b60006108e2611c3d565b905090565b6000336106f68185856108fa8383611423565b610904919061316a565b6117fe565b6000610913610afb565b65ffffffffffff1682106109655760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610771565b6001600160a01b038316600090815260ff602052604090206109879083611c47565b9392505050565b6109983382611d30565b50565b6001600160a01b038116600090815260ff60205260408120546109bd90611daa565b92915050565b6109cb6119b3565b6109d56000611e13565b565b6001600160a01b038116600090815260cb60205260408120546109bd565b6000606080600080600060606097546000801b148015610a155750609854155b610a595760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610771565b610a61611e65565b610a69611e74565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000610a9d610afb565b65ffffffffffff168210610aef5760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610771565b6109bd61010083611c47565b60006108e242611e83565b6060606980546106659061311f565b6001600160a01b038116600090815260ff60205260408120548015610b84576001600160a01b038316600090815260ff6020526040902080546000198301908110610b6257610b62613182565b60009182526020909120015464010000000090046001600160e01b0316610b87565b60005b6001600160e01b03169392505050565b60003381610ba58286611423565b905083811015610c055760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610771565b6108cd82868684036117fe565b600054610100900460ff1615808015610c325750600054600160ff909116105b80610c4c5750303b158015610c4c575060005460ff166001145b610caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610771565b6000805460ff191660011790558015610cd2576000805461ff0019166101001790555b610cda611eea565b610d1e6040518060400160405280600581526020016422b4b3b2b760d91b8152506040518060400160405280600581526020016422a4a3a2a760d91b815250611f19565b610d2785611e13565b610d4d6040518060400160405280600581526020016422a4a3a2a760d91b815250611f4e565b8251845114610dd45760405162461bcd60e51b815260206004820152604760248201527f456967656e2e696e697469616c697a653a206d696e7465727320616e64206d6960448201527f6e74696e67416c6c6f77616e636573206d757374206265207468652073616d65606482015266040d8cadccee8d60cb1b608482015260a401610771565b8151845114610e5b5760405162461bcd60e51b815260206004820152604760248201527f456967656e2e696e697469616c697a653a206d696e7465727320616e64206d6960448201527f6e74416c6c6f776564416674657273206d757374206265207468652073616d65606482015266040d8cadccee8d60cb1b608482015260a401610771565b60005b8451811015610fea57838181518110610e7957610e79613182565b60200260200101516101316000878481518110610e9857610e98613182565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550828181518110610ed657610ed6613182565b60200260200101516101306000878481518110610ef557610ef5613182565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555060016101336000878481518110610f3a57610f3a613182565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550848181518110610f8b57610f8b613182565b60200260200101516001600160a01b03167fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed28436222716001604051610fd0911515815260200190565b60405180910390a280610fe281613198565b915050610e5e565b50600019610132558015611038576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6000336106f6818585611a81565b8281146110c25760405162461bcd60e51b815260206004820152603e60248201527f456967656e2e6d756c746973656e643a2072656365697665727320616e64206160448201527f6d6f756e7473206d757374206265207468652073616d65206c656e67746800006064820152608401610771565b60005b8381101561103857611116338686848181106110e3576110e3613182565b90506020020160208101906110f89190612b8a565b85858581811061110a5761110a613182565b90506020020135611a81565b8061112081613198565b9150506110c5565b6111306119b3565b6001600160a01b03821660008181526101346020908152604091829020805460ff191685151590811790915591519182527f72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b91016108a8565b834211156111d95760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610771565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906112539061124b9060a00160405160208183030381529060405280519060200120611f98565b858585611fc5565b905061125e81611fed565b86146112ac5760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610771565b6112b68188611d30565b50505050505050565b8342111561130f5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610771565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861133e8c611fed565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061139982611f98565b905060006113a982878787611fc5565b9050896001600160a01b0316816001600160a01b03161461140c5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610771565b6114178a8a8a6117fe565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b611459333083611a81565b60405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea91906131b3565b6109985760405162461bcd60e51b8152602060048201526024808201527f456967656e2e756e777261703a2062454947454e207472616e736665722066616044820152631a5b195960e21b6064820152608401610771565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af11580156115b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d991906131b3565b6116305760405162461bcd60e51b815260206004820152602260248201527f456967656e2e777261703a2062454947454e207472616e73666572206661696c604482015261195960f21b6064820152608401610771565b610998303383611a81565b6116436119b3565b60001961013254146116d35760405162461bcd60e51b815260206004820152604d60248201527f456967656e2e64697361626c655472616e736665725265737472696374696f6e60448201527f733a207472616e73666572207265737472696374696f6e732061726520616c7260648201526c1958591e48191a5cd8589b1959609a1b608482015260a401610771565b60006101328190556040517f2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f649190a1565b60408051808201909152600080825260208201526001600160a01b038316600090815260ff60205260409020805463ffffffff841690811061174857611748613182565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6117906119b3565b6001600160a01b0381166117f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610771565b61099881611e13565b6001600160a01b0383166118605760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610771565b6001600160a01b0382166118c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610771565b6001600160a01b0383811660008181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61192c8282612015565b6067546001600160e01b03101561199e5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401610771565b6119ad6101006120ea836120f6565b50505050565b6033546001600160a01b031633146109d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610771565b6000611a198484611423565b905060001981146119ad5781811015611a745760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610771565b6119ad84848484036117fe565b6001600160a01b038316611ae55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610771565b6001600160a01b038216611b475760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610771565b611b5283838361226b565b6001600160a01b03831660009081526065602052604090205481811015611bca5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610771565b6001600160a01b0380851660008181526065602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c2a9086815260200190565b60405180910390a36119ad848484612365565b60006108e2612397565b815460009081816005811115611ca1576000611c628461240b565b611c6c90856131d0565b600088815260209020909150869082015463ffffffff161115611c9157809150611c9f565b611c9c81600161316a565b92505b505b80821015611cee576000611cb583836124f0565b600088815260209020909150869082015463ffffffff161115611cda57809150611ce8565b611ce581600161316a565b92505b50611ca1565b8015611d1a576000868152602090208101600019015464010000000090046001600160e01b0316611d1d565b60005b6001600160e01b03169695505050505050565b6001600160a01b03828116600081815260fe6020818152604080842080546065845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46119ad82848361250b565b600063ffffffff821115611e0f5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610771565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060609980546106659061311f565b6060609a80546106659061311f565b600065ffffffffffff821115611e0f5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610771565b600054610100900460ff16611f115760405162461bcd60e51b8152600401610771906131e7565b6109d5612648565b600054610100900460ff16611f405760405162461bcd60e51b8152600401610771906131e7565b611f4a8282612678565b5050565b600054610100900460ff16611f755760405162461bcd60e51b8152600401610771906131e7565b61099881604051806040016040528060018152602001603160f81b8152506126c6565b60006109bd611fa5611c3d565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000611fd687878787612723565b91509150611fe3816127e7565b5095945050505050565b6001600160a01b038116600090815260cb602052604090208054600181018255905b50919050565b6001600160a01b03821661206b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610771565b6120776000838361226b565b8060676000828254612089919061316a565b90915550506001600160a01b0382166000818152606560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611f4a60008383612365565b6000610987828461316a565b825460009081908181156121435760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b03166020820152612158565b60408051808201909152600080825260208201525b905080602001516001600160e01b0316935061217884868863ffffffff16565b92506000821180156121a2575061218d610afb565b65ffffffffffff16816000015163ffffffff16145b156121e7576121b083612935565b60008881526020902083016000190180546001600160e01b03929092166401000000000263ffffffff909216919091179055612261565b86604051806040016040528061220b6121fe610afb565b65ffffffffffff16611daa565b63ffffffff16815260200161221f86612935565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b610132544211612360576001600160a01b038316158061229357506001600160a01b03831630145b806122a657506001600160a01b03821630145b806122ca57506001600160a01b0383166000908152610133602052604090205460ff165b806122ee57506001600160a01b0382166000908152610134602052604090205460ff165b6123605760405162461bcd60e51b815260206004820152603a60248201527f456967656e2e5f6265666f7265546f6b656e5472616e736665723a2066726f6d60448201527f206f7220746f206d7573742062652077686974656c69737465640000000000006064820152608401610771565b505050565b6001600160a01b03838116600090815260fe60205260408082205485841683529120546123609291821691168361250b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6123c261299e565b6123ca6129f7565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008161241a57506000919050565b6000600161242784612a28565b901c6001901b9050600181848161244057612440613232565b048201901c9050600181848161245857612458613232565b048201901c9050600181848161247057612470613232565b048201901c9050600181848161248857612488613232565b048201901c905060018184816124a0576124a0613232565b048201901c905060018184816124b8576124b8613232565b048201901c905060018184816124d0576124d0613232565b048201901c9050610987818285816124ea576124ea613232565b04612abc565b60006124ff6002848418613248565b6109879084841661316a565b816001600160a01b0316836001600160a01b03161415801561252d5750600081115b15612360576001600160a01b038316156125bb576001600160a01b038316600090815260ff60205260408120819061256890612ad2856120f6565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516125b0929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615612360576001600160a01b038216600090815260ff6020526040812081906125f1906120ea856120f6565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612639929190918252602082015260400190565b60405180910390a25050505050565b600054610100900460ff1661266f5760405162461bcd60e51b8152600401610771906131e7565b6109d533611e13565b600054610100900460ff1661269f5760405162461bcd60e51b8152600401610771906131e7565b81516126b2906068906020850190612ade565b508051612360906069906020840190612ade565b600054610100900460ff166126ed5760405162461bcd60e51b8152600401610771906131e7565b8151612700906099906020850190612ade565b50805161271490609a906020840190612ade565b50506000609781905560985550565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561275a57506000905060036127de565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156127ae573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127d7576000600192509250506127de565b9150600090505b94509492505050565b60008160048111156127fb576127fb61326a565b14156128045750565b60018160048111156128185761281861326a565b14156128665760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610771565b600281600481111561287a5761287a61326a565b14156128c85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610771565b60038160048111156128dc576128dc61326a565b14156109985760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610771565b60006001600160e01b03821115611e0f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610771565b6000806129a9611e65565b8051909150156129c0578051602090910120919050565b60975480156129cf5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080612a02611e74565b805190915015612a19578051602090910120919050565b60985480156129cf5792915050565b600080608083901c15612a3d57608092831c92015b604083901c15612a4f57604092831c92015b602083901c15612a6157602092831c92015b601083901c15612a7357601092831c92015b600883901c15612a8557600892831c92015b600483901c15612a9757600492831c92015b600283901c15612aa957600292831c92015b600183901c156109bd5760010192915050565b6000818310612acb5781610987565b5090919050565b600061098782846131d0565b828054612aea9061311f565b90600052602060002090601f016020900481019282612b0c5760008555612b52565b82601f10612b2557805160ff1916838001178555612b52565b82800160010185558215612b52579182015b82811115612b52578251825591602001919060010190612b37565b50611e0f9291505b80821115611e0f5760008155600101612b5a565b80356001600160a01b0381168114612b8557600080fd5b919050565b600060208284031215612b9c57600080fd5b61098782612b6e565b6000815180845260005b81811015612bcb57602081850181015186830182015201612baf565b81811115612bdd576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006109876020830184612ba5565b60008060408385031215612c1857600080fd5b612c2183612b6e565b946020939093013593505050565b801515811461099857600080fd5b60008060408385031215612c5057600080fd5b612c5983612b6e565b91506020830135612c6981612c2f565b809150509250929050565b600080600060608486031215612c8957600080fd5b612c9284612b6e565b9250612ca060208501612b6e565b9150604084013590509250925092565b60ff60f81b881681526000602060e081840152612cd060e084018a612ba5565b8381036040850152612ce2818a612ba5565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015612d3457835183529284019291840191600101612d18565b50909c9b505050505050505050505050565b600060208284031215612d5857600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612d9e57612d9e612d5f565b604052919050565b600067ffffffffffffffff821115612dc057612dc0612d5f565b5060051b60200190565b600082601f830112612ddb57600080fd5b81356020612df0612deb83612da6565b612d75565b82815260059290921b84018101918181019086841115612e0f57600080fd5b8286015b84811015612e2a5780358352918301918301612e13565b509695505050505050565b60008060008060808587031215612e4b57600080fd5b612e5485612b6e565b935060208086013567ffffffffffffffff80821115612e7257600080fd5b818801915088601f830112612e8657600080fd5b8135612e94612deb82612da6565b81815260059190911b8301840190848101908b831115612eb357600080fd5b938501935b82851015612ed857612ec985612b6e565b82529385019390850190612eb8565b975050506040880135925080831115612ef057600080fd5b612efc89848a01612dca565b94506060880135925080831115612f1257600080fd5b5050612f2087828801612dca565b91505092959194509250565b60008083601f840112612f3e57600080fd5b50813567ffffffffffffffff811115612f5657600080fd5b6020830191508360208260051b8501011115612f7157600080fd5b9250929050565b60008060008060408587031215612f8e57600080fd5b843567ffffffffffffffff80821115612fa657600080fd5b612fb288838901612f2c565b90965094506020870135915080821115612fcb57600080fd5b50612fd887828801612f2c565b95989497509550505050565b803560ff81168114612b8557600080fd5b60008060008060008060c0878903121561300e57600080fd5b61301787612b6e565b9550602087013594506040870135935061303360608801612fe4565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561306857600080fd5b61307188612b6e565b965061307f60208901612b6e565b9550604088013594506060880135935061309b60808901612fe4565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156130ca57600080fd5b6130d383612b6e565b91506130e160208401612b6e565b90509250929050565b600080604083850312156130fd57600080fd5b61310683612b6e565b9150602083013563ffffffff81168114612c6957600080fd5b600181811c9082168061313357607f821691505b6020821081141561200f57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561317d5761317d613154565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156131ac576131ac613154565b5060010190565b6000602082840312156131c557600080fd5b815161098781612c2f565b6000828210156131e2576131e2613154565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261326557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220157f2ca25e510bd4fd72de78a17088fba90e2f64b3d97431afd1978ac5933b9664736f6c634300080c0033 diff --git a/pkg/bindings/EigenPod/binding.go b/pkg/bindings/EigenPod/binding.go new file mode 100644 index 000000000..8070d6351 --- /dev/null +++ b/pkg/bindings/EigenPod/binding.go @@ -0,0 +1,2360 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package EigenPod + +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 +) + +// BeaconChainProofsStateRootProof is an auto generated low-level Go binding around an user-defined struct. +type BeaconChainProofsStateRootProof struct { + BeaconStateRoot [32]byte + Proof []byte +} + +// BeaconChainProofsWithdrawalProof is an auto generated low-level Go binding around an user-defined struct. +type BeaconChainProofsWithdrawalProof struct { + WithdrawalProof []byte + SlotProof []byte + ExecutionPayloadProof []byte + TimestampProof []byte + HistoricalSummaryBlockRootProof []byte + BlockRootIndex uint64 + HistoricalSummaryIndex uint64 + WithdrawalIndex uint64 + BlockRoot [32]byte + SlotRoot [32]byte + TimestampRoot [32]byte + ExecutionPayloadRoot [32]byte +} + +// IEigenPodValidatorInfo is an auto generated low-level Go binding around an user-defined struct. +type IEigenPodValidatorInfo struct { + ValidatorIndex uint64 + RestakedBalanceGwei uint64 + MostRecentBalanceUpdateTimestamp uint64 + Status uint8 +} + +// EigenPodMetaData contains all meta data concerning the EigenPod contract. +var EigenPodMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_ethPOS\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"},{\"name\":\"_delayedWithdrawalRouter\",\"type\":\"address\",\"internalType\":\"contractIDelayedWithdrawalRouter\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"_MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activateRestaking\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delayedWithdrawalRouter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelayedWithdrawalRouter\"}],\"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\":\"hasRestaked\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"mostRecentWithdrawalTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nonBeaconChainETHBalanceWei\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"provenWithdrawal\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"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\":\"sumOfPartialWithdrawalsClaimedGwei\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"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\":\"mostRecentBalanceUpdateTimestamp\",\"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\":\"mostRecentBalanceUpdateTimestamp\",\"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\":\"verifyAndProcessWithdrawals\",\"inputs\":[{\"name\":\"oracleTimestamp\",\"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\":\"withdrawalProofs\",\"type\":\"tuple[]\",\"internalType\":\"structBeaconChainProofs.WithdrawalProof[]\",\"components\":[{\"name\":\"withdrawalProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"slotProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"executionPayloadProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timestampProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"historicalSummaryBlockRootProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blockRootIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"historicalSummaryIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"withdrawalIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"slotRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"timestampRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"executionPayloadRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"validatorFields\",\"type\":\"bytes32[][]\",\"internalType\":\"bytes32[][]\"},{\"name\":\"withdrawalFields\",\"type\":\"bytes32[][]\",\"internalType\":\"bytes32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyBalanceUpdates\",\"inputs\":[{\"name\":\"oracleTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"validatorIndices\",\"type\":\"uint40[]\",\"internalType\":\"uint40[]\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"validatorFields\",\"type\":\"bytes32[][]\",\"internalType\":\"bytes32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyWithdrawalCredentials\",\"inputs\":[{\"name\":\"oracleTimestamp\",\"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\":\"withdrawBeforeRestaking\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawNonBeaconChainETHBalanceWei\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amountToWithdraw\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FullWithdrawalRedeemed\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"name\":\"withdrawalTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"withdrawalAmountGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NonBeaconChainETHReceived\",\"inputs\":[{\"name\":\"amountReceived\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NonBeaconChainETHWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amountWithdrawn\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PartialWithdrawalRedeemed\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"name\":\"withdrawalTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"partialWithdrawalAmountGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"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\":\"RestakingActivated\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"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\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false}]", + Bin: "0x6101206040523480156200001257600080fd5b5060405162005f0338038062005f0383398101604081905262000035916200016f565b6001600160a01b0380861660805284811660a052831660c0526001600160401b0380831660e0528116610100526200006c62000077565b5050505050620001e7565b600054610100900460ff1615620000e45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000137576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014f57600080fd5b50565b80516001600160401b03811681146200016a57600080fd5b919050565b600080600080600060a086880312156200018857600080fd5b8551620001958162000139565b6020870151909550620001a88162000139565b6040870151909450620001bb8162000139565b9250620001cb6060870162000152565b9150620001db6080870162000152565b90509295509295909350565b60805160a05160c05160e05161010051615c28620002db600039600081816105b5015281816134c8015261357f015260008181610275015281816124290152818161245d01528181612a8901528181612ab60152818161425b015261429601526000818161036d01528181610614015281816107a701528181610a4601528181610b9b01528181610d2301528181610ede015281816110bf015281816111f3015281816113fd0152818161184a015281816119f201528181611b3101528181611cfe01528181611de80152612f2101526000818161024101526131930152600081816104520152610dee0152615c286000f3fe6080604052600436106101855760003560e01c806374cdd798116100d1578063c49074421161008a578063e251ef5211610064578063e251ef5214610563578063e2c8344514610583578063f2882461146105a3578063fe80b087146105d757600080fd5b8063c490744214610503578063c4d66de814610523578063dda3346c1461054357600080fd5b806374cdd7981461044057806387e0d289146104745780639b4e46341461049b578063a50600f4146104ae578063b522538a146104ce578063baa7145a146104ee57600080fd5b806334bea20a1161013e57806358eaee791161011857806358eaee791461038f5780635d3f65b6146103bc5780636fcd0e53146103dc5780637439841f1461040957600080fd5b806334bea20a146103005780633f65cf191461033b5780634665bcda1461035b57600080fd5b80630b18ff66146101db5780630cd4649e146102185780631a5057be1461022f5780631d905d5c146102635780633106ab53146102af5780633474aa16146102e057600080fd5b366101d657346037600082825461019c9190614b56565b90915550506040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101e757600080fd5b506033546101fb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022457600080fd5b5061022d6105fb565b005b34801561023b57600080fd5b506101fb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561026f57600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b03909116815260200161020f565b3480156102bb57600080fd5b506034546102d090600160401b900460ff1681565b604051901515815260200161020f565b3480156102ec57600080fd5b50603454610297906001600160401b031681565b34801561030c57600080fd5b506102d061031b366004614b93565b603560209081526000928352604080842090915290825290205460ff1681565b34801561034757600080fd5b5061022d610356366004614c26565b610764565b34801561036757600080fd5b506101fb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039b57600080fd5b506103af6103aa366004614d37565b610c06565b60405161020f9190614db0565b3480156103c857600080fd5b50603854610297906001600160401b031681565b3480156103e857600080fd5b506103fc6103f7366004614dbe565b610c6b565b60405161020f9190614dd7565b34801561041557600080fd5b506103af610424366004614dbe565b600090815260366020526040902054600160c01b900460ff1690565b34801561044c57600080fd5b506101fb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561048057600080fd5b5060335461029790600160a01b90046001600160401b031681565b61022d6104a9366004614e1f565b610d18565b3480156104ba57600080fd5b5061022d6104c9366004614e92565b610ec5565b3480156104da57600080fd5b506103fc6104e9366004614d37565b611294565b3480156104fa57600080fd5b5061022d611387565b34801561050f57600080fd5b5061022d61051e366004614f3c565b6113f2565b34801561052f57600080fd5b5061022d61053e366004614f68565b61162f565b34801561054f57600080fd5b5061022d61055e366004615082565b611807565b34801561056f57600080fd5b5061022d61057e366004615153565b6119da565b34801561058f57600080fd5b5061022d61059e366004614f3c565b611da5565b3480156105af57600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e357600080fd5b506105ed60375481565b60405190815260200161020f565b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610687919061524e565b156106ad5760405162461bcd60e51b81526004016106a490615270565b60405180910390fd5b6033546001600160a01b031633146106d75760405162461bcd60e51b81526004016106a4906152cd565b603454600160401b900460ff16156107015760405162461bcd60e51b81526004016106a490615315565b6034805460ff60401b1916600160401b179055603354610729906001600160a01b0316611f88565b6033546040516001600160a01b03909116907fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a250565b6033546001600160a01b0316331461078e5760405162461bcd60e51b81526004016106a4906152cd565b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a919061524e565b156108375760405162461bcd60e51b81526004016106a490615270565b60335489906001600160401b03600160a01b9091048116908216101561086f5760405162461bcd60e51b81526004016106a490615364565b603454600160401b900460ff166108e75760405162461bcd60e51b815260206004820152603660248201527f456967656e506f642e686173456e61626c656452657374616b696e673a2072656044820152751cdd185ada5b99c81a5cc81b9bdd08195b98589b195960521b60648201526084016106a4565b86851480156108f557508483145b6109855760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a4016106a4565b4261099b613f486001600160401b038d16614b56565b1015610a245760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038b166004820152610acd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa158015610a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab991906153f7565b8a35610ac860208d018d615410565b611fbc565b6000805b88811015610b7157610b538c8c358c8c85818110610af157610af1615456565b9050602002016020810190610b06919061546c565b8b8b86818110610b1857610b18615456565b9050602002810190610b2a9190615410565b8b8b88818110610b3c57610b3c615456565b9050602002810190610b4e9190615493565b61214a565b610b5d9083614b56565b915080610b69816154dc565b915050610ad1565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b158015610be157600080fd5b505af1158015610bf5573d6000803e3d6000fd5b505050505050505050505050505050565b600080610c4884848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061260492505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b610c936040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610cfe57610cfe614d78565b6002811115610d0f57610d0f614d78565b90525092915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d605760405162461bcd60e51b81526004016106a4906154f7565b346801bc16d674ec80000014610dec5760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a4016106a4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008787610e2f6126fe565b8888886040518863ffffffff1660e01b8152600401610e53969594939291906155c9565b6000604051808303818588803b158015610e6c57600080fd5b505af1158015610e80573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051610eb6929190615618565b60405180910390a15050505050565b604051635ac86ab760e01b8152600360048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f51919061524e565b15610f6e5760405162461bcd60e51b81526004016106a490615270565b8684148015610f7c57508382145b6110055760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207660448201527f616c696461746f72496e646963657320616e642070726f6f6673206d7573742060648201526d0c4ca40e6c2daca40d8cadccee8d60931b608482015260a4016106a4565b4261101b613f486001600160401b038c16614b56565b101561109d5760405162461bcd60e51b815260206004820152604560248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207360448201527f70656369666965642074696d657374616d7020697320746f6f2066617220696e606482015264081c185cdd60da1b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a166004820152611141907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa15801561110e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113291906153f7565b8735610ac860208a018a615410565b6000805b888110156111e5576111c78b8b8b8481811061116357611163615456565b9050602002016020810190611178919061546c565b8a358a8a8681811061118c5761118c615456565b905060200281019061119e9190615410565b8a8a888181106111b0576111b0615456565b90506020028101906111c29190615493565b612743565b6111d1908361562c565b9150806111dd816154dc565b915050611145565b506033546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163c2c51c40911661122a633b9aca008561566d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561127057600080fd5b505af1158015611284573d6000803e3d6000fd5b5050505050505050505050505050565b6112bc6040805160808101825260008082526020820181905291810182905290606082015290565b603660006112ff85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061260492505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561136c5761136c614d78565b600281111561137d5761137d614d78565b9052509392505050565b6033546001600160a01b031633146113b15760405162461bcd60e51b81526004016106a4906152cd565b603454600160401b900460ff16156113db5760405162461bcd60e51b81526004016106a490615315565b6033546113f0906001600160a01b0316611f88565b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461143a5760405162461bcd60e51b81526004016106a4906154f7565b611448633b9aca0082615708565b156114d25760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a4016106a4565b60006114e2633b9aca008361571c565b6034549091506001600160401b03908116908216111561159b5760405162461bcd60e51b815260206004820152606260248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74477765692065786365656473207769746860648201527f6472617761626c6552657374616b6564457865637574696f6e4c617965724777608482015261656960f01b60a482015260c4016106a4565b603480548291906000906115b99084906001600160401b0316615730565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161161891815260200190565b60405180910390a261162a8383612c21565b505050565b600054610100900460ff161580801561164f5750600054600160ff909116105b806116695750303b158015611669575060005460ff166001145b6116cc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a4565b6000805460ff1916600117905580156116ef576000805461ff0019166101001790555b6001600160a01b0382166117625760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b60648201526084016106a4565b603380546001600160a01b0384166001600160a01b031990911681179091556034805460ff60401b1916600160401b1790556040517fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a28015611803576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146118315760405162461bcd60e51b81526004016106a4906152cd565b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bd919061524e565b156118da5760405162461bcd60e51b81526004016106a490615270565b82518451146119655760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a4016106a4565b60005b84518110156119d3576119c18385838151811061198757611987615456565b60200260200101518784815181106119a1576119a1615456565b60200260200101516001600160a01b0316612c2b9092919063ffffffff16565b806119cb816154dc565b915050611968565b5050505050565b604051635ac86ab760e01b81526004808201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a65919061524e565b15611a825760405162461bcd60e51b81526004016106a490615270565b8386148015611a9057508588145b8015611a9b57508782145b611b0f576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e766572696679416e6450726f636573735769746864726160448201527f77616c733a20696e70757473206d7573742062652073616d65206c656e67746860648201526084016106a4565b60405163d1c64cc960e01b81526001600160401b038c166004820152611bb3907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611b80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba491906153f7565b8b35610ac860208e018e615410565b604080518082019091526000808252602082015260005b83811015611cb3576000611c6e8d358d8d85818110611beb57611beb615456565b9050602002810190611bfd9190615758565b8c8c86818110611c0f57611c0f615456565b9050602002810190611c219190615410565b8c8c88818110611c3357611c33615456565b9050602002810190611c459190615493565b8c8c8a818110611c5757611c57615456565b9050602002810190611c699190615493565b612c7d565b80518451919250908490611c83908390614b56565b9052506020808201519084018051611c9c90839061562c565b905250819050611cab816154dc565b915050611bca565b50805115611ce2576033548151611ce2916001600160a01b031690611cdd90633b9aca0090615779565b613169565b602081015115611d975760335460208201516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263c2c51c4092911690611d3890633b9aca009061566d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611d7e57600080fd5b505af1158015611d92573d6000803e3d6000fd5b505050505b505050505050505050505050565b6033546001600160a01b03163314611dcf5760405162461bcd60e51b81526004016106a4906152cd565b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5b919061524e565b15611e785760405162461bcd60e51b81526004016106a490615270565b603754821115611f295760405162461bcd60e51b815260206004820152606a60248201527f456967656e506f642e77697468647261776e6f6e426561636f6e436861696e4560448201527f544842616c616e63655765693a20616d6f756e74546f5769746864726177206960648201527f732067726561746572207468616e206e6f6e426561636f6e436861696e45544860848201526942616c616e636557656960b01b60a482015260c4016106a4565b8160376000828254611f3b9190615798565b90915550506040518281526001600160a01b038416907f30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f530969060200160405180910390a261162a8383613169565b6033805467ffffffffffffffff60a01b19164263ffffffff16600160a01b021790556000603755611fb98147613169565b50565b611fc860036020615779565b81146120585760405162461bcd60e51b815260206004820152605360248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a2050726f6f6620686064820152720c2e640d2dcc6dee4e4cac6e840d8cadccee8d606b1b608482015260a4016106a4565b61209d82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250879150600390506131f7565b6121445760405162461bcd60e51b815260206004820152606660248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a20496e76616c696460648201527f206c617465737420626c6f636b2068656164657220726f6f74206d65726b6c6560848201526510383937b7b360d11b60a482015260c4016106a4565b50505050565b60008061218984848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320f92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156121f8576121f8614d78565b600281111561220957612209614d78565b905250905060008160600151600281111561222657612226614d78565b146122cf5760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2056616c696461746f72206d757374206265206960648201527f6e61637469766520746f2070726f7665207769746864726177616c2063726564608482015266656e7469616c7360c81b60a482015260c4016106a4565b6122d76126fe565b6122e0906157af565b61231c86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061323392505050565b146123a35760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2050726f6f66206973206e6f7420666f7220746860648201526a1a5cc8115a59d95b941bd960aa1b608482015260a4016106a4565b60006123e186868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061324892505050565b90506123f18a87878b8b8e61326d565b60398054906000612401836154dc565b90915550506001606083015264ffffffffff891682526001600160401b038b811660408401527f000000000000000000000000000000000000000000000000000000000000000081169082161115612487576001600160401b037f0000000000000000000000000000000000000000000000000000000000000000166020830152612497565b6001600160401b03811660208301525b6000838152603660209081526040918290208451815492860151938601516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060850151859391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561253557612535614d78565b02179055505060405164ffffffffff8b1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a17f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df898c84602001516040516125d09392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1633b9aca0082602001516001600160401b03166125f59190615779565b9b9a5050505050505050505050565b6000815160301461268d5760405162461bcd60e51b815260206004820152604760248201527f456967656e506f642e5f63616c63756c61746556616c696461746f725075626b60448201527f657948617368206d75737420626520612034382d6279746520424c53207075626064820152666c6963206b657960c81b608482015260a4016106a4565b6040516002906126a49084906000906020016157d3565b60408051601f19818403018152908290526126be91615802565b602060405180830381855afa1580156126db573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c6591906153f7565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b60008061278284848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061324892505050565b905060006127c285858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320f92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561283157612831614d78565b600281111561284257612842614d78565b8152505090508a6001600160401b031681604001516001600160401b0316106128f95760405162461bcd60e51b815260206004820152605c60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20566160448201527f6c696461746f72732062616c616e63652068617320616c72656164792062656560648201527f6e207570646174656420666f7220746869732074696d657374616d7000000000608482015260a4016106a4565b60018160600151600281111561291157612911614d78565b146129795760405162461bcd60e51b815260206004820152603260248201527f456967656e506f642e76657269667942616c616e63655570646174653a2056616044820152716c696461746f72206e6f742061637469766560701b60648201526084016106a4565b6129828b6134c4565b6001600160401b03166129c78787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135ae92505050565b6001600160401b031611612a6a576000836001600160401b031611612a6a5760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f7220697320776974686472617761626c6520627574206861732060648201526c3737ba103bb4ba34323930bbb760991b608482015260a4016106a4565b612a788987878b8b8f61326d565b602081015160006001600160401b037f000000000000000000000000000000000000000000000000000000000000000081169086161115612ada57507f0000000000000000000000000000000000000000000000000000000000000000612add565b50835b6001600160401b0380821660208086019182528f831660408088019182526000898152603690935290912086518154935192518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606086015186939091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115612b8557612b85614d78565b0217905550905050816001600160401b0316816001600160401b031614612c11577f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df8c8e83604051612bfc9392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1612c0e81836135c6565b95505b5050505050979650505050505050565b61180382826135e5565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261162a9084906136fe565b6040805180820190915260008082526020820152612ca2612c9d89615883565b6137d0565b6033546001600160401b03600160a01b90910481169082161015612cd85760405162461bcd60e51b81526004016106a490615364565b6000612ce6612c9d8b615883565b90506000612d2688888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320f92505050565b905060008082815260366020526040902054600160c01b900460ff166002811115612d5357612d53614d78565b1415612e0a5760405162461bcd60e51b815260206004820152607460248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a2056616c696461746f72206e657665722070726f76656e20746f2060648201527f68617665207769746864726177616c2063726564656e7469616c7320706f696e6084820152731d1959081d1bc81d1a1a5cc818dbdb9d1c9858dd60621b60a482015260c4016106a4565b60008181526035602090815260408083206001600160401b038616845290915290205460ff1615612ec95760405162461bcd60e51b815260206004820152605b60248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a207769746864726177616c2068617320616c72656164792062656560648201527f6e2070726f76656e20666f7220746869732074696d657374616d700000000000608482015260a4016106a4565b6001603560008381526020019081526020016000206000846001600160401b03166001600160401b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550612fa68c87878e7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166344e71c806040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa191906159bf565b6137e0565b6000612fe487878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061420192505050565b9050612ff48d8a8a8e8e8661326d565b600061303288888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061421992505050565b90506130708a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135ae92505050565b6001600160401b031661308a6130858f615883565b614231565b6001600160401b03161061314257603354600084815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935261313793869388938a936001600160a01b03909316928892916060830190600160c01b900460ff16600281111561311e5761311e614d78565b600281111561312f5761312f614d78565b905250614243565b95505050505061315c565b60335461313790839086906001600160a01b031684614481565b5098975050505050505050565b603354604051633036cd5360e21b81526001600160a01b03918216600482015283821660248201527f00000000000000000000000000000000000000000000000000000000000000009091169063c0db354c9083906044016000604051808303818588803b1580156131da57600080fd5b505af11580156131ee573d6000803e3d6000fd5b50505050505050565b60008361320586858561455f565b1495945050505050565b60008160008151811061322457613224615456565b60200260200101519050919050565b60008160018151811061322457613224615456565b6000610c658260028151811061326057613260615456565b60200260200101516146ab565b61327960036002615ac0565b84146133045760405162461bcd60e51b815260206004820152604e60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b600561331260286001614b56565b61331c9190614b56565b613327906020615779565b82146133a75760405162461bcd60e51b815260206004820152604360248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a4016106a4565b600064ffffffffff82166133bd60286001614b56565b600b901b179050600061340287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061471292505050565b905061344885858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508591508690506131f7565b6134ba5760405162461bcd60e51b815260206004820152603d60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f6600000060648201526084016106a4565b5050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316826001600160401b0316101561356e5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f642e5f74696d657374616d70546f45706f63683a2074696d6560448201527f7374616d70206973206265666f72652067656e6573697300000000000000000060648201526084016106a4565b61357a600c6020615acc565b6135a47f000000000000000000000000000000000000000000000000000000000000000084615730565b610c659190615afb565b6000610c658260078151811061326057613260615456565b60006135de6001600160401b03808416908516615b21565b9392505050565b804710156136355760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106a4565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613682576040519150601f19603f3d011682016040523d82523d6000602084013e613687565b606091505b505090508061162a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106a4565b6000613753826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149bf9092919063ffffffff16565b80519091501561162a5780806020019051810190613771919061524e565b61162a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a4565b6000610c658261014001516146ab565b6137eb600280615ac0565b831461385f5760405162461bcd60e51b81526020600482015260496024820152600080516020615bd383398151915260448201527f616c3a207769746864726177616c4669656c64732068617320696e636f7272656064820152680c6e840d8cadccee8d60bb1b608482015260a4016106a4565b61386b600d6002615ac0565b61387b60c0840160a08501615b60565b6001600160401b0316106138e55760405162461bcd60e51b815260206004820152603f6024820152600080516020615bd383398151915260448201527f616c3a20626c6f636b526f6f74496e64657820697320746f6f206c617267650060648201526084016106a4565b6138f160046002615ac0565b613902610100840160e08501615b60565b6001600160401b03161061396e576040805162461bcd60e51b8152602060048201526024810191909152600080516020615bd383398151915260448201527f616c3a207769746864726177616c496e64657820697320746f6f206c6172676560648201526084016106a4565b61397a60186002615ac0565b61398a60e0840160c08501615b60565b6001600160401b031610613a045760405162461bcd60e51b81526020600482015260476024820152600080516020615bd383398151915260448201527f616c3a20686973746f726963616c53756d6d617279496e64657820697320746f6064820152666f206c6172676560c81b608482015260a4016106a4565b60006001600160401b038216613a1c612c9d85615883565b6001600160401b031610613a31576005613a34565b60045b9050613a41600482614b56565b613a4c906001614b56565b613a57906020615779565b613a618480615410565b905014613ad55760405162461bcd60e51b81526020600482015260486024820152600080516020615bd383398151915260448201527f616c3a207769746864726177616c50726f6f662068617320696e636f727265636064820152670e840d8cadccee8d60c31b608482015260a4016106a4565b613ae160046003614b56565b613aec906020615779565b613af96040850185615410565b905014613b735760405162461bcd60e51b815260206004820152604e6024820152600080516020615bd383398151915260448201527f616c3a20657865637574696f6e5061796c6f616450726f6f662068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b613b7f60036020615779565b613b8c6020850185615410565b905014613bfa5760405162461bcd60e51b81526020600482015260426024820152600080516020615bd383398151915260448201527f616c3a20736c6f7450726f6f662068617320696e636f7272656374206c656e676064820152610e8d60f31b608482015260a4016106a4565b613c05816020615779565b613c126060850185615410565b905014613c855760405162461bcd60e51b81526020600482015260476024820152600080516020615bd383398151915260448201527f616c3a2074696d657374616d7050726f6f662068617320696e636f7272656374606482015266040d8cadccee8d60cb1b608482015260a4016106a4565b600d613c9360186001614b56565b613c9e906005614b56565b613ca9906001614b56565b613cb39190614b56565b613cbe906020615779565b613ccb6080850185615410565b905014613d545760405162461bcd60e51b81526020600482015260586024820152600080516020615bd383398151915260448201527f616c3a20686973746f726963616c53756d6d617279426c6f636b526f6f74507260648201527f6f6f662068617320696e636f7272656374206c656e6774680000000000000000608482015260a4016106a4565b6000613d6660c0850160a08601615b60565b6001600160401b03166000613d7d600d6001614b56565b613d8d60e0880160c08901615b60565b6001600160401b0316901b600d613da660186001614b56565b613db1906001614b56565b613dbb9190614b56565b601b901b1717179050613e16613dd46080860186615410565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b92505050610100870135846131f7565b613e895760405162461bcd60e51b815260206004820152604a6024820152600080516020615bd383398151915260448201527f616c3a20496e76616c696420686973746f726963616c73756d6d617279206d656064820152693935b63290383937b7b360b11b608482015260a4016106a4565b613ee0613e996020860186615410565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008a013593506101208a0135925090506131f7565b613f405760405162461bcd60e51b815260206004820152603d6024820152600080516020615bd383398151915260448201527f616c3a20496e76616c696420736c6f74206d65726b6c652070726f6f6600000060648201526084016106a4565b6049613f98613f526040870187615410565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610100870135610160880135846131f7565b61400a5760405162461bcd60e51b81526020600482015260496024820152600080516020615bd383398151915260448201527f616c3a20496e76616c696420657865637574696f6e5061796c6f6164206d657260648201526835b63290383937b7b360b91b608482015260a4016106a4565b5061406261401b6060860186615410565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061016086013561014087013560096131f7565b6140cd5760405162461bcd60e51b81526020600482015260426024820152600080516020615bd383398151915260448201527f616c3a20496e76616c69642074696d657374616d70206d65726b6c652070726f60648201526137b360f11b608482015260a4016106a4565b60006140e0610100860160e08701615b60565b6001600160401b03166140f560046001614b56565b600e901b179050600061413a88888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061471292505050565b905061418a6141498780615410565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061016088013583856131f7565b6141f65760405162461bcd60e51b81526020600482015260436024820152600080516020615bd383398151915260448201527f616c3a20496e76616c6964207769746864726177616c206d65726b6c6520707260648201526237b7b360e91b608482015260a4016106a4565b505050505050505050565b6000610c658260018151811061326057613260615456565b6000610c658260038151811061326057613260615456565b600060206135a48361012001516146ab565b604080518082019091526000808252602082015260007f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316846001600160401b031611156142ba57507f00000000000000000000000000000000000000000000000000000000000000006142bd565b50825b60408051808201909152600080825260208201526142db8286615730565b6001600160401b0390811682526034805484926000916142fd91859116615b7d565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061432f8285602001516135c6565b602082015260028460600151600281111561434c5761434c614d78565b1461436e576039805490600061436183615ba8565b9091555050600260608501525b600060208086018281528a83526036909152604091829020865181549251938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516929091169190911792909217928316821781556060870151879391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561441357614413614d78565b0217905550506040805164ffffffffff8c1681526001600160401b038a8116602083015288168183015290516001600160a01b03891692507fb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a09639181900360600190a298975050505050505050565b60408051808201909152600080825260208201526040805164ffffffffff871681526001600160401b0380871660208301528416918101919091526001600160a01b038416907f8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e9060600160405180910390a2603880548391906000906145129084906001600160401b0316615b7d565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506040518060400160405280836001600160401b0316815260200160008152509050949350505050565b6000835160001415801561457e57506020845161457c9190615708565b155b61460d5760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a4016106a4565b604080516020808201909252848152905b855181116146a157614631600285615708565b614664578151600052808601516020526020826040600060026107d05a03fa61465957600080fd5b60028404935061468f565b8086015160005281516020526020826040600060026107d05a03fa61468857600080fd5b6002840493505b61469a602082614b56565b905061461e565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b60008060028351614723919061571c565b90506000816001600160401b0381111561473f5761473f614f85565b604051908082528060200260200182016040528015614768578160200160208202803683370190505b50905060005b8281101561486f576002856147838383615779565b8151811061479357614793615456565b6020026020010151868360026147a99190615779565b6147b4906001614b56565b815181106147c4576147c4615456565b60200260200101516040516020016147e6929190918252602082015260400190565b60408051601f198184030181529082905261480091615802565b602060405180830381855afa15801561481d573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061484091906153f7565b82828151811061485257614852615456565b602090810291909101015280614867816154dc565b91505061476e565b5061487b60028361571c565b91505b811561499b5760005b828110156149885760028261489c8383615779565b815181106148ac576148ac615456565b6020026020010151838360026148c29190615779565b6148cd906001614b56565b815181106148dd576148dd615456565b60200260200101516040516020016148ff929190918252602082015260400190565b60408051601f198184030181529082905261491991615802565b602060405180830381855afa158015614936573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061495991906153f7565b82828151811061496b5761496b615456565b602090810291909101015280614980816154dc565b915050614887565b5061499460028361571c565b915061487e565b806000815181106149ae576149ae615456565b602002602001015192505050919050565b60606149ce84846000856149d6565b949350505050565b606082471015614a375760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a4565b6001600160a01b0385163b614a8e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a4565b600080866001600160a01b03168587604051614aaa9190615802565b60006040518083038185875af1925050503d8060008114614ae7576040519150601f19603f3d011682016040523d82523d6000602084013e614aec565b606091505b5091509150614afc828286614b07565b979650505050505050565b60608315614b165750816135de565b825115614b265782518084602001fd5b8160405162461bcd60e51b81526004016106a49190615bbf565b634e487b7160e01b600052601160045260246000fd5b60008219821115614b6957614b69614b40565b500190565b6001600160401b0381168114611fb957600080fd5b8035614b8e81614b6e565b919050565b60008060408385031215614ba657600080fd5b823591506020830135614bb881614b6e565b809150509250929050565b600060408284031215614bd557600080fd5b50919050565b60008083601f840112614bed57600080fd5b5081356001600160401b03811115614c0457600080fd5b6020830191508360208260051b8501011115614c1f57600080fd5b9250929050565b60008060008060008060008060a0898b031215614c4257600080fd5b8835614c4d81614b6e565b975060208901356001600160401b0380821115614c6957600080fd5b614c758c838d01614bc3565b985060408b0135915080821115614c8b57600080fd5b614c978c838d01614bdb565b909850965060608b0135915080821115614cb057600080fd5b614cbc8c838d01614bdb565b909650945060808b0135915080821115614cd557600080fd5b50614ce28b828c01614bdb565b999c989b5096995094979396929594505050565b60008083601f840112614d0857600080fd5b5081356001600160401b03811115614d1f57600080fd5b602083019150836020828501011115614c1f57600080fd5b60008060208385031215614d4a57600080fd5b82356001600160401b03811115614d6057600080fd5b614d6c85828601614cf6565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60038110614dac57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610c658284614d8e565b600060208284031215614dd057600080fd5b5035919050565b60006080820190506001600160401b03808451168352806020850151166020840152806040850151166040840152506060830151614e186060840182614d8e565b5092915050565b600080600080600060608688031215614e3757600080fd5b85356001600160401b0380821115614e4e57600080fd5b614e5a89838a01614cf6565b90975095506020880135915080821115614e7357600080fd5b50614e8088828901614cf6565b96999598509660400135949350505050565b60008060008060008060008060a0898b031215614eae57600080fd5b8835614eb981614b6e565b975060208901356001600160401b0380821115614ed557600080fd5b614ee18c838d01614bdb565b909950975060408b0135915080821115614efa57600080fd5b614f068c838d01614bc3565b965060608b0135915080821115614cb057600080fd5b6001600160a01b0381168114611fb957600080fd5b8035614b8e81614f1c565b60008060408385031215614f4f57600080fd5b8235614f5a81614f1c565b946020939093013593505050565b600060208284031215614f7a57600080fd5b81356135de81614f1c565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715614fbe57614fbe614f85565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614fec57614fec614f85565b604052919050565b60006001600160401b0382111561500d5761500d614f85565b5060051b60200190565b600082601f83011261502857600080fd5b8135602061503d61503883614ff4565b614fc4565b82815260059290921b8401810191818101908684111561505c57600080fd5b8286015b848110156150775780358352918301918301615060565b509695505050505050565b60008060006060848603121561509757600080fd5b83356001600160401b03808211156150ae57600080fd5b818601915086601f8301126150c257600080fd5b813560206150d261503883614ff4565b82815260059290921b8401810191818101908a8411156150f157600080fd5b948201945b8386101561511857853561510981614f1c565b825294820194908201906150f6565b9750508701359250508082111561512e57600080fd5b5061513b86828701615017565b92505061514a60408501614f31565b90509250925092565b60008060008060008060008060008060c08b8d03121561517257600080fd5b61517b8b614b83565b995060208b01356001600160401b038082111561519757600080fd5b6151a38e838f01614bc3565b9a5060408d01359150808211156151b957600080fd5b6151c58e838f01614bdb565b909a50985060608d01359150808211156151de57600080fd5b6151ea8e838f01614bdb565b909850965060808d013591508082111561520357600080fd5b61520f8e838f01614bdb565b909650945060a08d013591508082111561522857600080fd5b506152358d828e01614bdb565b915080935050809150509295989b9194979a5092959850565b60006020828403121561526057600080fd5b815180151581146135de57600080fd5b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b6020808252602f908201527f456967656e506f642e6861734e6576657252657374616b65643a20726573746160408201526e1ada5b99c81a5cc8195b98589b1959608a1b606082015260800190565b60208082526067908201527f456967656e506f642e70726f6f664973466f7256616c696454696d657374616d60408201527f703a20626561636f6e20636861696e2070726f6f66206d75737420626520617460608201527f206f72206166746572206d6f7374526563656e745769746864726177616c546960808201526606d657374616d760cc1b60a082015260c00190565b60006020828403121561540957600080fd5b5051919050565b6000808335601e1984360301811261542757600080fd5b8301803591506001600160401b0382111561544157600080fd5b602001915036819003821315614c1f57600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561547e57600080fd5b813564ffffffffff811681146135de57600080fd5b6000808335601e198436030181126154aa57600080fd5b8301803591506001600160401b038211156154c457600080fd5b6020019150600581901b3603821315614c1f57600080fd5b60006000198214156154f0576154f0614b40565b5060010190565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60005b8381101561558c578181015183820152602001615574565b838111156121445750506000910152565b600081518084526155b5816020860160208601615571565b601f01601f19169290920160200192915050565b6080815260006155dd60808301888a615548565b82810360208401526155ef818861559d565b90508281036040840152615604818688615548565b915050826060830152979650505050505050565b6020815260006149ce602083018486615548565b600080821280156001600160ff1b038490038513161561564e5761564e614b40565b600160ff1b839003841281161561566757615667614b40565b50500190565b60006001600160ff1b038184138284138082168684048611161561569357615693614b40565b600160ff1b60008712828116878305891216156156b2576156b2614b40565b600087129250878205871284841616156156ce576156ce614b40565b878505871281841616156156e4576156e4614b40565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b600082615717576157176156f2565b500690565b60008261572b5761572b6156f2565b500490565b60006001600160401b038381169083168181101561575057615750614b40565b039392505050565b6000823561017e1983360301811261576f57600080fd5b9190910192915050565b600081600019048311821515161561579357615793614b40565b500290565b6000828210156157aa576157aa614b40565b500390565b80516020808301519190811015614bd55760001960209190910360031b1b16919050565b600083516157e5818460208801615571565b6001600160801b0319939093169190920190815260100192915050565b6000825161576f818460208701615571565b600082601f83011261582557600080fd5b81356001600160401b0381111561583e5761583e614f85565b615851601f8201601f1916602001614fc4565b81815284602083860101111561586657600080fd5b816020850160208301376000918101602001919091529392505050565b6000610180823603121561589657600080fd5b61589e614f9b565b82356001600160401b03808211156158b557600080fd5b6158c136838701615814565b835260208501359150808211156158d757600080fd5b6158e336838701615814565b602084015260408501359150808211156158fc57600080fd5b61590836838701615814565b6040840152606085013591508082111561592157600080fd5b61592d36838701615814565b6060840152608085013591508082111561594657600080fd5b5061595336828601615814565b60808301525061596560a08401614b83565b60a082015261597660c08401614b83565b60c082015261598760e08401614b83565b60e082015261010083810135908201526101208084013590820152610140808401359082015261016092830135928101929092525090565b6000602082840312156159d157600080fd5b81516135de81614b6e565b600181815b80851115615a175781600019048211156159fd576159fd614b40565b80851615615a0a57918102915b93841c93908002906159e1565b509250929050565b600082615a2e57506001610c65565b81615a3b57506000610c65565b8160018114615a515760028114615a5b57615a77565b6001915050610c65565b60ff841115615a6c57615a6c614b40565b50506001821b610c65565b5060208310610133831016604e8410600b8410161715615a9a575081810a610c65565b615aa483836159dc565b8060001904821115615ab857615ab8614b40565b029392505050565b60006135de8383615a1f565b60006001600160401b0380831681851681830481118215151615615af257615af2614b40565b02949350505050565b60006001600160401b0380841680615b1557615b156156f2565b92169190910492915050565b60008083128015600160ff1b850184121615615b3f57615b3f614b40565b6001600160ff1b0384018313811615615b5a57615b5a614b40565b50500390565b600060208284031215615b7257600080fd5b81356135de81614b6e565b60006001600160401b03808316818516808303821115615b9f57615b9f614b40565b01949350505050565b600081615bb757615bb7614b40565b506000190190565b6020815260006135de602083018461559d56fe426561636f6e436861696e50726f6f66732e7665726966795769746864726177a26469706673582212200061efb94d40bbb427ddb8aae51ec74133591e8814f6dbd3bd8dbbee784961b864736f6c634300080c0033", +} + +// EigenPodABI is the input ABI used to generate the binding from. +// Deprecated: Use EigenPodMetaData.ABI instead. +var EigenPodABI = EigenPodMetaData.ABI + +// EigenPodBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use EigenPodMetaData.Bin instead. +var EigenPodBin = EigenPodMetaData.Bin + +// DeployEigenPod deploys a new Ethereum contract, binding an instance of EigenPod to it. +func DeployEigenPod(auth *bind.TransactOpts, backend bind.ContractBackend, _ethPOS common.Address, _delayedWithdrawalRouter common.Address, _eigenPodManager common.Address, _MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR uint64, _GENESIS_TIME uint64) (common.Address, *types.Transaction, *EigenPod, error) { + parsed, err := EigenPodMetaData.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(EigenPodBin), backend, _ethPOS, _delayedWithdrawalRouter, _eigenPodManager, _MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR, _GENESIS_TIME) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &EigenPod{EigenPodCaller: EigenPodCaller{contract: contract}, EigenPodTransactor: EigenPodTransactor{contract: contract}, EigenPodFilterer: EigenPodFilterer{contract: contract}}, nil +} + +// EigenPod is an auto generated Go binding around an Ethereum contract. +type EigenPod struct { + EigenPodCaller // Read-only binding to the contract + EigenPodTransactor // Write-only binding to the contract + EigenPodFilterer // Log filterer for contract events +} + +// EigenPodCaller is an auto generated read-only Go binding around an Ethereum contract. +type EigenPodCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenPodTransactor is an auto generated write-only Go binding around an Ethereum contract. +type EigenPodTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenPodFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type EigenPodFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenPodSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type EigenPodSession struct { + Contract *EigenPod // 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 +} + +// EigenPodCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type EigenPodCallerSession struct { + Contract *EigenPodCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// EigenPodTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type EigenPodTransactorSession struct { + Contract *EigenPodTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// EigenPodRaw is an auto generated low-level Go binding around an Ethereum contract. +type EigenPodRaw struct { + Contract *EigenPod // Generic contract binding to access the raw methods on +} + +// EigenPodCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type EigenPodCallerRaw struct { + Contract *EigenPodCaller // Generic read-only contract binding to access the raw methods on +} + +// EigenPodTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type EigenPodTransactorRaw struct { + Contract *EigenPodTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewEigenPod creates a new instance of EigenPod, bound to a specific deployed contract. +func NewEigenPod(address common.Address, backend bind.ContractBackend) (*EigenPod, error) { + contract, err := bindEigenPod(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &EigenPod{EigenPodCaller: EigenPodCaller{contract: contract}, EigenPodTransactor: EigenPodTransactor{contract: contract}, EigenPodFilterer: EigenPodFilterer{contract: contract}}, nil +} + +// NewEigenPodCaller creates a new read-only instance of EigenPod, bound to a specific deployed contract. +func NewEigenPodCaller(address common.Address, caller bind.ContractCaller) (*EigenPodCaller, error) { + contract, err := bindEigenPod(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &EigenPodCaller{contract: contract}, nil +} + +// NewEigenPodTransactor creates a new write-only instance of EigenPod, bound to a specific deployed contract. +func NewEigenPodTransactor(address common.Address, transactor bind.ContractTransactor) (*EigenPodTransactor, error) { + contract, err := bindEigenPod(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &EigenPodTransactor{contract: contract}, nil +} + +// NewEigenPodFilterer creates a new log filterer instance of EigenPod, bound to a specific deployed contract. +func NewEigenPodFilterer(address common.Address, filterer bind.ContractFilterer) (*EigenPodFilterer, error) { + contract, err := bindEigenPod(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &EigenPodFilterer{contract: contract}, nil +} + +// bindEigenPod binds a generic wrapper to an already deployed contract. +func bindEigenPod(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := EigenPodMetaData.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 (_EigenPod *EigenPodRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EigenPod.Contract.EigenPodCaller.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 (_EigenPod *EigenPodRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPod.Contract.EigenPodTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EigenPod *EigenPodRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EigenPod.Contract.EigenPodTransactor.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 (_EigenPod *EigenPodCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EigenPod.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 (_EigenPod *EigenPodTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPod.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EigenPod *EigenPodTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EigenPod.Contract.contract.Transact(opts, method, params...) +} + +// GENESISTIME is a free data retrieval call binding the contract method 0xf2882461. +// +// Solidity: function GENESIS_TIME() view returns(uint64) +func (_EigenPod *EigenPodCaller) GENESISTIME(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "GENESIS_TIME") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GENESISTIME is a free data retrieval call binding the contract method 0xf2882461. +// +// Solidity: function GENESIS_TIME() view returns(uint64) +func (_EigenPod *EigenPodSession) GENESISTIME() (uint64, error) { + return _EigenPod.Contract.GENESISTIME(&_EigenPod.CallOpts) +} + +// GENESISTIME is a free data retrieval call binding the contract method 0xf2882461. +// +// Solidity: function GENESIS_TIME() view returns(uint64) +func (_EigenPod *EigenPodCallerSession) GENESISTIME() (uint64, error) { + return _EigenPod.Contract.GENESISTIME(&_EigenPod.CallOpts) +} + +// MAXRESTAKEDBALANCEGWEIPERVALIDATOR is a free data retrieval call binding the contract method 0x1d905d5c. +// +// Solidity: function MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR() view returns(uint64) +func (_EigenPod *EigenPodCaller) MAXRESTAKEDBALANCEGWEIPERVALIDATOR(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MAXRESTAKEDBALANCEGWEIPERVALIDATOR is a free data retrieval call binding the contract method 0x1d905d5c. +// +// Solidity: function MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR() view returns(uint64) +func (_EigenPod *EigenPodSession) MAXRESTAKEDBALANCEGWEIPERVALIDATOR() (uint64, error) { + return _EigenPod.Contract.MAXRESTAKEDBALANCEGWEIPERVALIDATOR(&_EigenPod.CallOpts) +} + +// MAXRESTAKEDBALANCEGWEIPERVALIDATOR is a free data retrieval call binding the contract method 0x1d905d5c. +// +// Solidity: function MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR() view returns(uint64) +func (_EigenPod *EigenPodCallerSession) MAXRESTAKEDBALANCEGWEIPERVALIDATOR() (uint64, error) { + return _EigenPod.Contract.MAXRESTAKEDBALANCEGWEIPERVALIDATOR(&_EigenPod.CallOpts) +} + +// DelayedWithdrawalRouter is a free data retrieval call binding the contract method 0x1a5057be. +// +// Solidity: function delayedWithdrawalRouter() view returns(address) +func (_EigenPod *EigenPodCaller) DelayedWithdrawalRouter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "delayedWithdrawalRouter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DelayedWithdrawalRouter is a free data retrieval call binding the contract method 0x1a5057be. +// +// Solidity: function delayedWithdrawalRouter() view returns(address) +func (_EigenPod *EigenPodSession) DelayedWithdrawalRouter() (common.Address, error) { + return _EigenPod.Contract.DelayedWithdrawalRouter(&_EigenPod.CallOpts) +} + +// DelayedWithdrawalRouter is a free data retrieval call binding the contract method 0x1a5057be. +// +// Solidity: function delayedWithdrawalRouter() view returns(address) +func (_EigenPod *EigenPodCallerSession) DelayedWithdrawalRouter() (common.Address, error) { + return _EigenPod.Contract.DelayedWithdrawalRouter(&_EigenPod.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_EigenPod *EigenPodCaller) EigenPodManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPod.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 (_EigenPod *EigenPodSession) EigenPodManager() (common.Address, error) { + return _EigenPod.Contract.EigenPodManager(&_EigenPod.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_EigenPod *EigenPodCallerSession) EigenPodManager() (common.Address, error) { + return _EigenPod.Contract.EigenPodManager(&_EigenPod.CallOpts) +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_EigenPod *EigenPodCaller) EthPOS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "ethPOS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_EigenPod *EigenPodSession) EthPOS() (common.Address, error) { + return _EigenPod.Contract.EthPOS(&_EigenPod.CallOpts) +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_EigenPod *EigenPodCallerSession) EthPOS() (common.Address, error) { + return _EigenPod.Contract.EthPOS(&_EigenPod.CallOpts) +} + +// HasRestaked is a free data retrieval call binding the contract method 0x3106ab53. +// +// Solidity: function hasRestaked() view returns(bool) +func (_EigenPod *EigenPodCaller) HasRestaked(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "hasRestaked") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRestaked is a free data retrieval call binding the contract method 0x3106ab53. +// +// Solidity: function hasRestaked() view returns(bool) +func (_EigenPod *EigenPodSession) HasRestaked() (bool, error) { + return _EigenPod.Contract.HasRestaked(&_EigenPod.CallOpts) +} + +// HasRestaked is a free data retrieval call binding the contract method 0x3106ab53. +// +// Solidity: function hasRestaked() view returns(bool) +func (_EigenPod *EigenPodCallerSession) HasRestaked() (bool, error) { + return _EigenPod.Contract.HasRestaked(&_EigenPod.CallOpts) +} + +// MostRecentWithdrawalTimestamp is a free data retrieval call binding the contract method 0x87e0d289. +// +// Solidity: function mostRecentWithdrawalTimestamp() view returns(uint64) +func (_EigenPod *EigenPodCaller) MostRecentWithdrawalTimestamp(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "mostRecentWithdrawalTimestamp") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MostRecentWithdrawalTimestamp is a free data retrieval call binding the contract method 0x87e0d289. +// +// Solidity: function mostRecentWithdrawalTimestamp() view returns(uint64) +func (_EigenPod *EigenPodSession) MostRecentWithdrawalTimestamp() (uint64, error) { + return _EigenPod.Contract.MostRecentWithdrawalTimestamp(&_EigenPod.CallOpts) +} + +// MostRecentWithdrawalTimestamp is a free data retrieval call binding the contract method 0x87e0d289. +// +// Solidity: function mostRecentWithdrawalTimestamp() view returns(uint64) +func (_EigenPod *EigenPodCallerSession) MostRecentWithdrawalTimestamp() (uint64, error) { + return _EigenPod.Contract.MostRecentWithdrawalTimestamp(&_EigenPod.CallOpts) +} + +// NonBeaconChainETHBalanceWei is a free data retrieval call binding the contract method 0xfe80b087. +// +// Solidity: function nonBeaconChainETHBalanceWei() view returns(uint256) +func (_EigenPod *EigenPodCaller) NonBeaconChainETHBalanceWei(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "nonBeaconChainETHBalanceWei") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NonBeaconChainETHBalanceWei is a free data retrieval call binding the contract method 0xfe80b087. +// +// Solidity: function nonBeaconChainETHBalanceWei() view returns(uint256) +func (_EigenPod *EigenPodSession) NonBeaconChainETHBalanceWei() (*big.Int, error) { + return _EigenPod.Contract.NonBeaconChainETHBalanceWei(&_EigenPod.CallOpts) +} + +// NonBeaconChainETHBalanceWei is a free data retrieval call binding the contract method 0xfe80b087. +// +// Solidity: function nonBeaconChainETHBalanceWei() view returns(uint256) +func (_EigenPod *EigenPodCallerSession) NonBeaconChainETHBalanceWei() (*big.Int, error) { + return _EigenPod.Contract.NonBeaconChainETHBalanceWei(&_EigenPod.CallOpts) +} + +// PodOwner is a free data retrieval call binding the contract method 0x0b18ff66. +// +// Solidity: function podOwner() view returns(address) +func (_EigenPod *EigenPodCaller) PodOwner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "podOwner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PodOwner is a free data retrieval call binding the contract method 0x0b18ff66. +// +// Solidity: function podOwner() view returns(address) +func (_EigenPod *EigenPodSession) PodOwner() (common.Address, error) { + return _EigenPod.Contract.PodOwner(&_EigenPod.CallOpts) +} + +// PodOwner is a free data retrieval call binding the contract method 0x0b18ff66. +// +// Solidity: function podOwner() view returns(address) +func (_EigenPod *EigenPodCallerSession) PodOwner() (common.Address, error) { + return _EigenPod.Contract.PodOwner(&_EigenPod.CallOpts) +} + +// ProvenWithdrawal is a free data retrieval call binding the contract method 0x34bea20a. +// +// Solidity: function provenWithdrawal(bytes32 , uint64 ) view returns(bool) +func (_EigenPod *EigenPodCaller) ProvenWithdrawal(opts *bind.CallOpts, arg0 [32]byte, arg1 uint64) (bool, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "provenWithdrawal", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// ProvenWithdrawal is a free data retrieval call binding the contract method 0x34bea20a. +// +// Solidity: function provenWithdrawal(bytes32 , uint64 ) view returns(bool) +func (_EigenPod *EigenPodSession) ProvenWithdrawal(arg0 [32]byte, arg1 uint64) (bool, error) { + return _EigenPod.Contract.ProvenWithdrawal(&_EigenPod.CallOpts, arg0, arg1) +} + +// ProvenWithdrawal is a free data retrieval call binding the contract method 0x34bea20a. +// +// Solidity: function provenWithdrawal(bytes32 , uint64 ) view returns(bool) +func (_EigenPod *EigenPodCallerSession) ProvenWithdrawal(arg0 [32]byte, arg1 uint64) (bool, error) { + return _EigenPod.Contract.ProvenWithdrawal(&_EigenPod.CallOpts, arg0, arg1) +} + +// SumOfPartialWithdrawalsClaimedGwei is a free data retrieval call binding the contract method 0x5d3f65b6. +// +// Solidity: function sumOfPartialWithdrawalsClaimedGwei() view returns(uint64) +func (_EigenPod *EigenPodCaller) SumOfPartialWithdrawalsClaimedGwei(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "sumOfPartialWithdrawalsClaimedGwei") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// SumOfPartialWithdrawalsClaimedGwei is a free data retrieval call binding the contract method 0x5d3f65b6. +// +// Solidity: function sumOfPartialWithdrawalsClaimedGwei() view returns(uint64) +func (_EigenPod *EigenPodSession) SumOfPartialWithdrawalsClaimedGwei() (uint64, error) { + return _EigenPod.Contract.SumOfPartialWithdrawalsClaimedGwei(&_EigenPod.CallOpts) +} + +// SumOfPartialWithdrawalsClaimedGwei is a free data retrieval call binding the contract method 0x5d3f65b6. +// +// Solidity: function sumOfPartialWithdrawalsClaimedGwei() view returns(uint64) +func (_EigenPod *EigenPodCallerSession) SumOfPartialWithdrawalsClaimedGwei() (uint64, error) { + return _EigenPod.Contract.SumOfPartialWithdrawalsClaimedGwei(&_EigenPod.CallOpts) +} + +// ValidatorPubkeyHashToInfo is a free data retrieval call binding the contract method 0x6fcd0e53. +// +// Solidity: function validatorPubkeyHashToInfo(bytes32 validatorPubkeyHash) view returns((uint64,uint64,uint64,uint8)) +func (_EigenPod *EigenPodCaller) ValidatorPubkeyHashToInfo(opts *bind.CallOpts, validatorPubkeyHash [32]byte) (IEigenPodValidatorInfo, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "validatorPubkeyHashToInfo", validatorPubkeyHash) + + if err != nil { + return *new(IEigenPodValidatorInfo), err + } + + out0 := *abi.ConvertType(out[0], new(IEigenPodValidatorInfo)).(*IEigenPodValidatorInfo) + + return out0, err + +} + +// ValidatorPubkeyHashToInfo is a free data retrieval call binding the contract method 0x6fcd0e53. +// +// Solidity: function validatorPubkeyHashToInfo(bytes32 validatorPubkeyHash) view returns((uint64,uint64,uint64,uint8)) +func (_EigenPod *EigenPodSession) ValidatorPubkeyHashToInfo(validatorPubkeyHash [32]byte) (IEigenPodValidatorInfo, error) { + return _EigenPod.Contract.ValidatorPubkeyHashToInfo(&_EigenPod.CallOpts, validatorPubkeyHash) +} + +// ValidatorPubkeyHashToInfo is a free data retrieval call binding the contract method 0x6fcd0e53. +// +// Solidity: function validatorPubkeyHashToInfo(bytes32 validatorPubkeyHash) view returns((uint64,uint64,uint64,uint8)) +func (_EigenPod *EigenPodCallerSession) ValidatorPubkeyHashToInfo(validatorPubkeyHash [32]byte) (IEigenPodValidatorInfo, error) { + return _EigenPod.Contract.ValidatorPubkeyHashToInfo(&_EigenPod.CallOpts, validatorPubkeyHash) +} + +// ValidatorPubkeyToInfo is a free data retrieval call binding the contract method 0xb522538a. +// +// Solidity: function validatorPubkeyToInfo(bytes validatorPubkey) view returns((uint64,uint64,uint64,uint8)) +func (_EigenPod *EigenPodCaller) ValidatorPubkeyToInfo(opts *bind.CallOpts, validatorPubkey []byte) (IEigenPodValidatorInfo, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "validatorPubkeyToInfo", validatorPubkey) + + if err != nil { + return *new(IEigenPodValidatorInfo), err + } + + out0 := *abi.ConvertType(out[0], new(IEigenPodValidatorInfo)).(*IEigenPodValidatorInfo) + + return out0, err + +} + +// ValidatorPubkeyToInfo is a free data retrieval call binding the contract method 0xb522538a. +// +// Solidity: function validatorPubkeyToInfo(bytes validatorPubkey) view returns((uint64,uint64,uint64,uint8)) +func (_EigenPod *EigenPodSession) ValidatorPubkeyToInfo(validatorPubkey []byte) (IEigenPodValidatorInfo, error) { + return _EigenPod.Contract.ValidatorPubkeyToInfo(&_EigenPod.CallOpts, validatorPubkey) +} + +// ValidatorPubkeyToInfo is a free data retrieval call binding the contract method 0xb522538a. +// +// Solidity: function validatorPubkeyToInfo(bytes validatorPubkey) view returns((uint64,uint64,uint64,uint8)) +func (_EigenPod *EigenPodCallerSession) ValidatorPubkeyToInfo(validatorPubkey []byte) (IEigenPodValidatorInfo, error) { + return _EigenPod.Contract.ValidatorPubkeyToInfo(&_EigenPod.CallOpts, validatorPubkey) +} + +// ValidatorStatus is a free data retrieval call binding the contract method 0x58eaee79. +// +// Solidity: function validatorStatus(bytes validatorPubkey) view returns(uint8) +func (_EigenPod *EigenPodCaller) ValidatorStatus(opts *bind.CallOpts, validatorPubkey []byte) (uint8, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "validatorStatus", validatorPubkey) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// ValidatorStatus is a free data retrieval call binding the contract method 0x58eaee79. +// +// Solidity: function validatorStatus(bytes validatorPubkey) view returns(uint8) +func (_EigenPod *EigenPodSession) ValidatorStatus(validatorPubkey []byte) (uint8, error) { + return _EigenPod.Contract.ValidatorStatus(&_EigenPod.CallOpts, validatorPubkey) +} + +// ValidatorStatus is a free data retrieval call binding the contract method 0x58eaee79. +// +// Solidity: function validatorStatus(bytes validatorPubkey) view returns(uint8) +func (_EigenPod *EigenPodCallerSession) ValidatorStatus(validatorPubkey []byte) (uint8, error) { + return _EigenPod.Contract.ValidatorStatus(&_EigenPod.CallOpts, validatorPubkey) +} + +// ValidatorStatus0 is a free data retrieval call binding the contract method 0x7439841f. +// +// Solidity: function validatorStatus(bytes32 pubkeyHash) view returns(uint8) +func (_EigenPod *EigenPodCaller) ValidatorStatus0(opts *bind.CallOpts, pubkeyHash [32]byte) (uint8, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "validatorStatus0", pubkeyHash) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// ValidatorStatus0 is a free data retrieval call binding the contract method 0x7439841f. +// +// Solidity: function validatorStatus(bytes32 pubkeyHash) view returns(uint8) +func (_EigenPod *EigenPodSession) ValidatorStatus0(pubkeyHash [32]byte) (uint8, error) { + return _EigenPod.Contract.ValidatorStatus0(&_EigenPod.CallOpts, pubkeyHash) +} + +// ValidatorStatus0 is a free data retrieval call binding the contract method 0x7439841f. +// +// Solidity: function validatorStatus(bytes32 pubkeyHash) view returns(uint8) +func (_EigenPod *EigenPodCallerSession) ValidatorStatus0(pubkeyHash [32]byte) (uint8, error) { + return _EigenPod.Contract.ValidatorStatus0(&_EigenPod.CallOpts, pubkeyHash) +} + +// WithdrawableRestakedExecutionLayerGwei is a free data retrieval call binding the contract method 0x3474aa16. +// +// Solidity: function withdrawableRestakedExecutionLayerGwei() view returns(uint64) +func (_EigenPod *EigenPodCaller) WithdrawableRestakedExecutionLayerGwei(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _EigenPod.contract.Call(opts, &out, "withdrawableRestakedExecutionLayerGwei") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// WithdrawableRestakedExecutionLayerGwei is a free data retrieval call binding the contract method 0x3474aa16. +// +// Solidity: function withdrawableRestakedExecutionLayerGwei() view returns(uint64) +func (_EigenPod *EigenPodSession) WithdrawableRestakedExecutionLayerGwei() (uint64, error) { + return _EigenPod.Contract.WithdrawableRestakedExecutionLayerGwei(&_EigenPod.CallOpts) +} + +// WithdrawableRestakedExecutionLayerGwei is a free data retrieval call binding the contract method 0x3474aa16. +// +// Solidity: function withdrawableRestakedExecutionLayerGwei() view returns(uint64) +func (_EigenPod *EigenPodCallerSession) WithdrawableRestakedExecutionLayerGwei() (uint64, error) { + return _EigenPod.Contract.WithdrawableRestakedExecutionLayerGwei(&_EigenPod.CallOpts) +} + +// ActivateRestaking is a paid mutator transaction binding the contract method 0x0cd4649e. +// +// Solidity: function activateRestaking() returns() +func (_EigenPod *EigenPodTransactor) ActivateRestaking(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPod.contract.Transact(opts, "activateRestaking") +} + +// ActivateRestaking is a paid mutator transaction binding the contract method 0x0cd4649e. +// +// Solidity: function activateRestaking() returns() +func (_EigenPod *EigenPodSession) ActivateRestaking() (*types.Transaction, error) { + return _EigenPod.Contract.ActivateRestaking(&_EigenPod.TransactOpts) +} + +// ActivateRestaking is a paid mutator transaction binding the contract method 0x0cd4649e. +// +// Solidity: function activateRestaking() returns() +func (_EigenPod *EigenPodTransactorSession) ActivateRestaking() (*types.Transaction, error) { + return _EigenPod.Contract.ActivateRestaking(&_EigenPod.TransactOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _podOwner) returns() +func (_EigenPod *EigenPodTransactor) Initialize(opts *bind.TransactOpts, _podOwner common.Address) (*types.Transaction, error) { + return _EigenPod.contract.Transact(opts, "initialize", _podOwner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _podOwner) returns() +func (_EigenPod *EigenPodSession) Initialize(_podOwner common.Address) (*types.Transaction, error) { + return _EigenPod.Contract.Initialize(&_EigenPod.TransactOpts, _podOwner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _podOwner) returns() +func (_EigenPod *EigenPodTransactorSession) Initialize(_podOwner common.Address) (*types.Transaction, error) { + return _EigenPod.Contract.Initialize(&_EigenPod.TransactOpts, _podOwner) +} + +// RecoverTokens is a paid mutator transaction binding the contract method 0xdda3346c. +// +// Solidity: function recoverTokens(address[] tokenList, uint256[] amountsToWithdraw, address recipient) returns() +func (_EigenPod *EigenPodTransactor) RecoverTokens(opts *bind.TransactOpts, tokenList []common.Address, amountsToWithdraw []*big.Int, recipient common.Address) (*types.Transaction, error) { + return _EigenPod.contract.Transact(opts, "recoverTokens", tokenList, amountsToWithdraw, recipient) +} + +// RecoverTokens is a paid mutator transaction binding the contract method 0xdda3346c. +// +// Solidity: function recoverTokens(address[] tokenList, uint256[] amountsToWithdraw, address recipient) returns() +func (_EigenPod *EigenPodSession) RecoverTokens(tokenList []common.Address, amountsToWithdraw []*big.Int, recipient common.Address) (*types.Transaction, error) { + return _EigenPod.Contract.RecoverTokens(&_EigenPod.TransactOpts, tokenList, amountsToWithdraw, recipient) +} + +// RecoverTokens is a paid mutator transaction binding the contract method 0xdda3346c. +// +// Solidity: function recoverTokens(address[] tokenList, uint256[] amountsToWithdraw, address recipient) returns() +func (_EigenPod *EigenPodTransactorSession) RecoverTokens(tokenList []common.Address, amountsToWithdraw []*big.Int, recipient common.Address) (*types.Transaction, error) { + return _EigenPod.Contract.RecoverTokens(&_EigenPod.TransactOpts, tokenList, amountsToWithdraw, recipient) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_EigenPod *EigenPodTransactor) Stake(opts *bind.TransactOpts, pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _EigenPod.contract.Transact(opts, "stake", pubkey, signature, depositDataRoot) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_EigenPod *EigenPodSession) Stake(pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _EigenPod.Contract.Stake(&_EigenPod.TransactOpts, pubkey, signature, depositDataRoot) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_EigenPod *EigenPodTransactorSession) Stake(pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _EigenPod.Contract.Stake(&_EigenPod.TransactOpts, pubkey, signature, depositDataRoot) +} + +// VerifyAndProcessWithdrawals is a paid mutator transaction binding the contract method 0xe251ef52. +// +// Solidity: function verifyAndProcessWithdrawals(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes,bytes,bytes,uint64,uint64,uint64,bytes32,bytes32,bytes32,bytes32)[] withdrawalProofs, bytes[] validatorFieldsProofs, bytes32[][] validatorFields, bytes32[][] withdrawalFields) returns() +func (_EigenPod *EigenPodTransactor) VerifyAndProcessWithdrawals(opts *bind.TransactOpts, oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, withdrawalProofs []BeaconChainProofsWithdrawalProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte, withdrawalFields [][][32]byte) (*types.Transaction, error) { + return _EigenPod.contract.Transact(opts, "verifyAndProcessWithdrawals", oracleTimestamp, stateRootProof, withdrawalProofs, validatorFieldsProofs, validatorFields, withdrawalFields) +} + +// VerifyAndProcessWithdrawals is a paid mutator transaction binding the contract method 0xe251ef52. +// +// Solidity: function verifyAndProcessWithdrawals(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes,bytes,bytes,uint64,uint64,uint64,bytes32,bytes32,bytes32,bytes32)[] withdrawalProofs, bytes[] validatorFieldsProofs, bytes32[][] validatorFields, bytes32[][] withdrawalFields) returns() +func (_EigenPod *EigenPodSession) VerifyAndProcessWithdrawals(oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, withdrawalProofs []BeaconChainProofsWithdrawalProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte, withdrawalFields [][][32]byte) (*types.Transaction, error) { + return _EigenPod.Contract.VerifyAndProcessWithdrawals(&_EigenPod.TransactOpts, oracleTimestamp, stateRootProof, withdrawalProofs, validatorFieldsProofs, validatorFields, withdrawalFields) +} + +// VerifyAndProcessWithdrawals is a paid mutator transaction binding the contract method 0xe251ef52. +// +// Solidity: function verifyAndProcessWithdrawals(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes,bytes,bytes,uint64,uint64,uint64,bytes32,bytes32,bytes32,bytes32)[] withdrawalProofs, bytes[] validatorFieldsProofs, bytes32[][] validatorFields, bytes32[][] withdrawalFields) returns() +func (_EigenPod *EigenPodTransactorSession) VerifyAndProcessWithdrawals(oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, withdrawalProofs []BeaconChainProofsWithdrawalProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte, withdrawalFields [][][32]byte) (*types.Transaction, error) { + return _EigenPod.Contract.VerifyAndProcessWithdrawals(&_EigenPod.TransactOpts, oracleTimestamp, stateRootProof, withdrawalProofs, validatorFieldsProofs, validatorFields, withdrawalFields) +} + +// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xa50600f4. +// +// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_EigenPod *EigenPodTransactor) VerifyBalanceUpdates(opts *bind.TransactOpts, oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _EigenPod.contract.Transact(opts, "verifyBalanceUpdates", oracleTimestamp, validatorIndices, stateRootProof, validatorFieldsProofs, validatorFields) +} + +// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xa50600f4. +// +// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_EigenPod *EigenPodSession) VerifyBalanceUpdates(oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _EigenPod.Contract.VerifyBalanceUpdates(&_EigenPod.TransactOpts, oracleTimestamp, validatorIndices, stateRootProof, validatorFieldsProofs, validatorFields) +} + +// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xa50600f4. +// +// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_EigenPod *EigenPodTransactorSession) VerifyBalanceUpdates(oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _EigenPod.Contract.VerifyBalanceUpdates(&_EigenPod.TransactOpts, oracleTimestamp, validatorIndices, stateRootProof, validatorFieldsProofs, validatorFields) +} + +// VerifyWithdrawalCredentials is a paid mutator transaction binding the contract method 0x3f65cf19. +// +// Solidity: function verifyWithdrawalCredentials(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, uint40[] validatorIndices, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_EigenPod *EigenPodTransactor) VerifyWithdrawalCredentials(opts *bind.TransactOpts, oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, validatorIndices []*big.Int, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _EigenPod.contract.Transact(opts, "verifyWithdrawalCredentials", oracleTimestamp, stateRootProof, validatorIndices, validatorFieldsProofs, validatorFields) +} + +// VerifyWithdrawalCredentials is a paid mutator transaction binding the contract method 0x3f65cf19. +// +// Solidity: function verifyWithdrawalCredentials(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, uint40[] validatorIndices, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_EigenPod *EigenPodSession) VerifyWithdrawalCredentials(oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, validatorIndices []*big.Int, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _EigenPod.Contract.VerifyWithdrawalCredentials(&_EigenPod.TransactOpts, oracleTimestamp, stateRootProof, validatorIndices, validatorFieldsProofs, validatorFields) +} + +// VerifyWithdrawalCredentials is a paid mutator transaction binding the contract method 0x3f65cf19. +// +// Solidity: function verifyWithdrawalCredentials(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, uint40[] validatorIndices, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_EigenPod *EigenPodTransactorSession) VerifyWithdrawalCredentials(oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, validatorIndices []*big.Int, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _EigenPod.Contract.VerifyWithdrawalCredentials(&_EigenPod.TransactOpts, oracleTimestamp, stateRootProof, validatorIndices, validatorFieldsProofs, validatorFields) +} + +// WithdrawBeforeRestaking is a paid mutator transaction binding the contract method 0xbaa7145a. +// +// Solidity: function withdrawBeforeRestaking() returns() +func (_EigenPod *EigenPodTransactor) WithdrawBeforeRestaking(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPod.contract.Transact(opts, "withdrawBeforeRestaking") +} + +// WithdrawBeforeRestaking is a paid mutator transaction binding the contract method 0xbaa7145a. +// +// Solidity: function withdrawBeforeRestaking() returns() +func (_EigenPod *EigenPodSession) WithdrawBeforeRestaking() (*types.Transaction, error) { + return _EigenPod.Contract.WithdrawBeforeRestaking(&_EigenPod.TransactOpts) +} + +// WithdrawBeforeRestaking is a paid mutator transaction binding the contract method 0xbaa7145a. +// +// Solidity: function withdrawBeforeRestaking() returns() +func (_EigenPod *EigenPodTransactorSession) WithdrawBeforeRestaking() (*types.Transaction, error) { + return _EigenPod.Contract.WithdrawBeforeRestaking(&_EigenPod.TransactOpts) +} + +// WithdrawNonBeaconChainETHBalanceWei is a paid mutator transaction binding the contract method 0xe2c83445. +// +// Solidity: function withdrawNonBeaconChainETHBalanceWei(address recipient, uint256 amountToWithdraw) returns() +func (_EigenPod *EigenPodTransactor) WithdrawNonBeaconChainETHBalanceWei(opts *bind.TransactOpts, recipient common.Address, amountToWithdraw *big.Int) (*types.Transaction, error) { + return _EigenPod.contract.Transact(opts, "withdrawNonBeaconChainETHBalanceWei", recipient, amountToWithdraw) +} + +// WithdrawNonBeaconChainETHBalanceWei is a paid mutator transaction binding the contract method 0xe2c83445. +// +// Solidity: function withdrawNonBeaconChainETHBalanceWei(address recipient, uint256 amountToWithdraw) returns() +func (_EigenPod *EigenPodSession) WithdrawNonBeaconChainETHBalanceWei(recipient common.Address, amountToWithdraw *big.Int) (*types.Transaction, error) { + return _EigenPod.Contract.WithdrawNonBeaconChainETHBalanceWei(&_EigenPod.TransactOpts, recipient, amountToWithdraw) +} + +// WithdrawNonBeaconChainETHBalanceWei is a paid mutator transaction binding the contract method 0xe2c83445. +// +// Solidity: function withdrawNonBeaconChainETHBalanceWei(address recipient, uint256 amountToWithdraw) returns() +func (_EigenPod *EigenPodTransactorSession) WithdrawNonBeaconChainETHBalanceWei(recipient common.Address, amountToWithdraw *big.Int) (*types.Transaction, error) { + return _EigenPod.Contract.WithdrawNonBeaconChainETHBalanceWei(&_EigenPod.TransactOpts, recipient, amountToWithdraw) +} + +// WithdrawRestakedBeaconChainETH is a paid mutator transaction binding the contract method 0xc4907442. +// +// Solidity: function withdrawRestakedBeaconChainETH(address recipient, uint256 amountWei) returns() +func (_EigenPod *EigenPodTransactor) WithdrawRestakedBeaconChainETH(opts *bind.TransactOpts, recipient common.Address, amountWei *big.Int) (*types.Transaction, error) { + return _EigenPod.contract.Transact(opts, "withdrawRestakedBeaconChainETH", recipient, amountWei) +} + +// WithdrawRestakedBeaconChainETH is a paid mutator transaction binding the contract method 0xc4907442. +// +// Solidity: function withdrawRestakedBeaconChainETH(address recipient, uint256 amountWei) returns() +func (_EigenPod *EigenPodSession) WithdrawRestakedBeaconChainETH(recipient common.Address, amountWei *big.Int) (*types.Transaction, error) { + return _EigenPod.Contract.WithdrawRestakedBeaconChainETH(&_EigenPod.TransactOpts, recipient, amountWei) +} + +// WithdrawRestakedBeaconChainETH is a paid mutator transaction binding the contract method 0xc4907442. +// +// Solidity: function withdrawRestakedBeaconChainETH(address recipient, uint256 amountWei) returns() +func (_EigenPod *EigenPodTransactorSession) WithdrawRestakedBeaconChainETH(recipient common.Address, amountWei *big.Int) (*types.Transaction, error) { + return _EigenPod.Contract.WithdrawRestakedBeaconChainETH(&_EigenPod.TransactOpts, recipient, amountWei) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_EigenPod *EigenPodTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPod.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_EigenPod *EigenPodSession) Receive() (*types.Transaction, error) { + return _EigenPod.Contract.Receive(&_EigenPod.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_EigenPod *EigenPodTransactorSession) Receive() (*types.Transaction, error) { + return _EigenPod.Contract.Receive(&_EigenPod.TransactOpts) +} + +// EigenPodEigenPodStakedIterator is returned from FilterEigenPodStaked and is used to iterate over the raw logs and unpacked data for EigenPodStaked events raised by the EigenPod contract. +type EigenPodEigenPodStakedIterator struct { + Event *EigenPodEigenPodStaked // 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 *EigenPodEigenPodStakedIterator) 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(EigenPodEigenPodStaked) + 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(EigenPodEigenPodStaked) + 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 *EigenPodEigenPodStakedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodEigenPodStakedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodEigenPodStaked represents a EigenPodStaked event raised by the EigenPod contract. +type EigenPodEigenPodStaked struct { + Pubkey []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterEigenPodStaked is a free log retrieval operation binding the contract event 0x606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e23. +// +// Solidity: event EigenPodStaked(bytes pubkey) +func (_EigenPod *EigenPodFilterer) FilterEigenPodStaked(opts *bind.FilterOpts) (*EigenPodEigenPodStakedIterator, error) { + + logs, sub, err := _EigenPod.contract.FilterLogs(opts, "EigenPodStaked") + if err != nil { + return nil, err + } + return &EigenPodEigenPodStakedIterator{contract: _EigenPod.contract, event: "EigenPodStaked", logs: logs, sub: sub}, nil +} + +// WatchEigenPodStaked is a free log subscription operation binding the contract event 0x606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e23. +// +// Solidity: event EigenPodStaked(bytes pubkey) +func (_EigenPod *EigenPodFilterer) WatchEigenPodStaked(opts *bind.WatchOpts, sink chan<- *EigenPodEigenPodStaked) (event.Subscription, error) { + + logs, sub, err := _EigenPod.contract.WatchLogs(opts, "EigenPodStaked") + 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(EigenPodEigenPodStaked) + if err := _EigenPod.contract.UnpackLog(event, "EigenPodStaked", 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 +} + +// ParseEigenPodStaked is a log parse operation binding the contract event 0x606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e23. +// +// Solidity: event EigenPodStaked(bytes pubkey) +func (_EigenPod *EigenPodFilterer) ParseEigenPodStaked(log types.Log) (*EigenPodEigenPodStaked, error) { + event := new(EigenPodEigenPodStaked) + if err := _EigenPod.contract.UnpackLog(event, "EigenPodStaked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodFullWithdrawalRedeemedIterator is returned from FilterFullWithdrawalRedeemed and is used to iterate over the raw logs and unpacked data for FullWithdrawalRedeemed events raised by the EigenPod contract. +type EigenPodFullWithdrawalRedeemedIterator struct { + Event *EigenPodFullWithdrawalRedeemed // 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 *EigenPodFullWithdrawalRedeemedIterator) 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(EigenPodFullWithdrawalRedeemed) + 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(EigenPodFullWithdrawalRedeemed) + 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 *EigenPodFullWithdrawalRedeemedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodFullWithdrawalRedeemedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodFullWithdrawalRedeemed represents a FullWithdrawalRedeemed event raised by the EigenPod contract. +type EigenPodFullWithdrawalRedeemed struct { + ValidatorIndex *big.Int + WithdrawalTimestamp uint64 + Recipient common.Address + WithdrawalAmountGwei uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFullWithdrawalRedeemed is a free log retrieval operation binding the contract event 0xb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a0963. +// +// Solidity: event FullWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 withdrawalAmountGwei) +func (_EigenPod *EigenPodFilterer) FilterFullWithdrawalRedeemed(opts *bind.FilterOpts, recipient []common.Address) (*EigenPodFullWithdrawalRedeemedIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _EigenPod.contract.FilterLogs(opts, "FullWithdrawalRedeemed", recipientRule) + if err != nil { + return nil, err + } + return &EigenPodFullWithdrawalRedeemedIterator{contract: _EigenPod.contract, event: "FullWithdrawalRedeemed", logs: logs, sub: sub}, nil +} + +// WatchFullWithdrawalRedeemed is a free log subscription operation binding the contract event 0xb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a0963. +// +// Solidity: event FullWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 withdrawalAmountGwei) +func (_EigenPod *EigenPodFilterer) WatchFullWithdrawalRedeemed(opts *bind.WatchOpts, sink chan<- *EigenPodFullWithdrawalRedeemed, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _EigenPod.contract.WatchLogs(opts, "FullWithdrawalRedeemed", recipientRule) + 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(EigenPodFullWithdrawalRedeemed) + if err := _EigenPod.contract.UnpackLog(event, "FullWithdrawalRedeemed", 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 +} + +// ParseFullWithdrawalRedeemed is a log parse operation binding the contract event 0xb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a0963. +// +// Solidity: event FullWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 withdrawalAmountGwei) +func (_EigenPod *EigenPodFilterer) ParseFullWithdrawalRedeemed(log types.Log) (*EigenPodFullWithdrawalRedeemed, error) { + event := new(EigenPodFullWithdrawalRedeemed) + if err := _EigenPod.contract.UnpackLog(event, "FullWithdrawalRedeemed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the EigenPod contract. +type EigenPodInitializedIterator struct { + Event *EigenPodInitialized // 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 *EigenPodInitializedIterator) 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(EigenPodInitialized) + 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(EigenPodInitialized) + 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 *EigenPodInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodInitialized represents a Initialized event raised by the EigenPod contract. +type EigenPodInitialized 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 (_EigenPod *EigenPodFilterer) FilterInitialized(opts *bind.FilterOpts) (*EigenPodInitializedIterator, error) { + + logs, sub, err := _EigenPod.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &EigenPodInitializedIterator{contract: _EigenPod.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 (_EigenPod *EigenPodFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *EigenPodInitialized) (event.Subscription, error) { + + logs, sub, err := _EigenPod.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(EigenPodInitialized) + if err := _EigenPod.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 (_EigenPod *EigenPodFilterer) ParseInitialized(log types.Log) (*EigenPodInitialized, error) { + event := new(EigenPodInitialized) + if err := _EigenPod.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodNonBeaconChainETHReceivedIterator is returned from FilterNonBeaconChainETHReceived and is used to iterate over the raw logs and unpacked data for NonBeaconChainETHReceived events raised by the EigenPod contract. +type EigenPodNonBeaconChainETHReceivedIterator struct { + Event *EigenPodNonBeaconChainETHReceived // 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 *EigenPodNonBeaconChainETHReceivedIterator) 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(EigenPodNonBeaconChainETHReceived) + 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(EigenPodNonBeaconChainETHReceived) + 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 *EigenPodNonBeaconChainETHReceivedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodNonBeaconChainETHReceivedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodNonBeaconChainETHReceived represents a NonBeaconChainETHReceived event raised by the EigenPod contract. +type EigenPodNonBeaconChainETHReceived struct { + AmountReceived *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNonBeaconChainETHReceived is a free log retrieval operation binding the contract event 0x6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf49. +// +// Solidity: event NonBeaconChainETHReceived(uint256 amountReceived) +func (_EigenPod *EigenPodFilterer) FilterNonBeaconChainETHReceived(opts *bind.FilterOpts) (*EigenPodNonBeaconChainETHReceivedIterator, error) { + + logs, sub, err := _EigenPod.contract.FilterLogs(opts, "NonBeaconChainETHReceived") + if err != nil { + return nil, err + } + return &EigenPodNonBeaconChainETHReceivedIterator{contract: _EigenPod.contract, event: "NonBeaconChainETHReceived", logs: logs, sub: sub}, nil +} + +// WatchNonBeaconChainETHReceived is a free log subscription operation binding the contract event 0x6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf49. +// +// Solidity: event NonBeaconChainETHReceived(uint256 amountReceived) +func (_EigenPod *EigenPodFilterer) WatchNonBeaconChainETHReceived(opts *bind.WatchOpts, sink chan<- *EigenPodNonBeaconChainETHReceived) (event.Subscription, error) { + + logs, sub, err := _EigenPod.contract.WatchLogs(opts, "NonBeaconChainETHReceived") + 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(EigenPodNonBeaconChainETHReceived) + if err := _EigenPod.contract.UnpackLog(event, "NonBeaconChainETHReceived", 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 +} + +// ParseNonBeaconChainETHReceived is a log parse operation binding the contract event 0x6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf49. +// +// Solidity: event NonBeaconChainETHReceived(uint256 amountReceived) +func (_EigenPod *EigenPodFilterer) ParseNonBeaconChainETHReceived(log types.Log) (*EigenPodNonBeaconChainETHReceived, error) { + event := new(EigenPodNonBeaconChainETHReceived) + if err := _EigenPod.contract.UnpackLog(event, "NonBeaconChainETHReceived", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodNonBeaconChainETHWithdrawnIterator is returned from FilterNonBeaconChainETHWithdrawn and is used to iterate over the raw logs and unpacked data for NonBeaconChainETHWithdrawn events raised by the EigenPod contract. +type EigenPodNonBeaconChainETHWithdrawnIterator struct { + Event *EigenPodNonBeaconChainETHWithdrawn // 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 *EigenPodNonBeaconChainETHWithdrawnIterator) 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(EigenPodNonBeaconChainETHWithdrawn) + 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(EigenPodNonBeaconChainETHWithdrawn) + 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 *EigenPodNonBeaconChainETHWithdrawnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodNonBeaconChainETHWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodNonBeaconChainETHWithdrawn represents a NonBeaconChainETHWithdrawn event raised by the EigenPod contract. +type EigenPodNonBeaconChainETHWithdrawn struct { + Recipient common.Address + AmountWithdrawn *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNonBeaconChainETHWithdrawn is a free log retrieval operation binding the contract event 0x30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f53096. +// +// Solidity: event NonBeaconChainETHWithdrawn(address indexed recipient, uint256 amountWithdrawn) +func (_EigenPod *EigenPodFilterer) FilterNonBeaconChainETHWithdrawn(opts *bind.FilterOpts, recipient []common.Address) (*EigenPodNonBeaconChainETHWithdrawnIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _EigenPod.contract.FilterLogs(opts, "NonBeaconChainETHWithdrawn", recipientRule) + if err != nil { + return nil, err + } + return &EigenPodNonBeaconChainETHWithdrawnIterator{contract: _EigenPod.contract, event: "NonBeaconChainETHWithdrawn", logs: logs, sub: sub}, nil +} + +// WatchNonBeaconChainETHWithdrawn is a free log subscription operation binding the contract event 0x30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f53096. +// +// Solidity: event NonBeaconChainETHWithdrawn(address indexed recipient, uint256 amountWithdrawn) +func (_EigenPod *EigenPodFilterer) WatchNonBeaconChainETHWithdrawn(opts *bind.WatchOpts, sink chan<- *EigenPodNonBeaconChainETHWithdrawn, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _EigenPod.contract.WatchLogs(opts, "NonBeaconChainETHWithdrawn", recipientRule) + 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(EigenPodNonBeaconChainETHWithdrawn) + if err := _EigenPod.contract.UnpackLog(event, "NonBeaconChainETHWithdrawn", 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 +} + +// ParseNonBeaconChainETHWithdrawn is a log parse operation binding the contract event 0x30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f53096. +// +// Solidity: event NonBeaconChainETHWithdrawn(address indexed recipient, uint256 amountWithdrawn) +func (_EigenPod *EigenPodFilterer) ParseNonBeaconChainETHWithdrawn(log types.Log) (*EigenPodNonBeaconChainETHWithdrawn, error) { + event := new(EigenPodNonBeaconChainETHWithdrawn) + if err := _EigenPod.contract.UnpackLog(event, "NonBeaconChainETHWithdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodPartialWithdrawalRedeemedIterator is returned from FilterPartialWithdrawalRedeemed and is used to iterate over the raw logs and unpacked data for PartialWithdrawalRedeemed events raised by the EigenPod contract. +type EigenPodPartialWithdrawalRedeemedIterator struct { + Event *EigenPodPartialWithdrawalRedeemed // 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 *EigenPodPartialWithdrawalRedeemedIterator) 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(EigenPodPartialWithdrawalRedeemed) + 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(EigenPodPartialWithdrawalRedeemed) + 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 *EigenPodPartialWithdrawalRedeemedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodPartialWithdrawalRedeemedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodPartialWithdrawalRedeemed represents a PartialWithdrawalRedeemed event raised by the EigenPod contract. +type EigenPodPartialWithdrawalRedeemed struct { + ValidatorIndex *big.Int + WithdrawalTimestamp uint64 + Recipient common.Address + PartialWithdrawalAmountGwei uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPartialWithdrawalRedeemed is a free log retrieval operation binding the contract event 0x8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e. +// +// Solidity: event PartialWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 partialWithdrawalAmountGwei) +func (_EigenPod *EigenPodFilterer) FilterPartialWithdrawalRedeemed(opts *bind.FilterOpts, recipient []common.Address) (*EigenPodPartialWithdrawalRedeemedIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _EigenPod.contract.FilterLogs(opts, "PartialWithdrawalRedeemed", recipientRule) + if err != nil { + return nil, err + } + return &EigenPodPartialWithdrawalRedeemedIterator{contract: _EigenPod.contract, event: "PartialWithdrawalRedeemed", logs: logs, sub: sub}, nil +} + +// WatchPartialWithdrawalRedeemed is a free log subscription operation binding the contract event 0x8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e. +// +// Solidity: event PartialWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 partialWithdrawalAmountGwei) +func (_EigenPod *EigenPodFilterer) WatchPartialWithdrawalRedeemed(opts *bind.WatchOpts, sink chan<- *EigenPodPartialWithdrawalRedeemed, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _EigenPod.contract.WatchLogs(opts, "PartialWithdrawalRedeemed", recipientRule) + 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(EigenPodPartialWithdrawalRedeemed) + if err := _EigenPod.contract.UnpackLog(event, "PartialWithdrawalRedeemed", 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 +} + +// ParsePartialWithdrawalRedeemed is a log parse operation binding the contract event 0x8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e. +// +// Solidity: event PartialWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 partialWithdrawalAmountGwei) +func (_EigenPod *EigenPodFilterer) ParsePartialWithdrawalRedeemed(log types.Log) (*EigenPodPartialWithdrawalRedeemed, error) { + event := new(EigenPodPartialWithdrawalRedeemed) + if err := _EigenPod.contract.UnpackLog(event, "PartialWithdrawalRedeemed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodRestakedBeaconChainETHWithdrawnIterator is returned from FilterRestakedBeaconChainETHWithdrawn and is used to iterate over the raw logs and unpacked data for RestakedBeaconChainETHWithdrawn events raised by the EigenPod contract. +type EigenPodRestakedBeaconChainETHWithdrawnIterator struct { + Event *EigenPodRestakedBeaconChainETHWithdrawn // 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 *EigenPodRestakedBeaconChainETHWithdrawnIterator) 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(EigenPodRestakedBeaconChainETHWithdrawn) + 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(EigenPodRestakedBeaconChainETHWithdrawn) + 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 *EigenPodRestakedBeaconChainETHWithdrawnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodRestakedBeaconChainETHWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodRestakedBeaconChainETHWithdrawn represents a RestakedBeaconChainETHWithdrawn event raised by the EigenPod contract. +type EigenPodRestakedBeaconChainETHWithdrawn struct { + Recipient common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRestakedBeaconChainETHWithdrawn is a free log retrieval operation binding the contract event 0x8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e. +// +// Solidity: event RestakedBeaconChainETHWithdrawn(address indexed recipient, uint256 amount) +func (_EigenPod *EigenPodFilterer) FilterRestakedBeaconChainETHWithdrawn(opts *bind.FilterOpts, recipient []common.Address) (*EigenPodRestakedBeaconChainETHWithdrawnIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _EigenPod.contract.FilterLogs(opts, "RestakedBeaconChainETHWithdrawn", recipientRule) + if err != nil { + return nil, err + } + return &EigenPodRestakedBeaconChainETHWithdrawnIterator{contract: _EigenPod.contract, event: "RestakedBeaconChainETHWithdrawn", logs: logs, sub: sub}, nil +} + +// WatchRestakedBeaconChainETHWithdrawn is a free log subscription operation binding the contract event 0x8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e. +// +// Solidity: event RestakedBeaconChainETHWithdrawn(address indexed recipient, uint256 amount) +func (_EigenPod *EigenPodFilterer) WatchRestakedBeaconChainETHWithdrawn(opts *bind.WatchOpts, sink chan<- *EigenPodRestakedBeaconChainETHWithdrawn, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _EigenPod.contract.WatchLogs(opts, "RestakedBeaconChainETHWithdrawn", recipientRule) + 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(EigenPodRestakedBeaconChainETHWithdrawn) + if err := _EigenPod.contract.UnpackLog(event, "RestakedBeaconChainETHWithdrawn", 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 +} + +// ParseRestakedBeaconChainETHWithdrawn is a log parse operation binding the contract event 0x8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e. +// +// Solidity: event RestakedBeaconChainETHWithdrawn(address indexed recipient, uint256 amount) +func (_EigenPod *EigenPodFilterer) ParseRestakedBeaconChainETHWithdrawn(log types.Log) (*EigenPodRestakedBeaconChainETHWithdrawn, error) { + event := new(EigenPodRestakedBeaconChainETHWithdrawn) + if err := _EigenPod.contract.UnpackLog(event, "RestakedBeaconChainETHWithdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodRestakingActivatedIterator is returned from FilterRestakingActivated and is used to iterate over the raw logs and unpacked data for RestakingActivated events raised by the EigenPod contract. +type EigenPodRestakingActivatedIterator struct { + Event *EigenPodRestakingActivated // 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 *EigenPodRestakingActivatedIterator) 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(EigenPodRestakingActivated) + 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(EigenPodRestakingActivated) + 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 *EigenPodRestakingActivatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodRestakingActivatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodRestakingActivated represents a RestakingActivated event raised by the EigenPod contract. +type EigenPodRestakingActivated struct { + PodOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRestakingActivated is a free log retrieval operation binding the contract event 0xca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd. +// +// Solidity: event RestakingActivated(address indexed podOwner) +func (_EigenPod *EigenPodFilterer) FilterRestakingActivated(opts *bind.FilterOpts, podOwner []common.Address) (*EigenPodRestakingActivatedIterator, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPod.contract.FilterLogs(opts, "RestakingActivated", podOwnerRule) + if err != nil { + return nil, err + } + return &EigenPodRestakingActivatedIterator{contract: _EigenPod.contract, event: "RestakingActivated", logs: logs, sub: sub}, nil +} + +// WatchRestakingActivated is a free log subscription operation binding the contract event 0xca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd. +// +// Solidity: event RestakingActivated(address indexed podOwner) +func (_EigenPod *EigenPodFilterer) WatchRestakingActivated(opts *bind.WatchOpts, sink chan<- *EigenPodRestakingActivated, podOwner []common.Address) (event.Subscription, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPod.contract.WatchLogs(opts, "RestakingActivated", podOwnerRule) + 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(EigenPodRestakingActivated) + if err := _EigenPod.contract.UnpackLog(event, "RestakingActivated", 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 +} + +// ParseRestakingActivated is a log parse operation binding the contract event 0xca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd. +// +// Solidity: event RestakingActivated(address indexed podOwner) +func (_EigenPod *EigenPodFilterer) ParseRestakingActivated(log types.Log) (*EigenPodRestakingActivated, error) { + event := new(EigenPodRestakingActivated) + if err := _EigenPod.contract.UnpackLog(event, "RestakingActivated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodValidatorBalanceUpdatedIterator is returned from FilterValidatorBalanceUpdated and is used to iterate over the raw logs and unpacked data for ValidatorBalanceUpdated events raised by the EigenPod contract. +type EigenPodValidatorBalanceUpdatedIterator struct { + Event *EigenPodValidatorBalanceUpdated // 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 *EigenPodValidatorBalanceUpdatedIterator) 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(EigenPodValidatorBalanceUpdated) + 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(EigenPodValidatorBalanceUpdated) + 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 *EigenPodValidatorBalanceUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodValidatorBalanceUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodValidatorBalanceUpdated represents a ValidatorBalanceUpdated event raised by the EigenPod contract. +type EigenPodValidatorBalanceUpdated struct { + ValidatorIndex *big.Int + BalanceTimestamp uint64 + NewValidatorBalanceGwei uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorBalanceUpdated is a free log retrieval operation binding the contract event 0x0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df. +// +// Solidity: event ValidatorBalanceUpdated(uint40 validatorIndex, uint64 balanceTimestamp, uint64 newValidatorBalanceGwei) +func (_EigenPod *EigenPodFilterer) FilterValidatorBalanceUpdated(opts *bind.FilterOpts) (*EigenPodValidatorBalanceUpdatedIterator, error) { + + logs, sub, err := _EigenPod.contract.FilterLogs(opts, "ValidatorBalanceUpdated") + if err != nil { + return nil, err + } + return &EigenPodValidatorBalanceUpdatedIterator{contract: _EigenPod.contract, event: "ValidatorBalanceUpdated", logs: logs, sub: sub}, nil +} + +// WatchValidatorBalanceUpdated is a free log subscription operation binding the contract event 0x0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df. +// +// Solidity: event ValidatorBalanceUpdated(uint40 validatorIndex, uint64 balanceTimestamp, uint64 newValidatorBalanceGwei) +func (_EigenPod *EigenPodFilterer) WatchValidatorBalanceUpdated(opts *bind.WatchOpts, sink chan<- *EigenPodValidatorBalanceUpdated) (event.Subscription, error) { + + logs, sub, err := _EigenPod.contract.WatchLogs(opts, "ValidatorBalanceUpdated") + 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(EigenPodValidatorBalanceUpdated) + if err := _EigenPod.contract.UnpackLog(event, "ValidatorBalanceUpdated", 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 +} + +// ParseValidatorBalanceUpdated is a log parse operation binding the contract event 0x0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df. +// +// Solidity: event ValidatorBalanceUpdated(uint40 validatorIndex, uint64 balanceTimestamp, uint64 newValidatorBalanceGwei) +func (_EigenPod *EigenPodFilterer) ParseValidatorBalanceUpdated(log types.Log) (*EigenPodValidatorBalanceUpdated, error) { + event := new(EigenPodValidatorBalanceUpdated) + if err := _EigenPod.contract.UnpackLog(event, "ValidatorBalanceUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodValidatorRestakedIterator is returned from FilterValidatorRestaked and is used to iterate over the raw logs and unpacked data for ValidatorRestaked events raised by the EigenPod contract. +type EigenPodValidatorRestakedIterator struct { + Event *EigenPodValidatorRestaked // 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 *EigenPodValidatorRestakedIterator) 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(EigenPodValidatorRestaked) + 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(EigenPodValidatorRestaked) + 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 *EigenPodValidatorRestakedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodValidatorRestakedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodValidatorRestaked represents a ValidatorRestaked event raised by the EigenPod contract. +type EigenPodValidatorRestaked struct { + ValidatorIndex *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorRestaked is a free log retrieval operation binding the contract event 0x2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449. +// +// Solidity: event ValidatorRestaked(uint40 validatorIndex) +func (_EigenPod *EigenPodFilterer) FilterValidatorRestaked(opts *bind.FilterOpts) (*EigenPodValidatorRestakedIterator, error) { + + logs, sub, err := _EigenPod.contract.FilterLogs(opts, "ValidatorRestaked") + if err != nil { + return nil, err + } + return &EigenPodValidatorRestakedIterator{contract: _EigenPod.contract, event: "ValidatorRestaked", logs: logs, sub: sub}, nil +} + +// WatchValidatorRestaked is a free log subscription operation binding the contract event 0x2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449. +// +// Solidity: event ValidatorRestaked(uint40 validatorIndex) +func (_EigenPod *EigenPodFilterer) WatchValidatorRestaked(opts *bind.WatchOpts, sink chan<- *EigenPodValidatorRestaked) (event.Subscription, error) { + + logs, sub, err := _EigenPod.contract.WatchLogs(opts, "ValidatorRestaked") + 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(EigenPodValidatorRestaked) + if err := _EigenPod.contract.UnpackLog(event, "ValidatorRestaked", 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 +} + +// ParseValidatorRestaked is a log parse operation binding the contract event 0x2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449. +// +// Solidity: event ValidatorRestaked(uint40 validatorIndex) +func (_EigenPod *EigenPodFilterer) ParseValidatorRestaked(log types.Log) (*EigenPodValidatorRestaked, error) { + event := new(EigenPodValidatorRestaked) + if err := _EigenPod.contract.UnpackLog(event, "ValidatorRestaked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/EigenPod/tmp.abi b/pkg/bindings/EigenPod/tmp.abi new file mode 100644 index 000000000..6a57724a0 --- /dev/null +++ b/pkg/bindings/EigenPod/tmp.abi @@ -0,0 +1,825 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_ethPOS", + "type": "address", + "internalType": "contract IETHPOSDeposit" + }, + { + "name": "_delayedWithdrawalRouter", + "type": "address", + "internalType": "contract IDelayedWithdrawalRouter" + }, + { + "name": "_eigenPodManager", + "type": "address", + "internalType": "contract IEigenPodManager" + }, + { + "name": "_MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR", + "type": "uint64", + "internalType": "uint64" + }, + { + "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": "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "activateRestaking", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delayedWithdrawalRouter", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IDelayedWithdrawalRouter" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eigenPodManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IEigenPodManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ethPOS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IETHPOSDeposit" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hasRestaked", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_podOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mostRecentWithdrawalTimestamp", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "nonBeaconChainETHBalanceWei", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "podOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "provenWithdrawal", + "inputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "recoverTokens", + "inputs": [ + { + "name": "tokenList", + "type": "address[]", + "internalType": "contract IERC20[]" + }, + { + "name": "amountsToWithdraw", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "recipient", + "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": "sumOfPartialWithdrawalsClaimedGwei", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validatorPubkeyHashToInfo", + "inputs": [ + { + "name": "validatorPubkeyHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IEigenPod.ValidatorInfo", + "components": [ + { + "name": "validatorIndex", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "restakedBalanceGwei", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "mostRecentBalanceUpdateTimestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum IEigenPod.VALIDATOR_STATUS" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validatorPubkeyToInfo", + "inputs": [ + { + "name": "validatorPubkey", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IEigenPod.ValidatorInfo", + "components": [ + { + "name": "validatorIndex", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "restakedBalanceGwei", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "mostRecentBalanceUpdateTimestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum IEigenPod.VALIDATOR_STATUS" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validatorStatus", + "inputs": [ + { + "name": "validatorPubkey", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum IEigenPod.VALIDATOR_STATUS" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validatorStatus", + "inputs": [ + { + "name": "pubkeyHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum IEigenPod.VALIDATOR_STATUS" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "verifyAndProcessWithdrawals", + "inputs": [ + { + "name": "oracleTimestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "stateRootProof", + "type": "tuple", + "internalType": "struct BeaconChainProofs.StateRootProof", + "components": [ + { + "name": "beaconStateRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "proof", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "withdrawalProofs", + "type": "tuple[]", + "internalType": "struct BeaconChainProofs.WithdrawalProof[]", + "components": [ + { + "name": "withdrawalProof", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "slotProof", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "executionPayloadProof", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "timestampProof", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "historicalSummaryBlockRootProof", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "blockRootIndex", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "historicalSummaryIndex", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "withdrawalIndex", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "blockRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "slotRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timestampRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "executionPayloadRoot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "name": "validatorFieldsProofs", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "validatorFields", + "type": "bytes32[][]", + "internalType": "bytes32[][]" + }, + { + "name": "withdrawalFields", + "type": "bytes32[][]", + "internalType": "bytes32[][]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "verifyBalanceUpdates", + "inputs": [ + { + "name": "oracleTimestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "validatorIndices", + "type": "uint40[]", + "internalType": "uint40[]" + }, + { + "name": "stateRootProof", + "type": "tuple", + "internalType": "struct BeaconChainProofs.StateRootProof", + "components": [ + { + "name": "beaconStateRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "proof", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "validatorFieldsProofs", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "validatorFields", + "type": "bytes32[][]", + "internalType": "bytes32[][]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "verifyWithdrawalCredentials", + "inputs": [ + { + "name": "oracleTimestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "stateRootProof", + "type": "tuple", + "internalType": "struct BeaconChainProofs.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": "withdrawBeforeRestaking", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "withdrawNonBeaconChainETHBalanceWei", + "inputs": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "amountToWithdraw", + "type": "uint256", + "internalType": "uint256" + } + ], + "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": "EigenPodStaked", + "inputs": [ + { + "name": "pubkey", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "FullWithdrawalRedeemed", + "inputs": [ + { + "name": "validatorIndex", + "type": "uint40", + "indexed": false, + "internalType": "uint40" + }, + { + "name": "withdrawalTimestamp", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "withdrawalAmountGwei", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NonBeaconChainETHReceived", + "inputs": [ + { + "name": "amountReceived", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NonBeaconChainETHWithdrawn", + "inputs": [ + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amountWithdrawn", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PartialWithdrawalRedeemed", + "inputs": [ + { + "name": "validatorIndex", + "type": "uint40", + "indexed": false, + "internalType": "uint40" + }, + { + "name": "withdrawalTimestamp", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "partialWithdrawalAmountGwei", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "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": "RestakingActivated", + "inputs": [ + { + "name": "podOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "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": "ValidatorRestaked", + "inputs": [ + { + "name": "validatorIndex", + "type": "uint40", + "indexed": false, + "internalType": "uint40" + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/EigenPod/tmp.bin b/pkg/bindings/EigenPod/tmp.bin new file mode 100644 index 000000000..6637c16fe --- /dev/null +++ b/pkg/bindings/EigenPod/tmp.bin @@ -0,0 +1 @@ +0x6101206040523480156200001257600080fd5b5060405162005f0338038062005f0383398101604081905262000035916200016f565b6001600160a01b0380861660805284811660a052831660c0526001600160401b0380831660e0528116610100526200006c62000077565b5050505050620001e7565b600054610100900460ff1615620000e45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000137576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014f57600080fd5b50565b80516001600160401b03811681146200016a57600080fd5b919050565b600080600080600060a086880312156200018857600080fd5b8551620001958162000139565b6020870151909550620001a88162000139565b6040870151909450620001bb8162000139565b9250620001cb6060870162000152565b9150620001db6080870162000152565b90509295509295909350565b60805160a05160c05160e05161010051615c28620002db600039600081816105b5015281816134c8015261357f015260008181610275015281816124290152818161245d01528181612a8901528181612ab60152818161425b015261429601526000818161036d01528181610614015281816107a701528181610a4601528181610b9b01528181610d2301528181610ede015281816110bf015281816111f3015281816113fd0152818161184a015281816119f201528181611b3101528181611cfe01528181611de80152612f2101526000818161024101526131930152600081816104520152610dee0152615c286000f3fe6080604052600436106101855760003560e01c806374cdd798116100d1578063c49074421161008a578063e251ef5211610064578063e251ef5214610563578063e2c8344514610583578063f2882461146105a3578063fe80b087146105d757600080fd5b8063c490744214610503578063c4d66de814610523578063dda3346c1461054357600080fd5b806374cdd7981461044057806387e0d289146104745780639b4e46341461049b578063a50600f4146104ae578063b522538a146104ce578063baa7145a146104ee57600080fd5b806334bea20a1161013e57806358eaee791161011857806358eaee791461038f5780635d3f65b6146103bc5780636fcd0e53146103dc5780637439841f1461040957600080fd5b806334bea20a146103005780633f65cf191461033b5780634665bcda1461035b57600080fd5b80630b18ff66146101db5780630cd4649e146102185780631a5057be1461022f5780631d905d5c146102635780633106ab53146102af5780633474aa16146102e057600080fd5b366101d657346037600082825461019c9190614b56565b90915550506040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101e757600080fd5b506033546101fb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022457600080fd5b5061022d6105fb565b005b34801561023b57600080fd5b506101fb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561026f57600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b03909116815260200161020f565b3480156102bb57600080fd5b506034546102d090600160401b900460ff1681565b604051901515815260200161020f565b3480156102ec57600080fd5b50603454610297906001600160401b031681565b34801561030c57600080fd5b506102d061031b366004614b93565b603560209081526000928352604080842090915290825290205460ff1681565b34801561034757600080fd5b5061022d610356366004614c26565b610764565b34801561036757600080fd5b506101fb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039b57600080fd5b506103af6103aa366004614d37565b610c06565b60405161020f9190614db0565b3480156103c857600080fd5b50603854610297906001600160401b031681565b3480156103e857600080fd5b506103fc6103f7366004614dbe565b610c6b565b60405161020f9190614dd7565b34801561041557600080fd5b506103af610424366004614dbe565b600090815260366020526040902054600160c01b900460ff1690565b34801561044c57600080fd5b506101fb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561048057600080fd5b5060335461029790600160a01b90046001600160401b031681565b61022d6104a9366004614e1f565b610d18565b3480156104ba57600080fd5b5061022d6104c9366004614e92565b610ec5565b3480156104da57600080fd5b506103fc6104e9366004614d37565b611294565b3480156104fa57600080fd5b5061022d611387565b34801561050f57600080fd5b5061022d61051e366004614f3c565b6113f2565b34801561052f57600080fd5b5061022d61053e366004614f68565b61162f565b34801561054f57600080fd5b5061022d61055e366004615082565b611807565b34801561056f57600080fd5b5061022d61057e366004615153565b6119da565b34801561058f57600080fd5b5061022d61059e366004614f3c565b611da5565b3480156105af57600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e357600080fd5b506105ed60375481565b60405190815260200161020f565b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610687919061524e565b156106ad5760405162461bcd60e51b81526004016106a490615270565b60405180910390fd5b6033546001600160a01b031633146106d75760405162461bcd60e51b81526004016106a4906152cd565b603454600160401b900460ff16156107015760405162461bcd60e51b81526004016106a490615315565b6034805460ff60401b1916600160401b179055603354610729906001600160a01b0316611f88565b6033546040516001600160a01b03909116907fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a250565b6033546001600160a01b0316331461078e5760405162461bcd60e51b81526004016106a4906152cd565b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a919061524e565b156108375760405162461bcd60e51b81526004016106a490615270565b60335489906001600160401b03600160a01b9091048116908216101561086f5760405162461bcd60e51b81526004016106a490615364565b603454600160401b900460ff166108e75760405162461bcd60e51b815260206004820152603660248201527f456967656e506f642e686173456e61626c656452657374616b696e673a2072656044820152751cdd185ada5b99c81a5cc81b9bdd08195b98589b195960521b60648201526084016106a4565b86851480156108f557508483145b6109855760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a4016106a4565b4261099b613f486001600160401b038d16614b56565b1015610a245760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038b166004820152610acd907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa158015610a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab991906153f7565b8a35610ac860208d018d615410565b611fbc565b6000805b88811015610b7157610b538c8c358c8c85818110610af157610af1615456565b9050602002016020810190610b06919061546c565b8b8b86818110610b1857610b18615456565b9050602002810190610b2a9190615410565b8b8b88818110610b3c57610b3c615456565b9050602002810190610b4e9190615493565b61214a565b610b5d9083614b56565b915080610b69816154dc565b915050610ad1565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b158015610be157600080fd5b505af1158015610bf5573d6000803e3d6000fd5b505050505050505050505050505050565b600080610c4884848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061260492505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b610c936040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610cfe57610cfe614d78565b6002811115610d0f57610d0f614d78565b90525092915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d605760405162461bcd60e51b81526004016106a4906154f7565b346801bc16d674ec80000014610dec5760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a4016106a4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008787610e2f6126fe565b8888886040518863ffffffff1660e01b8152600401610e53969594939291906155c9565b6000604051808303818588803b158015610e6c57600080fd5b505af1158015610e80573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051610eb6929190615618565b60405180910390a15050505050565b604051635ac86ab760e01b8152600360048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f51919061524e565b15610f6e5760405162461bcd60e51b81526004016106a490615270565b8684148015610f7c57508382145b6110055760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207660448201527f616c696461746f72496e646963657320616e642070726f6f6673206d7573742060648201526d0c4ca40e6c2daca40d8cadccee8d60931b608482015260a4016106a4565b4261101b613f486001600160401b038c16614b56565b101561109d5760405162461bcd60e51b815260206004820152604560248201527f456967656e506f642e76657269667942616c616e6365557064617465733a207360448201527f70656369666965642074696d657374616d7020697320746f6f2066617220696e606482015264081c185cdd60da1b608482015260a4016106a4565b60405163d1c64cc960e01b81526001600160401b038a166004820152611141907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa15801561110e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113291906153f7565b8735610ac860208a018a615410565b6000805b888110156111e5576111c78b8b8b8481811061116357611163615456565b9050602002016020810190611178919061546c565b8a358a8a8681811061118c5761118c615456565b905060200281019061119e9190615410565b8a8a888181106111b0576111b0615456565b90506020028101906111c29190615493565b612743565b6111d1908361562c565b9150806111dd816154dc565b915050611145565b506033546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163c2c51c40911661122a633b9aca008561566d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561127057600080fd5b505af1158015611284573d6000803e3d6000fd5b5050505050505050505050505050565b6112bc6040805160808101825260008082526020820181905291810182905290606082015290565b603660006112ff85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061260492505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561136c5761136c614d78565b600281111561137d5761137d614d78565b9052509392505050565b6033546001600160a01b031633146113b15760405162461bcd60e51b81526004016106a4906152cd565b603454600160401b900460ff16156113db5760405162461bcd60e51b81526004016106a490615315565b6033546113f0906001600160a01b0316611f88565b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461143a5760405162461bcd60e51b81526004016106a4906154f7565b611448633b9aca0082615708565b156114d25760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a4016106a4565b60006114e2633b9aca008361571c565b6034549091506001600160401b03908116908216111561159b5760405162461bcd60e51b815260206004820152606260248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74477765692065786365656473207769746860648201527f6472617761626c6552657374616b6564457865637574696f6e4c617965724777608482015261656960f01b60a482015260c4016106a4565b603480548291906000906115b99084906001600160401b0316615730565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161161891815260200190565b60405180910390a261162a8383612c21565b505050565b600054610100900460ff161580801561164f5750600054600160ff909116105b806116695750303b158015611669575060005460ff166001145b6116cc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a4565b6000805460ff1916600117905580156116ef576000805461ff0019166101001790555b6001600160a01b0382166117625760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b60648201526084016106a4565b603380546001600160a01b0384166001600160a01b031990911681179091556034805460ff60401b1916600160401b1790556040517fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a28015611803576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146118315760405162461bcd60e51b81526004016106a4906152cd565b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bd919061524e565b156118da5760405162461bcd60e51b81526004016106a490615270565b82518451146119655760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a4016106a4565b60005b84518110156119d3576119c18385838151811061198757611987615456565b60200260200101518784815181106119a1576119a1615456565b60200260200101516001600160a01b0316612c2b9092919063ffffffff16565b806119cb816154dc565b915050611968565b5050505050565b604051635ac86ab760e01b81526004808201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a65919061524e565b15611a825760405162461bcd60e51b81526004016106a490615270565b8386148015611a9057508588145b8015611a9b57508782145b611b0f576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e766572696679416e6450726f636573735769746864726160448201527f77616c733a20696e70757473206d7573742062652073616d65206c656e67746860648201526084016106a4565b60405163d1c64cc960e01b81526001600160401b038c166004820152611bb3907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611b80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba491906153f7565b8b35610ac860208e018e615410565b604080518082019091526000808252602082015260005b83811015611cb3576000611c6e8d358d8d85818110611beb57611beb615456565b9050602002810190611bfd9190615758565b8c8c86818110611c0f57611c0f615456565b9050602002810190611c219190615410565b8c8c88818110611c3357611c33615456565b9050602002810190611c459190615493565b8c8c8a818110611c5757611c57615456565b9050602002810190611c699190615493565b612c7d565b80518451919250908490611c83908390614b56565b9052506020808201519084018051611c9c90839061562c565b905250819050611cab816154dc565b915050611bca565b50805115611ce2576033548151611ce2916001600160a01b031690611cdd90633b9aca0090615779565b613169565b602081015115611d975760335460208201516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263c2c51c4092911690611d3890633b9aca009061566d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611d7e57600080fd5b505af1158015611d92573d6000803e3d6000fd5b505050505b505050505050505050505050565b6033546001600160a01b03163314611dcf5760405162461bcd60e51b81526004016106a4906152cd565b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5b919061524e565b15611e785760405162461bcd60e51b81526004016106a490615270565b603754821115611f295760405162461bcd60e51b815260206004820152606a60248201527f456967656e506f642e77697468647261776e6f6e426561636f6e436861696e4560448201527f544842616c616e63655765693a20616d6f756e74546f5769746864726177206960648201527f732067726561746572207468616e206e6f6e426561636f6e436861696e45544860848201526942616c616e636557656960b01b60a482015260c4016106a4565b8160376000828254611f3b9190615798565b90915550506040518281526001600160a01b038416907f30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f530969060200160405180910390a261162a8383613169565b6033805467ffffffffffffffff60a01b19164263ffffffff16600160a01b021790556000603755611fb98147613169565b50565b611fc860036020615779565b81146120585760405162461bcd60e51b815260206004820152605360248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a2050726f6f6620686064820152720c2e640d2dcc6dee4e4cac6e840d8cadccee8d606b1b608482015260a4016106a4565b61209d82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250879150600390506131f7565b6121445760405162461bcd60e51b815260206004820152606660248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a20496e76616c696460648201527f206c617465737420626c6f636b2068656164657220726f6f74206d65726b6c6560848201526510383937b7b360d11b60a482015260c4016106a4565b50505050565b60008061218984848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320f92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156121f8576121f8614d78565b600281111561220957612209614d78565b905250905060008160600151600281111561222657612226614d78565b146122cf5760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2056616c696461746f72206d757374206265206960648201527f6e61637469766520746f2070726f7665207769746864726177616c2063726564608482015266656e7469616c7360c81b60a482015260c4016106a4565b6122d76126fe565b6122e0906157af565b61231c86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061323392505050565b146123a35760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2050726f6f66206973206e6f7420666f7220746860648201526a1a5cc8115a59d95b941bd960aa1b608482015260a4016106a4565b60006123e186868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061324892505050565b90506123f18a87878b8b8e61326d565b60398054906000612401836154dc565b90915550506001606083015264ffffffffff891682526001600160401b038b811660408401527f000000000000000000000000000000000000000000000000000000000000000081169082161115612487576001600160401b037f0000000000000000000000000000000000000000000000000000000000000000166020830152612497565b6001600160401b03811660208301525b6000838152603660209081526040918290208451815492860151938601516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060850151859391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561253557612535614d78565b02179055505060405164ffffffffff8b1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a17f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df898c84602001516040516125d09392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1633b9aca0082602001516001600160401b03166125f59190615779565b9b9a5050505050505050505050565b6000815160301461268d5760405162461bcd60e51b815260206004820152604760248201527f456967656e506f642e5f63616c63756c61746556616c696461746f725075626b60448201527f657948617368206d75737420626520612034382d6279746520424c53207075626064820152666c6963206b657960c81b608482015260a4016106a4565b6040516002906126a49084906000906020016157d3565b60408051601f19818403018152908290526126be91615802565b602060405180830381855afa1580156126db573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c6591906153f7565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b60008061278284848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061324892505050565b905060006127c285858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320f92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561283157612831614d78565b600281111561284257612842614d78565b8152505090508a6001600160401b031681604001516001600160401b0316106128f95760405162461bcd60e51b815260206004820152605c60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20566160448201527f6c696461746f72732062616c616e63652068617320616c72656164792062656560648201527f6e207570646174656420666f7220746869732074696d657374616d7000000000608482015260a4016106a4565b60018160600151600281111561291157612911614d78565b146129795760405162461bcd60e51b815260206004820152603260248201527f456967656e506f642e76657269667942616c616e63655570646174653a2056616044820152716c696461746f72206e6f742061637469766560701b60648201526084016106a4565b6129828b6134c4565b6001600160401b03166129c78787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135ae92505050565b6001600160401b031611612a6a576000836001600160401b031611612a6a5760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f7220697320776974686472617761626c6520627574206861732060648201526c3737ba103bb4ba34323930bbb760991b608482015260a4016106a4565b612a788987878b8b8f61326d565b602081015160006001600160401b037f000000000000000000000000000000000000000000000000000000000000000081169086161115612ada57507f0000000000000000000000000000000000000000000000000000000000000000612add565b50835b6001600160401b0380821660208086019182528f831660408088019182526000898152603690935290912086518154935192518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606086015186939091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115612b8557612b85614d78565b0217905550905050816001600160401b0316816001600160401b031614612c11577f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df8c8e83604051612bfc9392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1612c0e81836135c6565b95505b5050505050979650505050505050565b61180382826135e5565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261162a9084906136fe565b6040805180820190915260008082526020820152612ca2612c9d89615883565b6137d0565b6033546001600160401b03600160a01b90910481169082161015612cd85760405162461bcd60e51b81526004016106a490615364565b6000612ce6612c9d8b615883565b90506000612d2688888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061320f92505050565b905060008082815260366020526040902054600160c01b900460ff166002811115612d5357612d53614d78565b1415612e0a5760405162461bcd60e51b815260206004820152607460248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a2056616c696461746f72206e657665722070726f76656e20746f2060648201527f68617665207769746864726177616c2063726564656e7469616c7320706f696e6084820152731d1959081d1bc81d1a1a5cc818dbdb9d1c9858dd60621b60a482015260c4016106a4565b60008181526035602090815260408083206001600160401b038616845290915290205460ff1615612ec95760405162461bcd60e51b815260206004820152605b60248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a207769746864726177616c2068617320616c72656164792062656560648201527f6e2070726f76656e20666f7220746869732074696d657374616d700000000000608482015260a4016106a4565b6001603560008381526020019081526020016000206000846001600160401b03166001600160401b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550612fa68c87878e7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166344e71c806040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa191906159bf565b6137e0565b6000612fe487878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061420192505050565b9050612ff48d8a8a8e8e8661326d565b600061303288888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061421992505050565b90506130708a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506135ae92505050565b6001600160401b031661308a6130858f615883565b614231565b6001600160401b03161061314257603354600084815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b81049093169381019390935261313793869388938a936001600160a01b03909316928892916060830190600160c01b900460ff16600281111561311e5761311e614d78565b600281111561312f5761312f614d78565b905250614243565b95505050505061315c565b60335461313790839086906001600160a01b031684614481565b5098975050505050505050565b603354604051633036cd5360e21b81526001600160a01b03918216600482015283821660248201527f00000000000000000000000000000000000000000000000000000000000000009091169063c0db354c9083906044016000604051808303818588803b1580156131da57600080fd5b505af11580156131ee573d6000803e3d6000fd5b50505050505050565b60008361320586858561455f565b1495945050505050565b60008160008151811061322457613224615456565b60200260200101519050919050565b60008160018151811061322457613224615456565b6000610c658260028151811061326057613260615456565b60200260200101516146ab565b61327960036002615ac0565b84146133045760405162461bcd60e51b815260206004820152604e60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b600561331260286001614b56565b61331c9190614b56565b613327906020615779565b82146133a75760405162461bcd60e51b815260206004820152604360248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a4016106a4565b600064ffffffffff82166133bd60286001614b56565b600b901b179050600061340287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061471292505050565b905061344885858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508591508690506131f7565b6134ba5760405162461bcd60e51b815260206004820152603d60248201527f426561636f6e436861696e50726f6f66732e76657269667956616c696461746f60448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f6600000060648201526084016106a4565b5050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316826001600160401b0316101561356e5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f642e5f74696d657374616d70546f45706f63683a2074696d6560448201527f7374616d70206973206265666f72652067656e6573697300000000000000000060648201526084016106a4565b61357a600c6020615acc565b6135a47f000000000000000000000000000000000000000000000000000000000000000084615730565b610c659190615afb565b6000610c658260078151811061326057613260615456565b60006135de6001600160401b03808416908516615b21565b9392505050565b804710156136355760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106a4565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613682576040519150601f19603f3d011682016040523d82523d6000602084013e613687565b606091505b505090508061162a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106a4565b6000613753826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149bf9092919063ffffffff16565b80519091501561162a5780806020019051810190613771919061524e565b61162a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a4565b6000610c658261014001516146ab565b6137eb600280615ac0565b831461385f5760405162461bcd60e51b81526020600482015260496024820152600080516020615bd383398151915260448201527f616c3a207769746864726177616c4669656c64732068617320696e636f7272656064820152680c6e840d8cadccee8d60bb1b608482015260a4016106a4565b61386b600d6002615ac0565b61387b60c0840160a08501615b60565b6001600160401b0316106138e55760405162461bcd60e51b815260206004820152603f6024820152600080516020615bd383398151915260448201527f616c3a20626c6f636b526f6f74496e64657820697320746f6f206c617267650060648201526084016106a4565b6138f160046002615ac0565b613902610100840160e08501615b60565b6001600160401b03161061396e576040805162461bcd60e51b8152602060048201526024810191909152600080516020615bd383398151915260448201527f616c3a207769746864726177616c496e64657820697320746f6f206c6172676560648201526084016106a4565b61397a60186002615ac0565b61398a60e0840160c08501615b60565b6001600160401b031610613a045760405162461bcd60e51b81526020600482015260476024820152600080516020615bd383398151915260448201527f616c3a20686973746f726963616c53756d6d617279496e64657820697320746f6064820152666f206c6172676560c81b608482015260a4016106a4565b60006001600160401b038216613a1c612c9d85615883565b6001600160401b031610613a31576005613a34565b60045b9050613a41600482614b56565b613a4c906001614b56565b613a57906020615779565b613a618480615410565b905014613ad55760405162461bcd60e51b81526020600482015260486024820152600080516020615bd383398151915260448201527f616c3a207769746864726177616c50726f6f662068617320696e636f727265636064820152670e840d8cadccee8d60c31b608482015260a4016106a4565b613ae160046003614b56565b613aec906020615779565b613af96040850185615410565b905014613b735760405162461bcd60e51b815260206004820152604e6024820152600080516020615bd383398151915260448201527f616c3a20657865637574696f6e5061796c6f616450726f6f662068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106a4565b613b7f60036020615779565b613b8c6020850185615410565b905014613bfa5760405162461bcd60e51b81526020600482015260426024820152600080516020615bd383398151915260448201527f616c3a20736c6f7450726f6f662068617320696e636f7272656374206c656e676064820152610e8d60f31b608482015260a4016106a4565b613c05816020615779565b613c126060850185615410565b905014613c855760405162461bcd60e51b81526020600482015260476024820152600080516020615bd383398151915260448201527f616c3a2074696d657374616d7050726f6f662068617320696e636f7272656374606482015266040d8cadccee8d60cb1b608482015260a4016106a4565b600d613c9360186001614b56565b613c9e906005614b56565b613ca9906001614b56565b613cb39190614b56565b613cbe906020615779565b613ccb6080850185615410565b905014613d545760405162461bcd60e51b81526020600482015260586024820152600080516020615bd383398151915260448201527f616c3a20686973746f726963616c53756d6d617279426c6f636b526f6f74507260648201527f6f6f662068617320696e636f7272656374206c656e6774680000000000000000608482015260a4016106a4565b6000613d6660c0850160a08601615b60565b6001600160401b03166000613d7d600d6001614b56565b613d8d60e0880160c08901615b60565b6001600160401b0316901b600d613da660186001614b56565b613db1906001614b56565b613dbb9190614b56565b601b901b1717179050613e16613dd46080860186615410565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b92505050610100870135846131f7565b613e895760405162461bcd60e51b815260206004820152604a6024820152600080516020615bd383398151915260448201527f616c3a20496e76616c696420686973746f726963616c73756d6d617279206d656064820152693935b63290383937b7b360b11b608482015260a4016106a4565b613ee0613e996020860186615410565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008a013593506101208a0135925090506131f7565b613f405760405162461bcd60e51b815260206004820152603d6024820152600080516020615bd383398151915260448201527f616c3a20496e76616c696420736c6f74206d65726b6c652070726f6f6600000060648201526084016106a4565b6049613f98613f526040870187615410565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610100870135610160880135846131f7565b61400a5760405162461bcd60e51b81526020600482015260496024820152600080516020615bd383398151915260448201527f616c3a20496e76616c696420657865637574696f6e5061796c6f6164206d657260648201526835b63290383937b7b360b91b608482015260a4016106a4565b5061406261401b6060860186615410565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061016086013561014087013560096131f7565b6140cd5760405162461bcd60e51b81526020600482015260426024820152600080516020615bd383398151915260448201527f616c3a20496e76616c69642074696d657374616d70206d65726b6c652070726f60648201526137b360f11b608482015260a4016106a4565b60006140e0610100860160e08701615b60565b6001600160401b03166140f560046001614b56565b600e901b179050600061413a88888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061471292505050565b905061418a6141498780615410565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061016088013583856131f7565b6141f65760405162461bcd60e51b81526020600482015260436024820152600080516020615bd383398151915260448201527f616c3a20496e76616c6964207769746864726177616c206d65726b6c6520707260648201526237b7b360e91b608482015260a4016106a4565b505050505050505050565b6000610c658260018151811061326057613260615456565b6000610c658260038151811061326057613260615456565b600060206135a48361012001516146ab565b604080518082019091526000808252602082015260007f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316846001600160401b031611156142ba57507f00000000000000000000000000000000000000000000000000000000000000006142bd565b50825b60408051808201909152600080825260208201526142db8286615730565b6001600160401b0390811682526034805484926000916142fd91859116615b7d565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061432f8285602001516135c6565b602082015260028460600151600281111561434c5761434c614d78565b1461436e576039805490600061436183615ba8565b9091555050600260608501525b600060208086018281528a83526036909152604091829020865181549251938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516929091169190911792909217928316821781556060870151879391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b83600281111561441357614413614d78565b0217905550506040805164ffffffffff8c1681526001600160401b038a8116602083015288168183015290516001600160a01b03891692507fb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a09639181900360600190a298975050505050505050565b60408051808201909152600080825260208201526040805164ffffffffff871681526001600160401b0380871660208301528416918101919091526001600160a01b038416907f8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e9060600160405180910390a2603880548391906000906145129084906001600160401b0316615b7d565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506040518060400160405280836001600160401b0316815260200160008152509050949350505050565b6000835160001415801561457e57506020845161457c9190615708565b155b61460d5760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a4016106a4565b604080516020808201909252848152905b855181116146a157614631600285615708565b614664578151600052808601516020526020826040600060026107d05a03fa61465957600080fd5b60028404935061468f565b8086015160005281516020526020826040600060026107d05a03fa61468857600080fd5b6002840493505b61469a602082614b56565b905061461e565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b60008060028351614723919061571c565b90506000816001600160401b0381111561473f5761473f614f85565b604051908082528060200260200182016040528015614768578160200160208202803683370190505b50905060005b8281101561486f576002856147838383615779565b8151811061479357614793615456565b6020026020010151868360026147a99190615779565b6147b4906001614b56565b815181106147c4576147c4615456565b60200260200101516040516020016147e6929190918252602082015260400190565b60408051601f198184030181529082905261480091615802565b602060405180830381855afa15801561481d573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061484091906153f7565b82828151811061485257614852615456565b602090810291909101015280614867816154dc565b91505061476e565b5061487b60028361571c565b91505b811561499b5760005b828110156149885760028261489c8383615779565b815181106148ac576148ac615456565b6020026020010151838360026148c29190615779565b6148cd906001614b56565b815181106148dd576148dd615456565b60200260200101516040516020016148ff929190918252602082015260400190565b60408051601f198184030181529082905261491991615802565b602060405180830381855afa158015614936573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061495991906153f7565b82828151811061496b5761496b615456565b602090810291909101015280614980816154dc565b915050614887565b5061499460028361571c565b915061487e565b806000815181106149ae576149ae615456565b602002602001015192505050919050565b60606149ce84846000856149d6565b949350505050565b606082471015614a375760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a4565b6001600160a01b0385163b614a8e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a4565b600080866001600160a01b03168587604051614aaa9190615802565b60006040518083038185875af1925050503d8060008114614ae7576040519150601f19603f3d011682016040523d82523d6000602084013e614aec565b606091505b5091509150614afc828286614b07565b979650505050505050565b60608315614b165750816135de565b825115614b265782518084602001fd5b8160405162461bcd60e51b81526004016106a49190615bbf565b634e487b7160e01b600052601160045260246000fd5b60008219821115614b6957614b69614b40565b500190565b6001600160401b0381168114611fb957600080fd5b8035614b8e81614b6e565b919050565b60008060408385031215614ba657600080fd5b823591506020830135614bb881614b6e565b809150509250929050565b600060408284031215614bd557600080fd5b50919050565b60008083601f840112614bed57600080fd5b5081356001600160401b03811115614c0457600080fd5b6020830191508360208260051b8501011115614c1f57600080fd5b9250929050565b60008060008060008060008060a0898b031215614c4257600080fd5b8835614c4d81614b6e565b975060208901356001600160401b0380821115614c6957600080fd5b614c758c838d01614bc3565b985060408b0135915080821115614c8b57600080fd5b614c978c838d01614bdb565b909850965060608b0135915080821115614cb057600080fd5b614cbc8c838d01614bdb565b909650945060808b0135915080821115614cd557600080fd5b50614ce28b828c01614bdb565b999c989b5096995094979396929594505050565b60008083601f840112614d0857600080fd5b5081356001600160401b03811115614d1f57600080fd5b602083019150836020828501011115614c1f57600080fd5b60008060208385031215614d4a57600080fd5b82356001600160401b03811115614d6057600080fd5b614d6c85828601614cf6565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60038110614dac57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610c658284614d8e565b600060208284031215614dd057600080fd5b5035919050565b60006080820190506001600160401b03808451168352806020850151166020840152806040850151166040840152506060830151614e186060840182614d8e565b5092915050565b600080600080600060608688031215614e3757600080fd5b85356001600160401b0380821115614e4e57600080fd5b614e5a89838a01614cf6565b90975095506020880135915080821115614e7357600080fd5b50614e8088828901614cf6565b96999598509660400135949350505050565b60008060008060008060008060a0898b031215614eae57600080fd5b8835614eb981614b6e565b975060208901356001600160401b0380821115614ed557600080fd5b614ee18c838d01614bdb565b909950975060408b0135915080821115614efa57600080fd5b614f068c838d01614bc3565b965060608b0135915080821115614cb057600080fd5b6001600160a01b0381168114611fb957600080fd5b8035614b8e81614f1c565b60008060408385031215614f4f57600080fd5b8235614f5a81614f1c565b946020939093013593505050565b600060208284031215614f7a57600080fd5b81356135de81614f1c565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715614fbe57614fbe614f85565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614fec57614fec614f85565b604052919050565b60006001600160401b0382111561500d5761500d614f85565b5060051b60200190565b600082601f83011261502857600080fd5b8135602061503d61503883614ff4565b614fc4565b82815260059290921b8401810191818101908684111561505c57600080fd5b8286015b848110156150775780358352918301918301615060565b509695505050505050565b60008060006060848603121561509757600080fd5b83356001600160401b03808211156150ae57600080fd5b818601915086601f8301126150c257600080fd5b813560206150d261503883614ff4565b82815260059290921b8401810191818101908a8411156150f157600080fd5b948201945b8386101561511857853561510981614f1c565b825294820194908201906150f6565b9750508701359250508082111561512e57600080fd5b5061513b86828701615017565b92505061514a60408501614f31565b90509250925092565b60008060008060008060008060008060c08b8d03121561517257600080fd5b61517b8b614b83565b995060208b01356001600160401b038082111561519757600080fd5b6151a38e838f01614bc3565b9a5060408d01359150808211156151b957600080fd5b6151c58e838f01614bdb565b909a50985060608d01359150808211156151de57600080fd5b6151ea8e838f01614bdb565b909850965060808d013591508082111561520357600080fd5b61520f8e838f01614bdb565b909650945060a08d013591508082111561522857600080fd5b506152358d828e01614bdb565b915080935050809150509295989b9194979a5092959850565b60006020828403121561526057600080fd5b815180151581146135de57600080fd5b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b6020808252602f908201527f456967656e506f642e6861734e6576657252657374616b65643a20726573746160408201526e1ada5b99c81a5cc8195b98589b1959608a1b606082015260800190565b60208082526067908201527f456967656e506f642e70726f6f664973466f7256616c696454696d657374616d60408201527f703a20626561636f6e20636861696e2070726f6f66206d75737420626520617460608201527f206f72206166746572206d6f7374526563656e745769746864726177616c546960808201526606d657374616d760cc1b60a082015260c00190565b60006020828403121561540957600080fd5b5051919050565b6000808335601e1984360301811261542757600080fd5b8301803591506001600160401b0382111561544157600080fd5b602001915036819003821315614c1f57600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561547e57600080fd5b813564ffffffffff811681146135de57600080fd5b6000808335601e198436030181126154aa57600080fd5b8301803591506001600160401b038211156154c457600080fd5b6020019150600581901b3603821315614c1f57600080fd5b60006000198214156154f0576154f0614b40565b5060010190565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60005b8381101561558c578181015183820152602001615574565b838111156121445750506000910152565b600081518084526155b5816020860160208601615571565b601f01601f19169290920160200192915050565b6080815260006155dd60808301888a615548565b82810360208401526155ef818861559d565b90508281036040840152615604818688615548565b915050826060830152979650505050505050565b6020815260006149ce602083018486615548565b600080821280156001600160ff1b038490038513161561564e5761564e614b40565b600160ff1b839003841281161561566757615667614b40565b50500190565b60006001600160ff1b038184138284138082168684048611161561569357615693614b40565b600160ff1b60008712828116878305891216156156b2576156b2614b40565b600087129250878205871284841616156156ce576156ce614b40565b878505871281841616156156e4576156e4614b40565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b600082615717576157176156f2565b500690565b60008261572b5761572b6156f2565b500490565b60006001600160401b038381169083168181101561575057615750614b40565b039392505050565b6000823561017e1983360301811261576f57600080fd5b9190910192915050565b600081600019048311821515161561579357615793614b40565b500290565b6000828210156157aa576157aa614b40565b500390565b80516020808301519190811015614bd55760001960209190910360031b1b16919050565b600083516157e5818460208801615571565b6001600160801b0319939093169190920190815260100192915050565b6000825161576f818460208701615571565b600082601f83011261582557600080fd5b81356001600160401b0381111561583e5761583e614f85565b615851601f8201601f1916602001614fc4565b81815284602083860101111561586657600080fd5b816020850160208301376000918101602001919091529392505050565b6000610180823603121561589657600080fd5b61589e614f9b565b82356001600160401b03808211156158b557600080fd5b6158c136838701615814565b835260208501359150808211156158d757600080fd5b6158e336838701615814565b602084015260408501359150808211156158fc57600080fd5b61590836838701615814565b6040840152606085013591508082111561592157600080fd5b61592d36838701615814565b6060840152608085013591508082111561594657600080fd5b5061595336828601615814565b60808301525061596560a08401614b83565b60a082015261597660c08401614b83565b60c082015261598760e08401614b83565b60e082015261010083810135908201526101208084013590820152610140808401359082015261016092830135928101929092525090565b6000602082840312156159d157600080fd5b81516135de81614b6e565b600181815b80851115615a175781600019048211156159fd576159fd614b40565b80851615615a0a57918102915b93841c93908002906159e1565b509250929050565b600082615a2e57506001610c65565b81615a3b57506000610c65565b8160018114615a515760028114615a5b57615a77565b6001915050610c65565b60ff841115615a6c57615a6c614b40565b50506001821b610c65565b5060208310610133831016604e8410600b8410161715615a9a575081810a610c65565b615aa483836159dc565b8060001904821115615ab857615ab8614b40565b029392505050565b60006135de8383615a1f565b60006001600160401b0380831681851681830481118215151615615af257615af2614b40565b02949350505050565b60006001600160401b0380841680615b1557615b156156f2565b92169190910492915050565b60008083128015600160ff1b850184121615615b3f57615b3f614b40565b6001600160ff1b0384018313811615615b5a57615b5a614b40565b50500390565b600060208284031215615b7257600080fd5b81356135de81614b6e565b60006001600160401b03808316818516808303821115615b9f57615b9f614b40565b01949350505050565b600081615bb757615bb7614b40565b506000190190565b6020815260006135de602083018461559d56fe426561636f6e436861696e50726f6f66732e7665726966795769746864726177a26469706673582212200061efb94d40bbb427ddb8aae51ec74133591e8814f6dbd3bd8dbbee784961b864736f6c634300080c0033 diff --git a/pkg/bindings/EigenPodManager/binding.go b/pkg/bindings/EigenPodManager/binding.go new file mode 100644 index 000000000..2ae13aee1 --- /dev/null +++ b/pkg/bindings/EigenPodManager/binding.go @@ -0,0 +1,2658 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package EigenPodManager + +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 +) + +// 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\":\"beaconChainOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeaconChainOracle\"}],\"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\":\"denebForkTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"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\":\"getBlockRootAtTimestamp\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"_beaconChainOracle\",\"type\":\"address\",\"internalType\":\"contractIBeaconChainOracle\"},{\"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\":\"setDenebForkTimestamp\",\"inputs\":[{\"name\":\"newDenebForkTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"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\":\"updateBeaconChainOracle\",\"inputs\":[{\"name\":\"newBeaconChainOracle\",\"type\":\"address\",\"internalType\":\"contractIBeaconChainOracle\"}],\"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\":\"BeaconOracleUpdated\",\"inputs\":[{\"name\":\"newOracleAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DenebForkTimestampUpdated\",\"inputs\":[{\"name\":\"newValue\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"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: "0x6101206040523480156200001257600080fd5b50604051620034e7380380620034e783398101604081905262000035916200014b565b6001600160a01b0380861660805280851660a05280841660c05280831660e0528116610100526200006562000070565b5050505050620001cb565b600054610100900460ff1615620000dd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000130576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014857600080fd5b50565b600080600080600060a086880312156200016457600080fd5b8551620001718162000132565b6020870151909550620001848162000132565b6040870151909450620001978162000132565b6060870151909350620001aa8162000132565b6080870151909250620001bd8162000132565b809150509295509295909350565b60805160a05160c05160e051610100516132a66200024160003960008181610636015281816106e001528181610b0e015281816113e70152818161187c015261196c01526000610542015260006102e601526000818161027a01528181611366015261203a0152600061041401526132a66000f3fe6080604052600436106101ee5760003560e01c80638da5cb5b1161010d578063c052bd61116100a0578063d1c64cc91161006f578063d1c64cc914610604578063ea4d3c9b14610624578063f2fde38b14610658578063f6848d2414610678578063fabc1cbc146106b357600080fd5b8063c052bd6114610584578063c1de3aef146105a4578063c2c51c40146105c4578063cf756fdf146105e457600080fd5b8063a38406a3116100dc578063a38406a3146104fa578063a6a509be1461051a578063b134427114610530578063beffbb891461056457600080fd5b80638da5cb5b1461046b5780639104c319146104895780639b4e4634146104b15780639ba06275146104c457600080fd5b8063595c6a6711610185578063715018a611610154578063715018a6146103ed57806374cdd7981461040257806384d8106214610436578063886f11951461044b57600080fd5b8063595c6a67146103565780635ac86ab71461036b5780635c975abb146103ab57806360f4062b146103c057600080fd5b8063387b1300116101c1578063387b1300146102b457806339b70e38146102d457806344e71c8014610308578063463db0381461033657600080fd5b80630e81073c146101f357806310d67a2f14610226578063136439dd14610248578063292b7b2b14610268575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612406565b6106d3565b6040519081526020015b60405180910390f35b34801561023257600080fd5b50610246610241366004612432565b610911565b005b34801561025457600080fd5b5061024661026336600461244f565b6109c4565b34801561027457600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161021d565b3480156102c057600080fd5b506102466102cf366004612468565b610b03565b3480156102e057600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561031457600080fd5b5061031d610ea1565b60405167ffffffffffffffff909116815260200161021d565b34801561034257600080fd5b506102466103513660046124a9565b610eca565b34801561036257600080fd5b50610246611056565b34801561037757600080fd5b5061039b6103863660046124d3565b606654600160ff9092169190911b9081161490565b604051901515815260200161021d565b3480156103b757600080fd5b50606654610213565b3480156103cc57600080fd5b506102136103db366004612432565b609b6020526000908152604090205481565b3480156103f957600080fd5b5061024661111d565b34801561040e57600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044257600080fd5b5061029c611131565b34801561045757600080fd5b5060655461029c906001600160a01b031681565b34801561047757600080fd5b506033546001600160a01b031661029c565b34801561049557600080fd5b5061029c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102466104bf36600461253f565b61121b565b3480156104d057600080fd5b5061029c6104df366004612432565b6098602052600090815260409020546001600160a01b031681565b34801561050657600080fd5b5061029c610515366004612432565b61130a565b34801561052657600080fd5b5061021360995481565b34801561053c57600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561057057600080fd5b5061024661057f366004612406565b6113dc565b34801561059057600080fd5b5060975461029c906001600160a01b031681565b3480156105b057600080fd5b506102466105bf366004612432565b6115f3565b3480156105d057600080fd5b506102466105df366004612406565b611604565b3480156105f057600080fd5b506102466105ff3660046125b3565b611a07565b34801561061057600080fd5b5061021361061f3660046124a9565b611b30565b34801561063057600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066457600080fd5b50610246610673366004612432565b611c3b565b34801561068457600080fd5b5061039b610693366004612432565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156106bf57600080fd5b506102466106ce36600461244f565b611cb1565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107265760405162461bcd60e51b815260040161071d90612604565b60405180910390fd5b6001600160a01b0383166107a25760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f2061646472657373000000000000606482015260840161071d565b60008212156108105760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b606482015260840161071d565b61081e633b9aca0083612678565b156108915760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e74000000606482015260840161071d565b6001600160a01b0383166000908152609b6020526040812054906108b584836126a2565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020613231833981519152906108f49087815260200190565b60405180910390a26109068282611e0d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098891906126e3565b6001600160a01b0316336001600160a01b0316146109b85760405162461bcd60e51b815260040161071d90612700565b6109c181611e4f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a30919061274a565b610a4c5760405162461bcd60e51b815260040161071d9061276c565b60665481811614610ac55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b4b5760405162461bcd60e51b815260040161071d90612604565b6001600160a01b038316610bc55760405162461bcd60e51b8152602060048201526047602482015260008051602061325183398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a40161071d565b6001600160a01b038216610c425760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a40161071d565b6000811215610cb15760405162461bcd60e51b8152602060048201526041602482015260008051602061325183398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a40161071d565b610cbf633b9aca0082612678565b15610d335760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a40161071d565b6001600160a01b0383166000908152609b602052604081205490811215610e26576000610d5f826127b4565b905080831115610dc4576001600160a01b0385166000908152609b6020526040812055610d8c81846127d1565b9250846001600160a01b031660008051602061323183398151915282604051610db791815260200190565b60405180910390a2610e24565b6001600160a01b0385166000908152609b602052604081208054859290610dec9084906126a2565b90915550506040518381526001600160a01b038616906000805160206132318339815191529060200160405180910390a25050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b5050505050505050565b609c5460009067ffffffffffffffff1680610ec55767ffffffffffffffff91505090565b919050565b610ed2611f46565b67ffffffffffffffff8116610f645760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f7420736574206e657744656e6562466f726b546960648201526b06d657374616d7020746f20360a41b608482015260a40161071d565b609c5467ffffffffffffffff16156110005760405162461bcd60e51b815260206004820152605360248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f74207365742064656e6562466f726b54696d657360648201527274616d70206d6f7265207468616e206f6e636560681b608482015260a40161071d565b609c805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527f19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db9060200160405180910390a150565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c2919061274a565b6110de5760405162461bcd60e51b815260040161071d9061276c565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611125611f46565b61112f6000611fa0565b565b6066546000908190600190811614156111885760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03161561120a5760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b606482015260840161071d565b6000611214611ff2565b9250505090565b606654600090600190811614156112705760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03168061129957611296611ff2565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906112cf908b908b908b908b908b90600401612811565b6000604051808303818588803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061090b576113d5836001600160a01b031660001b60405180610940016040528061090e815260200161292361090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f19818403018152908290526113ba9291602001612886565b60405160208183030381529060405280519060200120612157565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114245760405162461bcd60e51b815260040161071d90612604565b600081121561149b5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e65676174697665000000000000000000606482015260840161071d565b6114a9633b9aca0082612678565b1561151e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e74606482015260840161071d565b6001600160a01b0382166000908152609b602052604081205461154290839061289b565b905060008112156115d35760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a40161071d565b6001600160a01b039092166000908152609b602052604090209190915550565b6115fb611f46565b6109c1816121b3565b6001600160a01b03808316600090815260986020526040902054839116331461167f5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b606482015260840161071d565b600260c95414156116d25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071d565b600260c9556001600160a01b03831661176e5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a40161071d565b61177c633b9aca00836128da565b156118155760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a40161071d565b6001600160a01b0383166000908152609b60205260408120549061183984836126a2565b6001600160a01b0386166000908152609b602052604081208290559091506118618383611e0d565b905080156119c957600081121561192c576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118c0856127b4565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561190f57600080fd5b505af1158015611923573d6000803e3d6000fd5b505050506119c9565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020613231833981519152866040516119f291815260200190565b60405180910390a25050600160c95550505050565b600054610100900460ff1615808015611a275750600054600160ff909116105b80611a415750303b158015611a41575060005460ff166001145b611aa45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071d565b6000805460ff191660011790558015611ac7576000805461ff0019166101001790555b611ad0856121b3565b611ad984611fa0565b611ae383836121fd565b8015611b29576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa158015611b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bab91906128ee565b90508061090b5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a40161071d565b611c43611f46565b6001600160a01b038116611ca85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161071d565b6109c181611fa0565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2891906126e3565b6001600160a01b0316336001600160a01b031614611d585760405162461bcd60e51b815260040161071d90612700565b606654198119606654191614611dd65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610af8565b6000808313611e2d5760008213611e265750600061090b565b508061090b565b60008213611e4557611e3e836127b4565b905061090b565b611e3e838361289b565b6001600160a01b038116611edd5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161071d565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461112f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060996000815461200390612907565b9091555060408051610940810190915261090e8082526000916120a291839133916129236020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f198184030181529082905261208e9291602001612886565b6040516020818303038152906040526122e7565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156120e657600080fd5b505af11580156120fa573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000906113d5565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b031615801561221e57506001600160a01b03821615155b6122a05760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26122e382611e4f565b5050565b6000808447101561233a5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161071d565b82516123885760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161071d565b8383516020850187f590506001600160a01b0381166123e95760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161071d565b949350505050565b6001600160a01b03811681146109c157600080fd5b6000806040838503121561241957600080fd5b8235612424816123f1565b946020939093013593505050565b60006020828403121561244457600080fd5b81356113d5816123f1565b60006020828403121561246157600080fd5b5035919050565b60008060006060848603121561247d57600080fd5b8335612488816123f1565b92506020840135612498816123f1565b929592945050506040919091013590565b6000602082840312156124bb57600080fd5b813567ffffffffffffffff811681146113d557600080fd5b6000602082840312156124e557600080fd5b813560ff811681146113d557600080fd5b60008083601f84011261250857600080fd5b50813567ffffffffffffffff81111561252057600080fd5b60208301915083602082850101111561253857600080fd5b9250929050565b60008060008060006060868803121561255757600080fd5b853567ffffffffffffffff8082111561256f57600080fd5b61257b89838a016124f6565b9097509550602088013591508082111561259457600080fd5b506125a1888289016124f6565b96999598509660400135949350505050565b600080600080608085870312156125c957600080fd5b84356125d4816123f1565b935060208501356125e4816123f1565b925060408501356125f4816123f1565b9396929550929360600135925050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261268757612687612662565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b03849003851316156126c4576126c461268c565b600160ff1b83900384128116156126dd576126dd61268c565b50500190565b6000602082840312156126f557600080fd5b81516113d5816123f1565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561275c57600080fd5b815180151581146113d557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b8214156127ca576127ca61268c565b5060000390565b6000828210156127e3576127e361268c565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006128256060830187896127e8565b82810360208401526128388186886127e8565b9150508260408301529695505050505050565b6000815160005b8181101561286c5760208185018101518683015201612852565b8181111561287b576000828601525b509290920192915050565b60006123e9612895838661284b565b8461284b565b60008083128015600160ff1b8501841216156128b9576128b961268c565b6001600160ff1b03840183138116156128d4576128d461268c565b50500390565b6000826128e9576128e9612662565b500790565b60006020828403121561290057600080fd5b5051919050565b600060001982141561291b5761291b61268c565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220b588a2f2d4cb671a90072515016931b16cdf94a0a4ced664f6e2884a1b1a5d8164736f6c634300080c0033", +} + +// EigenPodManagerABI is the input ABI used to generate the binding from. +// Deprecated: Use EigenPodManagerMetaData.ABI instead. +var EigenPodManagerABI = EigenPodManagerMetaData.ABI + +// EigenPodManagerBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use EigenPodManagerMetaData.Bin instead. +var EigenPodManagerBin = EigenPodManagerMetaData.Bin + +// DeployEigenPodManager deploys a new Ethereum contract, binding an instance of EigenPodManager to it. +func DeployEigenPodManager(auth *bind.TransactOpts, backend bind.ContractBackend, _ethPOS common.Address, _eigenPodBeacon common.Address, _strategyManager common.Address, _slasher common.Address, _delegationManager common.Address) (common.Address, *types.Transaction, *EigenPodManager, error) { + parsed, err := EigenPodManagerMetaData.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(EigenPodManagerBin), backend, _ethPOS, _eigenPodBeacon, _strategyManager, _slasher, _delegationManager) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &EigenPodManager{EigenPodManagerCaller: EigenPodManagerCaller{contract: contract}, EigenPodManagerTransactor: EigenPodManagerTransactor{contract: contract}, EigenPodManagerFilterer: EigenPodManagerFilterer{contract: contract}}, nil +} + +// EigenPodManager is an auto generated Go binding around an Ethereum contract. +type EigenPodManager struct { + EigenPodManagerCaller // Read-only binding to the contract + EigenPodManagerTransactor // Write-only binding to the contract + EigenPodManagerFilterer // Log filterer for contract events +} + +// EigenPodManagerCaller is an auto generated read-only Go binding around an Ethereum contract. +type EigenPodManagerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenPodManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type EigenPodManagerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenPodManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type EigenPodManagerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenPodManagerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type EigenPodManagerSession struct { + Contract *EigenPodManager // 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 +} + +// EigenPodManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type EigenPodManagerCallerSession struct { + Contract *EigenPodManagerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// EigenPodManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type EigenPodManagerTransactorSession struct { + Contract *EigenPodManagerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// EigenPodManagerRaw is an auto generated low-level Go binding around an Ethereum contract. +type EigenPodManagerRaw struct { + Contract *EigenPodManager // Generic contract binding to access the raw methods on +} + +// EigenPodManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type EigenPodManagerCallerRaw struct { + Contract *EigenPodManagerCaller // Generic read-only contract binding to access the raw methods on +} + +// EigenPodManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type EigenPodManagerTransactorRaw struct { + Contract *EigenPodManagerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewEigenPodManager creates a new instance of EigenPodManager, bound to a specific deployed contract. +func NewEigenPodManager(address common.Address, backend bind.ContractBackend) (*EigenPodManager, error) { + contract, err := bindEigenPodManager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &EigenPodManager{EigenPodManagerCaller: EigenPodManagerCaller{contract: contract}, EigenPodManagerTransactor: EigenPodManagerTransactor{contract: contract}, EigenPodManagerFilterer: EigenPodManagerFilterer{contract: contract}}, nil +} + +// NewEigenPodManagerCaller creates a new read-only instance of EigenPodManager, bound to a specific deployed contract. +func NewEigenPodManagerCaller(address common.Address, caller bind.ContractCaller) (*EigenPodManagerCaller, error) { + contract, err := bindEigenPodManager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &EigenPodManagerCaller{contract: contract}, nil +} + +// NewEigenPodManagerTransactor creates a new write-only instance of EigenPodManager, bound to a specific deployed contract. +func NewEigenPodManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*EigenPodManagerTransactor, error) { + contract, err := bindEigenPodManager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &EigenPodManagerTransactor{contract: contract}, nil +} + +// NewEigenPodManagerFilterer creates a new log filterer instance of EigenPodManager, bound to a specific deployed contract. +func NewEigenPodManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*EigenPodManagerFilterer, error) { + contract, err := bindEigenPodManager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &EigenPodManagerFilterer{contract: contract}, nil +} + +// bindEigenPodManager binds a generic wrapper to an already deployed contract. +func bindEigenPodManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := EigenPodManagerMetaData.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 (_EigenPodManager *EigenPodManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EigenPodManager.Contract.EigenPodManagerCaller.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 (_EigenPodManager *EigenPodManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPodManager.Contract.EigenPodManagerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EigenPodManager *EigenPodManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EigenPodManager.Contract.EigenPodManagerTransactor.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 (_EigenPodManager *EigenPodManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EigenPodManager.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 (_EigenPodManager *EigenPodManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPodManager.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EigenPodManager *EigenPodManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EigenPodManager.Contract.contract.Transact(opts, method, params...) +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_EigenPodManager *EigenPodManagerCaller) BeaconChainETHStrategy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManager.contract.Call(opts, &out, "beaconChainETHStrategy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_EigenPodManager *EigenPodManagerSession) BeaconChainETHStrategy() (common.Address, error) { + return _EigenPodManager.Contract.BeaconChainETHStrategy(&_EigenPodManager.CallOpts) +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_EigenPodManager *EigenPodManagerCallerSession) BeaconChainETHStrategy() (common.Address, error) { + return _EigenPodManager.Contract.BeaconChainETHStrategy(&_EigenPodManager.CallOpts) +} + +// BeaconChainOracle is a free data retrieval call binding the contract method 0xc052bd61. +// +// Solidity: function beaconChainOracle() view returns(address) +func (_EigenPodManager *EigenPodManagerCaller) BeaconChainOracle(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManager.contract.Call(opts, &out, "beaconChainOracle") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BeaconChainOracle is a free data retrieval call binding the contract method 0xc052bd61. +// +// Solidity: function beaconChainOracle() view returns(address) +func (_EigenPodManager *EigenPodManagerSession) BeaconChainOracle() (common.Address, error) { + return _EigenPodManager.Contract.BeaconChainOracle(&_EigenPodManager.CallOpts) +} + +// BeaconChainOracle is a free data retrieval call binding the contract method 0xc052bd61. +// +// Solidity: function beaconChainOracle() view returns(address) +func (_EigenPodManager *EigenPodManagerCallerSession) BeaconChainOracle() (common.Address, error) { + return _EigenPodManager.Contract.BeaconChainOracle(&_EigenPodManager.CallOpts) +} + +// DelegationManager is a free data retrieval call binding the contract method 0xea4d3c9b. +// +// Solidity: function delegationManager() view returns(address) +func (_EigenPodManager *EigenPodManagerCaller) DelegationManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManager.contract.Call(opts, &out, "delegationManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DelegationManager is a free data retrieval call binding the contract method 0xea4d3c9b. +// +// Solidity: function delegationManager() view returns(address) +func (_EigenPodManager *EigenPodManagerSession) DelegationManager() (common.Address, error) { + return _EigenPodManager.Contract.DelegationManager(&_EigenPodManager.CallOpts) +} + +// DelegationManager is a free data retrieval call binding the contract method 0xea4d3c9b. +// +// Solidity: function delegationManager() view returns(address) +func (_EigenPodManager *EigenPodManagerCallerSession) DelegationManager() (common.Address, error) { + return _EigenPodManager.Contract.DelegationManager(&_EigenPodManager.CallOpts) +} + +// DenebForkTimestamp is a free data retrieval call binding the contract method 0x44e71c80. +// +// Solidity: function denebForkTimestamp() view returns(uint64) +func (_EigenPodManager *EigenPodManagerCaller) DenebForkTimestamp(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _EigenPodManager.contract.Call(opts, &out, "denebForkTimestamp") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// DenebForkTimestamp is a free data retrieval call binding the contract method 0x44e71c80. +// +// Solidity: function denebForkTimestamp() view returns(uint64) +func (_EigenPodManager *EigenPodManagerSession) DenebForkTimestamp() (uint64, error) { + return _EigenPodManager.Contract.DenebForkTimestamp(&_EigenPodManager.CallOpts) +} + +// DenebForkTimestamp is a free data retrieval call binding the contract method 0x44e71c80. +// +// Solidity: function denebForkTimestamp() view returns(uint64) +func (_EigenPodManager *EigenPodManagerCallerSession) DenebForkTimestamp() (uint64, error) { + return _EigenPodManager.Contract.DenebForkTimestamp(&_EigenPodManager.CallOpts) +} + +// EigenPodBeacon is a free data retrieval call binding the contract method 0x292b7b2b. +// +// Solidity: function eigenPodBeacon() view returns(address) +func (_EigenPodManager *EigenPodManagerCaller) EigenPodBeacon(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManager.contract.Call(opts, &out, "eigenPodBeacon") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EigenPodBeacon is a free data retrieval call binding the contract method 0x292b7b2b. +// +// Solidity: function eigenPodBeacon() view returns(address) +func (_EigenPodManager *EigenPodManagerSession) EigenPodBeacon() (common.Address, error) { + return _EigenPodManager.Contract.EigenPodBeacon(&_EigenPodManager.CallOpts) +} + +// EigenPodBeacon is a free data retrieval call binding the contract method 0x292b7b2b. +// +// Solidity: function eigenPodBeacon() view returns(address) +func (_EigenPodManager *EigenPodManagerCallerSession) EigenPodBeacon() (common.Address, error) { + return _EigenPodManager.Contract.EigenPodBeacon(&_EigenPodManager.CallOpts) +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_EigenPodManager *EigenPodManagerCaller) EthPOS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManager.contract.Call(opts, &out, "ethPOS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_EigenPodManager *EigenPodManagerSession) EthPOS() (common.Address, error) { + return _EigenPodManager.Contract.EthPOS(&_EigenPodManager.CallOpts) +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_EigenPodManager *EigenPodManagerCallerSession) EthPOS() (common.Address, error) { + return _EigenPodManager.Contract.EthPOS(&_EigenPodManager.CallOpts) +} + +// GetBlockRootAtTimestamp is a free data retrieval call binding the contract method 0xd1c64cc9. +// +// Solidity: function getBlockRootAtTimestamp(uint64 timestamp) view returns(bytes32) +func (_EigenPodManager *EigenPodManagerCaller) GetBlockRootAtTimestamp(opts *bind.CallOpts, timestamp uint64) ([32]byte, error) { + var out []interface{} + err := _EigenPodManager.contract.Call(opts, &out, "getBlockRootAtTimestamp", timestamp) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetBlockRootAtTimestamp is a free data retrieval call binding the contract method 0xd1c64cc9. +// +// Solidity: function getBlockRootAtTimestamp(uint64 timestamp) view returns(bytes32) +func (_EigenPodManager *EigenPodManagerSession) GetBlockRootAtTimestamp(timestamp uint64) ([32]byte, error) { + return _EigenPodManager.Contract.GetBlockRootAtTimestamp(&_EigenPodManager.CallOpts, timestamp) +} + +// GetBlockRootAtTimestamp is a free data retrieval call binding the contract method 0xd1c64cc9. +// +// Solidity: function getBlockRootAtTimestamp(uint64 timestamp) view returns(bytes32) +func (_EigenPodManager *EigenPodManagerCallerSession) GetBlockRootAtTimestamp(timestamp uint64) ([32]byte, error) { + return _EigenPodManager.Contract.GetBlockRootAtTimestamp(&_EigenPodManager.CallOpts, timestamp) +} + +// GetPod is a free data retrieval call binding the contract method 0xa38406a3. +// +// Solidity: function getPod(address podOwner) view returns(address) +func (_EigenPodManager *EigenPodManagerCaller) GetPod(opts *bind.CallOpts, podOwner common.Address) (common.Address, error) { + var out []interface{} + err := _EigenPodManager.contract.Call(opts, &out, "getPod", podOwner) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPod is a free data retrieval call binding the contract method 0xa38406a3. +// +// Solidity: function getPod(address podOwner) view returns(address) +func (_EigenPodManager *EigenPodManagerSession) GetPod(podOwner common.Address) (common.Address, error) { + return _EigenPodManager.Contract.GetPod(&_EigenPodManager.CallOpts, podOwner) +} + +// GetPod is a free data retrieval call binding the contract method 0xa38406a3. +// +// Solidity: function getPod(address podOwner) view returns(address) +func (_EigenPodManager *EigenPodManagerCallerSession) GetPod(podOwner common.Address) (common.Address, error) { + return _EigenPodManager.Contract.GetPod(&_EigenPodManager.CallOpts, podOwner) +} + +// HasPod is a free data retrieval call binding the contract method 0xf6848d24. +// +// Solidity: function hasPod(address podOwner) view returns(bool) +func (_EigenPodManager *EigenPodManagerCaller) HasPod(opts *bind.CallOpts, podOwner common.Address) (bool, error) { + var out []interface{} + err := _EigenPodManager.contract.Call(opts, &out, "hasPod", podOwner) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasPod is a free data retrieval call binding the contract method 0xf6848d24. +// +// Solidity: function hasPod(address podOwner) view returns(bool) +func (_EigenPodManager *EigenPodManagerSession) HasPod(podOwner common.Address) (bool, error) { + return _EigenPodManager.Contract.HasPod(&_EigenPodManager.CallOpts, podOwner) +} + +// HasPod is a free data retrieval call binding the contract method 0xf6848d24. +// +// Solidity: function hasPod(address podOwner) view returns(bool) +func (_EigenPodManager *EigenPodManagerCallerSession) HasPod(podOwner common.Address) (bool, error) { + return _EigenPodManager.Contract.HasPod(&_EigenPodManager.CallOpts, podOwner) +} + +// NumPods is a free data retrieval call binding the contract method 0xa6a509be. +// +// Solidity: function numPods() view returns(uint256) +func (_EigenPodManager *EigenPodManagerCaller) NumPods(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _EigenPodManager.contract.Call(opts, &out, "numPods") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NumPods is a free data retrieval call binding the contract method 0xa6a509be. +// +// Solidity: function numPods() view returns(uint256) +func (_EigenPodManager *EigenPodManagerSession) NumPods() (*big.Int, error) { + return _EigenPodManager.Contract.NumPods(&_EigenPodManager.CallOpts) +} + +// NumPods is a free data retrieval call binding the contract method 0xa6a509be. +// +// Solidity: function numPods() view returns(uint256) +func (_EigenPodManager *EigenPodManagerCallerSession) NumPods() (*big.Int, error) { + return _EigenPodManager.Contract.NumPods(&_EigenPodManager.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_EigenPodManager *EigenPodManagerCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManager.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 (_EigenPodManager *EigenPodManagerSession) Owner() (common.Address, error) { + return _EigenPodManager.Contract.Owner(&_EigenPodManager.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_EigenPodManager *EigenPodManagerCallerSession) Owner() (common.Address, error) { + return _EigenPodManager.Contract.Owner(&_EigenPodManager.CallOpts) +} + +// OwnerToPod is a free data retrieval call binding the contract method 0x9ba06275. +// +// Solidity: function ownerToPod(address ) view returns(address) +func (_EigenPodManager *EigenPodManagerCaller) OwnerToPod(opts *bind.CallOpts, arg0 common.Address) (common.Address, error) { + var out []interface{} + err := _EigenPodManager.contract.Call(opts, &out, "ownerToPod", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OwnerToPod is a free data retrieval call binding the contract method 0x9ba06275. +// +// Solidity: function ownerToPod(address ) view returns(address) +func (_EigenPodManager *EigenPodManagerSession) OwnerToPod(arg0 common.Address) (common.Address, error) { + return _EigenPodManager.Contract.OwnerToPod(&_EigenPodManager.CallOpts, arg0) +} + +// OwnerToPod is a free data retrieval call binding the contract method 0x9ba06275. +// +// Solidity: function ownerToPod(address ) view returns(address) +func (_EigenPodManager *EigenPodManagerCallerSession) OwnerToPod(arg0 common.Address) (common.Address, error) { + return _EigenPodManager.Contract.OwnerToPod(&_EigenPodManager.CallOpts, arg0) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_EigenPodManager *EigenPodManagerCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _EigenPodManager.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 (_EigenPodManager *EigenPodManagerSession) Paused(index uint8) (bool, error) { + return _EigenPodManager.Contract.Paused(&_EigenPodManager.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_EigenPodManager *EigenPodManagerCallerSession) Paused(index uint8) (bool, error) { + return _EigenPodManager.Contract.Paused(&_EigenPodManager.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_EigenPodManager *EigenPodManagerCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _EigenPodManager.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 (_EigenPodManager *EigenPodManagerSession) Paused0() (*big.Int, error) { + return _EigenPodManager.Contract.Paused0(&_EigenPodManager.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_EigenPodManager *EigenPodManagerCallerSession) Paused0() (*big.Int, error) { + return _EigenPodManager.Contract.Paused0(&_EigenPodManager.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_EigenPodManager *EigenPodManagerCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManager.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 (_EigenPodManager *EigenPodManagerSession) PauserRegistry() (common.Address, error) { + return _EigenPodManager.Contract.PauserRegistry(&_EigenPodManager.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_EigenPodManager *EigenPodManagerCallerSession) PauserRegistry() (common.Address, error) { + return _EigenPodManager.Contract.PauserRegistry(&_EigenPodManager.CallOpts) +} + +// PodOwnerShares is a free data retrieval call binding the contract method 0x60f4062b. +// +// Solidity: function podOwnerShares(address ) view returns(int256) +func (_EigenPodManager *EigenPodManagerCaller) PodOwnerShares(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _EigenPodManager.contract.Call(opts, &out, "podOwnerShares", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// PodOwnerShares is a free data retrieval call binding the contract method 0x60f4062b. +// +// Solidity: function podOwnerShares(address ) view returns(int256) +func (_EigenPodManager *EigenPodManagerSession) PodOwnerShares(arg0 common.Address) (*big.Int, error) { + return _EigenPodManager.Contract.PodOwnerShares(&_EigenPodManager.CallOpts, arg0) +} + +// PodOwnerShares is a free data retrieval call binding the contract method 0x60f4062b. +// +// Solidity: function podOwnerShares(address ) view returns(int256) +func (_EigenPodManager *EigenPodManagerCallerSession) PodOwnerShares(arg0 common.Address) (*big.Int, error) { + return _EigenPodManager.Contract.PodOwnerShares(&_EigenPodManager.CallOpts, arg0) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_EigenPodManager *EigenPodManagerCaller) Slasher(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManager.contract.Call(opts, &out, "slasher") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_EigenPodManager *EigenPodManagerSession) Slasher() (common.Address, error) { + return _EigenPodManager.Contract.Slasher(&_EigenPodManager.CallOpts) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_EigenPodManager *EigenPodManagerCallerSession) Slasher() (common.Address, error) { + return _EigenPodManager.Contract.Slasher(&_EigenPodManager.CallOpts) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_EigenPodManager *EigenPodManagerCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManager.contract.Call(opts, &out, "strategyManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_EigenPodManager *EigenPodManagerSession) StrategyManager() (common.Address, error) { + return _EigenPodManager.Contract.StrategyManager(&_EigenPodManager.CallOpts) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_EigenPodManager *EigenPodManagerCallerSession) StrategyManager() (common.Address, error) { + return _EigenPodManager.Contract.StrategyManager(&_EigenPodManager.CallOpts) +} + +// AddShares is a paid mutator transaction binding the contract method 0x0e81073c. +// +// 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) +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) +func (_EigenPodManager *EigenPodManagerTransactorSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { + return _EigenPodManager.Contract.AddShares(&_EigenPodManager.TransactOpts, podOwner, shares) +} + +// CreatePod is a paid mutator transaction binding the contract method 0x84d81062. +// +// Solidity: function createPod() returns(address) +func (_EigenPodManager *EigenPodManagerTransactor) CreatePod(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPodManager.contract.Transact(opts, "createPod") +} + +// CreatePod is a paid mutator transaction binding the contract method 0x84d81062. +// +// Solidity: function createPod() returns(address) +func (_EigenPodManager *EigenPodManagerSession) CreatePod() (*types.Transaction, error) { + return _EigenPodManager.Contract.CreatePod(&_EigenPodManager.TransactOpts) +} + +// CreatePod is a paid mutator transaction binding the contract method 0x84d81062. +// +// Solidity: function createPod() returns(address) +func (_EigenPodManager *EigenPodManagerTransactorSession) CreatePod() (*types.Transaction, error) { + return _EigenPodManager.Contract.CreatePod(&_EigenPodManager.TransactOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0xcf756fdf. +// +// Solidity: function initialize(address _beaconChainOracle, address initialOwner, address _pauserRegistry, uint256 _initPausedStatus) returns() +func (_EigenPodManager *EigenPodManagerTransactor) Initialize(opts *bind.TransactOpts, _beaconChainOracle common.Address, initialOwner common.Address, _pauserRegistry common.Address, _initPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManager.contract.Transact(opts, "initialize", _beaconChainOracle, initialOwner, _pauserRegistry, _initPausedStatus) +} + +// Initialize is a paid mutator transaction binding the contract method 0xcf756fdf. +// +// Solidity: function initialize(address _beaconChainOracle, address initialOwner, address _pauserRegistry, uint256 _initPausedStatus) returns() +func (_EigenPodManager *EigenPodManagerSession) Initialize(_beaconChainOracle common.Address, initialOwner common.Address, _pauserRegistry common.Address, _initPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManager.Contract.Initialize(&_EigenPodManager.TransactOpts, _beaconChainOracle, initialOwner, _pauserRegistry, _initPausedStatus) +} + +// Initialize is a paid mutator transaction binding the contract method 0xcf756fdf. +// +// Solidity: function initialize(address _beaconChainOracle, address initialOwner, address _pauserRegistry, uint256 _initPausedStatus) returns() +func (_EigenPodManager *EigenPodManagerTransactorSession) Initialize(_beaconChainOracle common.Address, initialOwner common.Address, _pauserRegistry common.Address, _initPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManager.Contract.Initialize(&_EigenPodManager.TransactOpts, _beaconChainOracle, initialOwner, _pauserRegistry, _initPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_EigenPodManager *EigenPodManagerTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManager.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_EigenPodManager *EigenPodManagerSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManager.Contract.Pause(&_EigenPodManager.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_EigenPodManager *EigenPodManagerTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManager.Contract.Pause(&_EigenPodManager.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_EigenPodManager *EigenPodManagerTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPodManager.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_EigenPodManager *EigenPodManagerSession) PauseAll() (*types.Transaction, error) { + return _EigenPodManager.Contract.PauseAll(&_EigenPodManager.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_EigenPodManager *EigenPodManagerTransactorSession) PauseAll() (*types.Transaction, error) { + return _EigenPodManager.Contract.PauseAll(&_EigenPodManager.TransactOpts) +} + +// RecordBeaconChainETHBalanceUpdate is a paid mutator transaction binding the contract method 0xc2c51c40. +// +// Solidity: function recordBeaconChainETHBalanceUpdate(address podOwner, int256 sharesDelta) returns() +func (_EigenPodManager *EigenPodManagerTransactor) RecordBeaconChainETHBalanceUpdate(opts *bind.TransactOpts, podOwner common.Address, sharesDelta *big.Int) (*types.Transaction, error) { + return _EigenPodManager.contract.Transact(opts, "recordBeaconChainETHBalanceUpdate", podOwner, sharesDelta) +} + +// RecordBeaconChainETHBalanceUpdate is a paid mutator transaction binding the contract method 0xc2c51c40. +// +// Solidity: function recordBeaconChainETHBalanceUpdate(address podOwner, int256 sharesDelta) returns() +func (_EigenPodManager *EigenPodManagerSession) RecordBeaconChainETHBalanceUpdate(podOwner common.Address, sharesDelta *big.Int) (*types.Transaction, error) { + return _EigenPodManager.Contract.RecordBeaconChainETHBalanceUpdate(&_EigenPodManager.TransactOpts, podOwner, sharesDelta) +} + +// RecordBeaconChainETHBalanceUpdate is a paid mutator transaction binding the contract method 0xc2c51c40. +// +// Solidity: function recordBeaconChainETHBalanceUpdate(address podOwner, int256 sharesDelta) returns() +func (_EigenPodManager *EigenPodManagerTransactorSession) RecordBeaconChainETHBalanceUpdate(podOwner common.Address, sharesDelta *big.Int) (*types.Transaction, error) { + return _EigenPodManager.Contract.RecordBeaconChainETHBalanceUpdate(&_EigenPodManager.TransactOpts, podOwner, sharesDelta) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0xbeffbb89. +// +// Solidity: function removeShares(address podOwner, uint256 shares) returns() +func (_EigenPodManager *EigenPodManagerTransactor) RemoveShares(opts *bind.TransactOpts, podOwner common.Address, shares *big.Int) (*types.Transaction, error) { + return _EigenPodManager.contract.Transact(opts, "removeShares", podOwner, shares) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0xbeffbb89. +// +// Solidity: function removeShares(address podOwner, uint256 shares) returns() +func (_EigenPodManager *EigenPodManagerSession) RemoveShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { + return _EigenPodManager.Contract.RemoveShares(&_EigenPodManager.TransactOpts, podOwner, shares) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0xbeffbb89. +// +// Solidity: function removeShares(address podOwner, uint256 shares) returns() +func (_EigenPodManager *EigenPodManagerTransactorSession) RemoveShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { + return _EigenPodManager.Contract.RemoveShares(&_EigenPodManager.TransactOpts, podOwner, shares) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_EigenPodManager *EigenPodManagerTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPodManager.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_EigenPodManager *EigenPodManagerSession) RenounceOwnership() (*types.Transaction, error) { + return _EigenPodManager.Contract.RenounceOwnership(&_EigenPodManager.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_EigenPodManager *EigenPodManagerTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _EigenPodManager.Contract.RenounceOwnership(&_EigenPodManager.TransactOpts) +} + +// SetDenebForkTimestamp is a paid mutator transaction binding the contract method 0x463db038. +// +// Solidity: function setDenebForkTimestamp(uint64 newDenebForkTimestamp) returns() +func (_EigenPodManager *EigenPodManagerTransactor) SetDenebForkTimestamp(opts *bind.TransactOpts, newDenebForkTimestamp uint64) (*types.Transaction, error) { + return _EigenPodManager.contract.Transact(opts, "setDenebForkTimestamp", newDenebForkTimestamp) +} + +// SetDenebForkTimestamp is a paid mutator transaction binding the contract method 0x463db038. +// +// Solidity: function setDenebForkTimestamp(uint64 newDenebForkTimestamp) returns() +func (_EigenPodManager *EigenPodManagerSession) SetDenebForkTimestamp(newDenebForkTimestamp uint64) (*types.Transaction, error) { + return _EigenPodManager.Contract.SetDenebForkTimestamp(&_EigenPodManager.TransactOpts, newDenebForkTimestamp) +} + +// SetDenebForkTimestamp is a paid mutator transaction binding the contract method 0x463db038. +// +// Solidity: function setDenebForkTimestamp(uint64 newDenebForkTimestamp) returns() +func (_EigenPodManager *EigenPodManagerTransactorSession) SetDenebForkTimestamp(newDenebForkTimestamp uint64) (*types.Transaction, error) { + return _EigenPodManager.Contract.SetDenebForkTimestamp(&_EigenPodManager.TransactOpts, newDenebForkTimestamp) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_EigenPodManager *EigenPodManagerTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _EigenPodManager.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_EigenPodManager *EigenPodManagerSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _EigenPodManager.Contract.SetPauserRegistry(&_EigenPodManager.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_EigenPodManager *EigenPodManagerTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _EigenPodManager.Contract.SetPauserRegistry(&_EigenPodManager.TransactOpts, newPauserRegistry) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_EigenPodManager *EigenPodManagerTransactor) Stake(opts *bind.TransactOpts, pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _EigenPodManager.contract.Transact(opts, "stake", pubkey, signature, depositDataRoot) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_EigenPodManager *EigenPodManagerSession) Stake(pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _EigenPodManager.Contract.Stake(&_EigenPodManager.TransactOpts, pubkey, signature, depositDataRoot) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_EigenPodManager *EigenPodManagerTransactorSession) Stake(pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _EigenPodManager.Contract.Stake(&_EigenPodManager.TransactOpts, pubkey, signature, depositDataRoot) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_EigenPodManager *EigenPodManagerTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _EigenPodManager.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_EigenPodManager *EigenPodManagerSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _EigenPodManager.Contract.TransferOwnership(&_EigenPodManager.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_EigenPodManager *EigenPodManagerTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _EigenPodManager.Contract.TransferOwnership(&_EigenPodManager.TransactOpts, newOwner) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_EigenPodManager *EigenPodManagerTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManager.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_EigenPodManager *EigenPodManagerSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManager.Contract.Unpause(&_EigenPodManager.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_EigenPodManager *EigenPodManagerTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManager.Contract.Unpause(&_EigenPodManager.TransactOpts, newPausedStatus) +} + +// UpdateBeaconChainOracle is a paid mutator transaction binding the contract method 0xc1de3aef. +// +// Solidity: function updateBeaconChainOracle(address newBeaconChainOracle) returns() +func (_EigenPodManager *EigenPodManagerTransactor) UpdateBeaconChainOracle(opts *bind.TransactOpts, newBeaconChainOracle common.Address) (*types.Transaction, error) { + return _EigenPodManager.contract.Transact(opts, "updateBeaconChainOracle", newBeaconChainOracle) +} + +// UpdateBeaconChainOracle is a paid mutator transaction binding the contract method 0xc1de3aef. +// +// Solidity: function updateBeaconChainOracle(address newBeaconChainOracle) returns() +func (_EigenPodManager *EigenPodManagerSession) UpdateBeaconChainOracle(newBeaconChainOracle common.Address) (*types.Transaction, error) { + return _EigenPodManager.Contract.UpdateBeaconChainOracle(&_EigenPodManager.TransactOpts, newBeaconChainOracle) +} + +// UpdateBeaconChainOracle is a paid mutator transaction binding the contract method 0xc1de3aef. +// +// Solidity: function updateBeaconChainOracle(address newBeaconChainOracle) returns() +func (_EigenPodManager *EigenPodManagerTransactorSession) UpdateBeaconChainOracle(newBeaconChainOracle common.Address) (*types.Transaction, error) { + return _EigenPodManager.Contract.UpdateBeaconChainOracle(&_EigenPodManager.TransactOpts, newBeaconChainOracle) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0x387b1300. +// +// Solidity: function withdrawSharesAsTokens(address podOwner, address destination, uint256 shares) returns() +func (_EigenPodManager *EigenPodManagerTransactor) WithdrawSharesAsTokens(opts *bind.TransactOpts, podOwner common.Address, destination common.Address, shares *big.Int) (*types.Transaction, error) { + return _EigenPodManager.contract.Transact(opts, "withdrawSharesAsTokens", podOwner, destination, shares) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0x387b1300. +// +// Solidity: function withdrawSharesAsTokens(address podOwner, address destination, uint256 shares) returns() +func (_EigenPodManager *EigenPodManagerSession) WithdrawSharesAsTokens(podOwner common.Address, destination common.Address, shares *big.Int) (*types.Transaction, error) { + return _EigenPodManager.Contract.WithdrawSharesAsTokens(&_EigenPodManager.TransactOpts, podOwner, destination, shares) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0x387b1300. +// +// Solidity: function withdrawSharesAsTokens(address podOwner, address destination, uint256 shares) returns() +func (_EigenPodManager *EigenPodManagerTransactorSession) WithdrawSharesAsTokens(podOwner common.Address, destination common.Address, shares *big.Int) (*types.Transaction, error) { + return _EigenPodManager.Contract.WithdrawSharesAsTokens(&_EigenPodManager.TransactOpts, podOwner, destination, shares) +} + +// EigenPodManagerBeaconChainETHDepositedIterator is returned from FilterBeaconChainETHDeposited and is used to iterate over the raw logs and unpacked data for BeaconChainETHDeposited events raised by the EigenPodManager contract. +type EigenPodManagerBeaconChainETHDepositedIterator struct { + Event *EigenPodManagerBeaconChainETHDeposited // 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 *EigenPodManagerBeaconChainETHDepositedIterator) 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(EigenPodManagerBeaconChainETHDeposited) + 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(EigenPodManagerBeaconChainETHDeposited) + 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 *EigenPodManagerBeaconChainETHDepositedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerBeaconChainETHDepositedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerBeaconChainETHDeposited represents a BeaconChainETHDeposited event raised by the EigenPodManager contract. +type EigenPodManagerBeaconChainETHDeposited struct { + PodOwner common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBeaconChainETHDeposited is a free log retrieval operation binding the contract event 0x35a85cabc603f48abb2b71d9fbd8adea7c449d7f0be900ae7a2986ea369c3d0d. +// +// Solidity: event BeaconChainETHDeposited(address indexed podOwner, uint256 amount) +func (_EigenPodManager *EigenPodManagerFilterer) FilterBeaconChainETHDeposited(opts *bind.FilterOpts, podOwner []common.Address) (*EigenPodManagerBeaconChainETHDepositedIterator, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManager.contract.FilterLogs(opts, "BeaconChainETHDeposited", podOwnerRule) + if err != nil { + return nil, err + } + return &EigenPodManagerBeaconChainETHDepositedIterator{contract: _EigenPodManager.contract, event: "BeaconChainETHDeposited", logs: logs, sub: sub}, nil +} + +// WatchBeaconChainETHDeposited is a free log subscription operation binding the contract event 0x35a85cabc603f48abb2b71d9fbd8adea7c449d7f0be900ae7a2986ea369c3d0d. +// +// Solidity: event BeaconChainETHDeposited(address indexed podOwner, uint256 amount) +func (_EigenPodManager *EigenPodManagerFilterer) WatchBeaconChainETHDeposited(opts *bind.WatchOpts, sink chan<- *EigenPodManagerBeaconChainETHDeposited, podOwner []common.Address) (event.Subscription, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManager.contract.WatchLogs(opts, "BeaconChainETHDeposited", podOwnerRule) + 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(EigenPodManagerBeaconChainETHDeposited) + if err := _EigenPodManager.contract.UnpackLog(event, "BeaconChainETHDeposited", 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 +} + +// ParseBeaconChainETHDeposited is a log parse operation binding the contract event 0x35a85cabc603f48abb2b71d9fbd8adea7c449d7f0be900ae7a2986ea369c3d0d. +// +// Solidity: event BeaconChainETHDeposited(address indexed podOwner, uint256 amount) +func (_EigenPodManager *EigenPodManagerFilterer) ParseBeaconChainETHDeposited(log types.Log) (*EigenPodManagerBeaconChainETHDeposited, error) { + event := new(EigenPodManagerBeaconChainETHDeposited) + if err := _EigenPodManager.contract.UnpackLog(event, "BeaconChainETHDeposited", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerBeaconChainETHWithdrawalCompletedIterator is returned from FilterBeaconChainETHWithdrawalCompleted and is used to iterate over the raw logs and unpacked data for BeaconChainETHWithdrawalCompleted events raised by the EigenPodManager contract. +type EigenPodManagerBeaconChainETHWithdrawalCompletedIterator struct { + Event *EigenPodManagerBeaconChainETHWithdrawalCompleted // 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 *EigenPodManagerBeaconChainETHWithdrawalCompletedIterator) 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(EigenPodManagerBeaconChainETHWithdrawalCompleted) + 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(EigenPodManagerBeaconChainETHWithdrawalCompleted) + 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 *EigenPodManagerBeaconChainETHWithdrawalCompletedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerBeaconChainETHWithdrawalCompletedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerBeaconChainETHWithdrawalCompleted represents a BeaconChainETHWithdrawalCompleted event raised by the EigenPodManager contract. +type EigenPodManagerBeaconChainETHWithdrawalCompleted struct { + PodOwner common.Address + Shares *big.Int + Nonce *big.Int + DelegatedAddress common.Address + Withdrawer common.Address + WithdrawalRoot [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBeaconChainETHWithdrawalCompleted is a free log retrieval operation binding the contract event 0xa6bab1d55a361fcea2eee2bc9491e4f01e6cf333df03c9c4f2c144466429f7d6. +// +// Solidity: event BeaconChainETHWithdrawalCompleted(address indexed podOwner, uint256 shares, uint96 nonce, address delegatedAddress, address withdrawer, bytes32 withdrawalRoot) +func (_EigenPodManager *EigenPodManagerFilterer) FilterBeaconChainETHWithdrawalCompleted(opts *bind.FilterOpts, podOwner []common.Address) (*EigenPodManagerBeaconChainETHWithdrawalCompletedIterator, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManager.contract.FilterLogs(opts, "BeaconChainETHWithdrawalCompleted", podOwnerRule) + if err != nil { + return nil, err + } + return &EigenPodManagerBeaconChainETHWithdrawalCompletedIterator{contract: _EigenPodManager.contract, event: "BeaconChainETHWithdrawalCompleted", logs: logs, sub: sub}, nil +} + +// WatchBeaconChainETHWithdrawalCompleted is a free log subscription operation binding the contract event 0xa6bab1d55a361fcea2eee2bc9491e4f01e6cf333df03c9c4f2c144466429f7d6. +// +// Solidity: event BeaconChainETHWithdrawalCompleted(address indexed podOwner, uint256 shares, uint96 nonce, address delegatedAddress, address withdrawer, bytes32 withdrawalRoot) +func (_EigenPodManager *EigenPodManagerFilterer) WatchBeaconChainETHWithdrawalCompleted(opts *bind.WatchOpts, sink chan<- *EigenPodManagerBeaconChainETHWithdrawalCompleted, podOwner []common.Address) (event.Subscription, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManager.contract.WatchLogs(opts, "BeaconChainETHWithdrawalCompleted", podOwnerRule) + 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(EigenPodManagerBeaconChainETHWithdrawalCompleted) + if err := _EigenPodManager.contract.UnpackLog(event, "BeaconChainETHWithdrawalCompleted", 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 +} + +// ParseBeaconChainETHWithdrawalCompleted is a log parse operation binding the contract event 0xa6bab1d55a361fcea2eee2bc9491e4f01e6cf333df03c9c4f2c144466429f7d6. +// +// Solidity: event BeaconChainETHWithdrawalCompleted(address indexed podOwner, uint256 shares, uint96 nonce, address delegatedAddress, address withdrawer, bytes32 withdrawalRoot) +func (_EigenPodManager *EigenPodManagerFilterer) ParseBeaconChainETHWithdrawalCompleted(log types.Log) (*EigenPodManagerBeaconChainETHWithdrawalCompleted, error) { + event := new(EigenPodManagerBeaconChainETHWithdrawalCompleted) + if err := _EigenPodManager.contract.UnpackLog(event, "BeaconChainETHWithdrawalCompleted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerBeaconOracleUpdatedIterator is returned from FilterBeaconOracleUpdated and is used to iterate over the raw logs and unpacked data for BeaconOracleUpdated events raised by the EigenPodManager contract. +type EigenPodManagerBeaconOracleUpdatedIterator struct { + Event *EigenPodManagerBeaconOracleUpdated // 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 *EigenPodManagerBeaconOracleUpdatedIterator) 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(EigenPodManagerBeaconOracleUpdated) + 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(EigenPodManagerBeaconOracleUpdated) + 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 *EigenPodManagerBeaconOracleUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerBeaconOracleUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerBeaconOracleUpdated represents a BeaconOracleUpdated event raised by the EigenPodManager contract. +type EigenPodManagerBeaconOracleUpdated struct { + NewOracleAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBeaconOracleUpdated is a free log retrieval operation binding the contract event 0x08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f6. +// +// Solidity: event BeaconOracleUpdated(address indexed newOracleAddress) +func (_EigenPodManager *EigenPodManagerFilterer) FilterBeaconOracleUpdated(opts *bind.FilterOpts, newOracleAddress []common.Address) (*EigenPodManagerBeaconOracleUpdatedIterator, error) { + + var newOracleAddressRule []interface{} + for _, newOracleAddressItem := range newOracleAddress { + newOracleAddressRule = append(newOracleAddressRule, newOracleAddressItem) + } + + logs, sub, err := _EigenPodManager.contract.FilterLogs(opts, "BeaconOracleUpdated", newOracleAddressRule) + if err != nil { + return nil, err + } + return &EigenPodManagerBeaconOracleUpdatedIterator{contract: _EigenPodManager.contract, event: "BeaconOracleUpdated", logs: logs, sub: sub}, nil +} + +// WatchBeaconOracleUpdated is a free log subscription operation binding the contract event 0x08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f6. +// +// Solidity: event BeaconOracleUpdated(address indexed newOracleAddress) +func (_EigenPodManager *EigenPodManagerFilterer) WatchBeaconOracleUpdated(opts *bind.WatchOpts, sink chan<- *EigenPodManagerBeaconOracleUpdated, newOracleAddress []common.Address) (event.Subscription, error) { + + var newOracleAddressRule []interface{} + for _, newOracleAddressItem := range newOracleAddress { + newOracleAddressRule = append(newOracleAddressRule, newOracleAddressItem) + } + + logs, sub, err := _EigenPodManager.contract.WatchLogs(opts, "BeaconOracleUpdated", newOracleAddressRule) + 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(EigenPodManagerBeaconOracleUpdated) + if err := _EigenPodManager.contract.UnpackLog(event, "BeaconOracleUpdated", 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 +} + +// ParseBeaconOracleUpdated is a log parse operation binding the contract event 0x08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f6. +// +// Solidity: event BeaconOracleUpdated(address indexed newOracleAddress) +func (_EigenPodManager *EigenPodManagerFilterer) ParseBeaconOracleUpdated(log types.Log) (*EigenPodManagerBeaconOracleUpdated, error) { + event := new(EigenPodManagerBeaconOracleUpdated) + if err := _EigenPodManager.contract.UnpackLog(event, "BeaconOracleUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerDenebForkTimestampUpdatedIterator is returned from FilterDenebForkTimestampUpdated and is used to iterate over the raw logs and unpacked data for DenebForkTimestampUpdated events raised by the EigenPodManager contract. +type EigenPodManagerDenebForkTimestampUpdatedIterator struct { + Event *EigenPodManagerDenebForkTimestampUpdated // 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 *EigenPodManagerDenebForkTimestampUpdatedIterator) 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(EigenPodManagerDenebForkTimestampUpdated) + 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(EigenPodManagerDenebForkTimestampUpdated) + 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 *EigenPodManagerDenebForkTimestampUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerDenebForkTimestampUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerDenebForkTimestampUpdated represents a DenebForkTimestampUpdated event raised by the EigenPodManager contract. +type EigenPodManagerDenebForkTimestampUpdated struct { + NewValue uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDenebForkTimestampUpdated is a free log retrieval operation binding the contract event 0x19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db. +// +// Solidity: event DenebForkTimestampUpdated(uint64 newValue) +func (_EigenPodManager *EigenPodManagerFilterer) FilterDenebForkTimestampUpdated(opts *bind.FilterOpts) (*EigenPodManagerDenebForkTimestampUpdatedIterator, error) { + + logs, sub, err := _EigenPodManager.contract.FilterLogs(opts, "DenebForkTimestampUpdated") + if err != nil { + return nil, err + } + return &EigenPodManagerDenebForkTimestampUpdatedIterator{contract: _EigenPodManager.contract, event: "DenebForkTimestampUpdated", logs: logs, sub: sub}, nil +} + +// WatchDenebForkTimestampUpdated is a free log subscription operation binding the contract event 0x19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db. +// +// Solidity: event DenebForkTimestampUpdated(uint64 newValue) +func (_EigenPodManager *EigenPodManagerFilterer) WatchDenebForkTimestampUpdated(opts *bind.WatchOpts, sink chan<- *EigenPodManagerDenebForkTimestampUpdated) (event.Subscription, error) { + + logs, sub, err := _EigenPodManager.contract.WatchLogs(opts, "DenebForkTimestampUpdated") + 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(EigenPodManagerDenebForkTimestampUpdated) + if err := _EigenPodManager.contract.UnpackLog(event, "DenebForkTimestampUpdated", 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 +} + +// ParseDenebForkTimestampUpdated is a log parse operation binding the contract event 0x19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db. +// +// Solidity: event DenebForkTimestampUpdated(uint64 newValue) +func (_EigenPodManager *EigenPodManagerFilterer) ParseDenebForkTimestampUpdated(log types.Log) (*EigenPodManagerDenebForkTimestampUpdated, error) { + event := new(EigenPodManagerDenebForkTimestampUpdated) + if err := _EigenPodManager.contract.UnpackLog(event, "DenebForkTimestampUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the EigenPodManager contract. +type EigenPodManagerInitializedIterator struct { + Event *EigenPodManagerInitialized // 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 *EigenPodManagerInitializedIterator) 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(EigenPodManagerInitialized) + 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(EigenPodManagerInitialized) + 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 *EigenPodManagerInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerInitialized represents a Initialized event raised by the EigenPodManager contract. +type EigenPodManagerInitialized 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 (_EigenPodManager *EigenPodManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*EigenPodManagerInitializedIterator, error) { + + logs, sub, err := _EigenPodManager.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &EigenPodManagerInitializedIterator{contract: _EigenPodManager.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 (_EigenPodManager *EigenPodManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *EigenPodManagerInitialized) (event.Subscription, error) { + + logs, sub, err := _EigenPodManager.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(EigenPodManagerInitialized) + if err := _EigenPodManager.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 (_EigenPodManager *EigenPodManagerFilterer) ParseInitialized(log types.Log) (*EigenPodManagerInitialized, error) { + event := new(EigenPodManagerInitialized) + if err := _EigenPodManager.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the EigenPodManager contract. +type EigenPodManagerOwnershipTransferredIterator struct { + Event *EigenPodManagerOwnershipTransferred // 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 *EigenPodManagerOwnershipTransferredIterator) 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(EigenPodManagerOwnershipTransferred) + 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(EigenPodManagerOwnershipTransferred) + 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 *EigenPodManagerOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerOwnershipTransferred represents a OwnershipTransferred event raised by the EigenPodManager contract. +type EigenPodManagerOwnershipTransferred 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 (_EigenPodManager *EigenPodManagerFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*EigenPodManagerOwnershipTransferredIterator, 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 := _EigenPodManager.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &EigenPodManagerOwnershipTransferredIterator{contract: _EigenPodManager.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 (_EigenPodManager *EigenPodManagerFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *EigenPodManagerOwnershipTransferred, 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 := _EigenPodManager.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(EigenPodManagerOwnershipTransferred) + if err := _EigenPodManager.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 (_EigenPodManager *EigenPodManagerFilterer) ParseOwnershipTransferred(log types.Log) (*EigenPodManagerOwnershipTransferred, error) { + event := new(EigenPodManagerOwnershipTransferred) + if err := _EigenPodManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the EigenPodManager contract. +type EigenPodManagerPausedIterator struct { + Event *EigenPodManagerPaused // 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 *EigenPodManagerPausedIterator) 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(EigenPodManagerPaused) + 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(EigenPodManagerPaused) + 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 *EigenPodManagerPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerPaused represents a Paused event raised by the EigenPodManager contract. +type EigenPodManagerPaused 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 (_EigenPodManager *EigenPodManagerFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*EigenPodManagerPausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _EigenPodManager.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &EigenPodManagerPausedIterator{contract: _EigenPodManager.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 (_EigenPodManager *EigenPodManagerFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *EigenPodManagerPaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _EigenPodManager.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(EigenPodManagerPaused) + if err := _EigenPodManager.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 (_EigenPodManager *EigenPodManagerFilterer) ParsePaused(log types.Log) (*EigenPodManagerPaused, error) { + event := new(EigenPodManagerPaused) + if err := _EigenPodManager.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the EigenPodManager contract. +type EigenPodManagerPauserRegistrySetIterator struct { + Event *EigenPodManagerPauserRegistrySet // 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 *EigenPodManagerPauserRegistrySetIterator) 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(EigenPodManagerPauserRegistrySet) + 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(EigenPodManagerPauserRegistrySet) + 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 *EigenPodManagerPauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerPauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerPauserRegistrySet represents a PauserRegistrySet event raised by the EigenPodManager contract. +type EigenPodManagerPauserRegistrySet 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 (_EigenPodManager *EigenPodManagerFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*EigenPodManagerPauserRegistrySetIterator, error) { + + logs, sub, err := _EigenPodManager.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &EigenPodManagerPauserRegistrySetIterator{contract: _EigenPodManager.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 (_EigenPodManager *EigenPodManagerFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *EigenPodManagerPauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _EigenPodManager.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(EigenPodManagerPauserRegistrySet) + if err := _EigenPodManager.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 (_EigenPodManager *EigenPodManagerFilterer) ParsePauserRegistrySet(log types.Log) (*EigenPodManagerPauserRegistrySet, error) { + event := new(EigenPodManagerPauserRegistrySet) + if err := _EigenPodManager.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerPodDeployedIterator is returned from FilterPodDeployed and is used to iterate over the raw logs and unpacked data for PodDeployed events raised by the EigenPodManager contract. +type EigenPodManagerPodDeployedIterator struct { + Event *EigenPodManagerPodDeployed // 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 *EigenPodManagerPodDeployedIterator) 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(EigenPodManagerPodDeployed) + 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(EigenPodManagerPodDeployed) + 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 *EigenPodManagerPodDeployedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerPodDeployedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerPodDeployed represents a PodDeployed event raised by the EigenPodManager contract. +type EigenPodManagerPodDeployed struct { + EigenPod common.Address + PodOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPodDeployed is a free log retrieval operation binding the contract event 0x21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a. +// +// Solidity: event PodDeployed(address indexed eigenPod, address indexed podOwner) +func (_EigenPodManager *EigenPodManagerFilterer) FilterPodDeployed(opts *bind.FilterOpts, eigenPod []common.Address, podOwner []common.Address) (*EigenPodManagerPodDeployedIterator, error) { + + var eigenPodRule []interface{} + for _, eigenPodItem := range eigenPod { + eigenPodRule = append(eigenPodRule, eigenPodItem) + } + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManager.contract.FilterLogs(opts, "PodDeployed", eigenPodRule, podOwnerRule) + if err != nil { + return nil, err + } + return &EigenPodManagerPodDeployedIterator{contract: _EigenPodManager.contract, event: "PodDeployed", logs: logs, sub: sub}, nil +} + +// WatchPodDeployed is a free log subscription operation binding the contract event 0x21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a. +// +// Solidity: event PodDeployed(address indexed eigenPod, address indexed podOwner) +func (_EigenPodManager *EigenPodManagerFilterer) WatchPodDeployed(opts *bind.WatchOpts, sink chan<- *EigenPodManagerPodDeployed, eigenPod []common.Address, podOwner []common.Address) (event.Subscription, error) { + + var eigenPodRule []interface{} + for _, eigenPodItem := range eigenPod { + eigenPodRule = append(eigenPodRule, eigenPodItem) + } + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManager.contract.WatchLogs(opts, "PodDeployed", eigenPodRule, podOwnerRule) + 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(EigenPodManagerPodDeployed) + if err := _EigenPodManager.contract.UnpackLog(event, "PodDeployed", 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 +} + +// ParsePodDeployed is a log parse operation binding the contract event 0x21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a. +// +// Solidity: event PodDeployed(address indexed eigenPod, address indexed podOwner) +func (_EigenPodManager *EigenPodManagerFilterer) ParsePodDeployed(log types.Log) (*EigenPodManagerPodDeployed, error) { + event := new(EigenPodManagerPodDeployed) + if err := _EigenPodManager.contract.UnpackLog(event, "PodDeployed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerPodSharesUpdatedIterator is returned from FilterPodSharesUpdated and is used to iterate over the raw logs and unpacked data for PodSharesUpdated events raised by the EigenPodManager contract. +type EigenPodManagerPodSharesUpdatedIterator struct { + Event *EigenPodManagerPodSharesUpdated // 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 *EigenPodManagerPodSharesUpdatedIterator) 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(EigenPodManagerPodSharesUpdated) + 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(EigenPodManagerPodSharesUpdated) + 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 *EigenPodManagerPodSharesUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerPodSharesUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerPodSharesUpdated represents a PodSharesUpdated event raised by the EigenPodManager contract. +type EigenPodManagerPodSharesUpdated struct { + PodOwner common.Address + SharesDelta *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPodSharesUpdated is a free log retrieval operation binding the contract event 0x4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193. +// +// Solidity: event PodSharesUpdated(address indexed podOwner, int256 sharesDelta) +func (_EigenPodManager *EigenPodManagerFilterer) FilterPodSharesUpdated(opts *bind.FilterOpts, podOwner []common.Address) (*EigenPodManagerPodSharesUpdatedIterator, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManager.contract.FilterLogs(opts, "PodSharesUpdated", podOwnerRule) + if err != nil { + return nil, err + } + return &EigenPodManagerPodSharesUpdatedIterator{contract: _EigenPodManager.contract, event: "PodSharesUpdated", logs: logs, sub: sub}, nil +} + +// WatchPodSharesUpdated is a free log subscription operation binding the contract event 0x4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193. +// +// Solidity: event PodSharesUpdated(address indexed podOwner, int256 sharesDelta) +func (_EigenPodManager *EigenPodManagerFilterer) WatchPodSharesUpdated(opts *bind.WatchOpts, sink chan<- *EigenPodManagerPodSharesUpdated, podOwner []common.Address) (event.Subscription, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManager.contract.WatchLogs(opts, "PodSharesUpdated", podOwnerRule) + 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(EigenPodManagerPodSharesUpdated) + if err := _EigenPodManager.contract.UnpackLog(event, "PodSharesUpdated", 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 +} + +// ParsePodSharesUpdated is a log parse operation binding the contract event 0x4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193. +// +// Solidity: event PodSharesUpdated(address indexed podOwner, int256 sharesDelta) +func (_EigenPodManager *EigenPodManagerFilterer) ParsePodSharesUpdated(log types.Log) (*EigenPodManagerPodSharesUpdated, error) { + event := new(EigenPodManagerPodSharesUpdated) + if err := _EigenPodManager.contract.UnpackLog(event, "PodSharesUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the EigenPodManager contract. +type EigenPodManagerUnpausedIterator struct { + Event *EigenPodManagerUnpaused // 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 *EigenPodManagerUnpausedIterator) 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(EigenPodManagerUnpaused) + 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(EigenPodManagerUnpaused) + 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 *EigenPodManagerUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerUnpaused represents a Unpaused event raised by the EigenPodManager contract. +type EigenPodManagerUnpaused 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 (_EigenPodManager *EigenPodManagerFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*EigenPodManagerUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _EigenPodManager.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &EigenPodManagerUnpausedIterator{contract: _EigenPodManager.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 (_EigenPodManager *EigenPodManagerFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *EigenPodManagerUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _EigenPodManager.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(EigenPodManagerUnpaused) + if err := _EigenPodManager.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 (_EigenPodManager *EigenPodManagerFilterer) ParseUnpaused(log types.Log) (*EigenPodManagerUnpaused, error) { + event := new(EigenPodManagerUnpaused) + if err := _EigenPodManager.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/EigenPodManager/tmp.abi b/pkg/bindings/EigenPodManager/tmp.abi new file mode 100644 index 000000000..63d7a734d --- /dev/null +++ b/pkg/bindings/EigenPodManager/tmp.abi @@ -0,0 +1,757 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_ethPOS", + "type": "address", + "internalType": "contract IETHPOSDeposit" + }, + { + "name": "_eigenPodBeacon", + "type": "address", + "internalType": "contract IBeacon" + }, + { + "name": "_strategyManager", + "type": "address", + "internalType": "contract IStrategyManager" + }, + { + "name": "_slasher", + "type": "address", + "internalType": "contract ISlasher" + }, + { + "name": "_delegationManager", + "type": "address", + "internalType": "contract IDelegationManager" + } + ], + "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": "contract IStrategy" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "beaconChainOracle", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IBeaconChainOracle" + } + ], + "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": "contract IDelegationManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "denebForkTimestamp", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eigenPodBeacon", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IBeacon" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ethPOS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IETHPOSDeposit" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBlockRootAtTimestamp", + "inputs": [ + { + "name": "timestamp", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPod", + "inputs": [ + { + "name": "podOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IEigenPod" + } + ], + "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": "_beaconChainOracle", + "type": "address", + "internalType": "contract IBeaconChainOracle" + }, + { + "name": "initialOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "_pauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + }, + { + "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": "contract IEigenPod" + } + ], + "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": "contract IPauserRegistry" + } + ], + "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": "setDenebForkTimestamp", + "inputs": [ + { + "name": "newDenebForkTimestamp", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPauserRegistry", + "inputs": [ + { + "name": "newPauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "slasher", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ISlasher" + } + ], + "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": "contract IStrategyManager" + } + ], + "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": "updateBeaconChainOracle", + "inputs": [ + { + "name": "newBeaconChainOracle", + "type": "address", + "internalType": "contract IBeaconChainOracle" + } + ], + "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": "BeaconOracleUpdated", + "inputs": [ + { + "name": "newOracleAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DenebForkTimestampUpdated", + "inputs": [ + { + "name": "newValue", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "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": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "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 + } +] diff --git a/pkg/bindings/EigenPodManager/tmp.bin b/pkg/bindings/EigenPodManager/tmp.bin new file mode 100644 index 000000000..67092c609 --- /dev/null +++ b/pkg/bindings/EigenPodManager/tmp.bin @@ -0,0 +1 @@ +0x6101206040523480156200001257600080fd5b50604051620034e7380380620034e783398101604081905262000035916200014b565b6001600160a01b0380861660805280851660a05280841660c05280831660e0528116610100526200006562000070565b5050505050620001cb565b600054610100900460ff1615620000dd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000130576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014857600080fd5b50565b600080600080600060a086880312156200016457600080fd5b8551620001718162000132565b6020870151909550620001848162000132565b6040870151909450620001978162000132565b6060870151909350620001aa8162000132565b6080870151909250620001bd8162000132565b809150509295509295909350565b60805160a05160c05160e051610100516132a66200024160003960008181610636015281816106e001528181610b0e015281816113e70152818161187c015261196c01526000610542015260006102e601526000818161027a01528181611366015261203a0152600061041401526132a66000f3fe6080604052600436106101ee5760003560e01c80638da5cb5b1161010d578063c052bd61116100a0578063d1c64cc91161006f578063d1c64cc914610604578063ea4d3c9b14610624578063f2fde38b14610658578063f6848d2414610678578063fabc1cbc146106b357600080fd5b8063c052bd6114610584578063c1de3aef146105a4578063c2c51c40146105c4578063cf756fdf146105e457600080fd5b8063a38406a3116100dc578063a38406a3146104fa578063a6a509be1461051a578063b134427114610530578063beffbb891461056457600080fd5b80638da5cb5b1461046b5780639104c319146104895780639b4e4634146104b15780639ba06275146104c457600080fd5b8063595c6a6711610185578063715018a611610154578063715018a6146103ed57806374cdd7981461040257806384d8106214610436578063886f11951461044b57600080fd5b8063595c6a67146103565780635ac86ab71461036b5780635c975abb146103ab57806360f4062b146103c057600080fd5b8063387b1300116101c1578063387b1300146102b457806339b70e38146102d457806344e71c8014610308578063463db0381461033657600080fd5b80630e81073c146101f357806310d67a2f14610226578063136439dd14610248578063292b7b2b14610268575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612406565b6106d3565b6040519081526020015b60405180910390f35b34801561023257600080fd5b50610246610241366004612432565b610911565b005b34801561025457600080fd5b5061024661026336600461244f565b6109c4565b34801561027457600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161021d565b3480156102c057600080fd5b506102466102cf366004612468565b610b03565b3480156102e057600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561031457600080fd5b5061031d610ea1565b60405167ffffffffffffffff909116815260200161021d565b34801561034257600080fd5b506102466103513660046124a9565b610eca565b34801561036257600080fd5b50610246611056565b34801561037757600080fd5b5061039b6103863660046124d3565b606654600160ff9092169190911b9081161490565b604051901515815260200161021d565b3480156103b757600080fd5b50606654610213565b3480156103cc57600080fd5b506102136103db366004612432565b609b6020526000908152604090205481565b3480156103f957600080fd5b5061024661111d565b34801561040e57600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044257600080fd5b5061029c611131565b34801561045757600080fd5b5060655461029c906001600160a01b031681565b34801561047757600080fd5b506033546001600160a01b031661029c565b34801561049557600080fd5b5061029c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102466104bf36600461253f565b61121b565b3480156104d057600080fd5b5061029c6104df366004612432565b6098602052600090815260409020546001600160a01b031681565b34801561050657600080fd5b5061029c610515366004612432565b61130a565b34801561052657600080fd5b5061021360995481565b34801561053c57600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561057057600080fd5b5061024661057f366004612406565b6113dc565b34801561059057600080fd5b5060975461029c906001600160a01b031681565b3480156105b057600080fd5b506102466105bf366004612432565b6115f3565b3480156105d057600080fd5b506102466105df366004612406565b611604565b3480156105f057600080fd5b506102466105ff3660046125b3565b611a07565b34801561061057600080fd5b5061021361061f3660046124a9565b611b30565b34801561063057600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066457600080fd5b50610246610673366004612432565b611c3b565b34801561068457600080fd5b5061039b610693366004612432565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156106bf57600080fd5b506102466106ce36600461244f565b611cb1565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107265760405162461bcd60e51b815260040161071d90612604565b60405180910390fd5b6001600160a01b0383166107a25760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f2061646472657373000000000000606482015260840161071d565b60008212156108105760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b606482015260840161071d565b61081e633b9aca0083612678565b156108915760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e74000000606482015260840161071d565b6001600160a01b0383166000908152609b6020526040812054906108b584836126a2565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020613231833981519152906108f49087815260200190565b60405180910390a26109068282611e0d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098891906126e3565b6001600160a01b0316336001600160a01b0316146109b85760405162461bcd60e51b815260040161071d90612700565b6109c181611e4f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a30919061274a565b610a4c5760405162461bcd60e51b815260040161071d9061276c565b60665481811614610ac55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b4b5760405162461bcd60e51b815260040161071d90612604565b6001600160a01b038316610bc55760405162461bcd60e51b8152602060048201526047602482015260008051602061325183398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a40161071d565b6001600160a01b038216610c425760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a40161071d565b6000811215610cb15760405162461bcd60e51b8152602060048201526041602482015260008051602061325183398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a40161071d565b610cbf633b9aca0082612678565b15610d335760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a40161071d565b6001600160a01b0383166000908152609b602052604081205490811215610e26576000610d5f826127b4565b905080831115610dc4576001600160a01b0385166000908152609b6020526040812055610d8c81846127d1565b9250846001600160a01b031660008051602061323183398151915282604051610db791815260200190565b60405180910390a2610e24565b6001600160a01b0385166000908152609b602052604081208054859290610dec9084906126a2565b90915550506040518381526001600160a01b038616906000805160206132318339815191529060200160405180910390a25050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b5050505050505050565b609c5460009067ffffffffffffffff1680610ec55767ffffffffffffffff91505090565b919050565b610ed2611f46565b67ffffffffffffffff8116610f645760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f7420736574206e657744656e6562466f726b546960648201526b06d657374616d7020746f20360a41b608482015260a40161071d565b609c5467ffffffffffffffff16156110005760405162461bcd60e51b815260206004820152605360248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f74207365742064656e6562466f726b54696d657360648201527274616d70206d6f7265207468616e206f6e636560681b608482015260a40161071d565b609c805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527f19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db9060200160405180910390a150565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c2919061274a565b6110de5760405162461bcd60e51b815260040161071d9061276c565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611125611f46565b61112f6000611fa0565b565b6066546000908190600190811614156111885760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03161561120a5760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b606482015260840161071d565b6000611214611ff2565b9250505090565b606654600090600190811614156112705760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03168061129957611296611ff2565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906112cf908b908b908b908b908b90600401612811565b6000604051808303818588803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061090b576113d5836001600160a01b031660001b60405180610940016040528061090e815260200161292361090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f19818403018152908290526113ba9291602001612886565b60405160208183030381529060405280519060200120612157565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114245760405162461bcd60e51b815260040161071d90612604565b600081121561149b5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e65676174697665000000000000000000606482015260840161071d565b6114a9633b9aca0082612678565b1561151e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e74606482015260840161071d565b6001600160a01b0382166000908152609b602052604081205461154290839061289b565b905060008112156115d35760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a40161071d565b6001600160a01b039092166000908152609b602052604090209190915550565b6115fb611f46565b6109c1816121b3565b6001600160a01b03808316600090815260986020526040902054839116331461167f5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b606482015260840161071d565b600260c95414156116d25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071d565b600260c9556001600160a01b03831661176e5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a40161071d565b61177c633b9aca00836128da565b156118155760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a40161071d565b6001600160a01b0383166000908152609b60205260408120549061183984836126a2565b6001600160a01b0386166000908152609b602052604081208290559091506118618383611e0d565b905080156119c957600081121561192c576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118c0856127b4565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561190f57600080fd5b505af1158015611923573d6000803e3d6000fd5b505050506119c9565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020613231833981519152866040516119f291815260200190565b60405180910390a25050600160c95550505050565b600054610100900460ff1615808015611a275750600054600160ff909116105b80611a415750303b158015611a41575060005460ff166001145b611aa45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071d565b6000805460ff191660011790558015611ac7576000805461ff0019166101001790555b611ad0856121b3565b611ad984611fa0565b611ae383836121fd565b8015611b29576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa158015611b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bab91906128ee565b90508061090b5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a40161071d565b611c43611f46565b6001600160a01b038116611ca85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161071d565b6109c181611fa0565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2891906126e3565b6001600160a01b0316336001600160a01b031614611d585760405162461bcd60e51b815260040161071d90612700565b606654198119606654191614611dd65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610af8565b6000808313611e2d5760008213611e265750600061090b565b508061090b565b60008213611e4557611e3e836127b4565b905061090b565b611e3e838361289b565b6001600160a01b038116611edd5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161071d565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461112f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060996000815461200390612907565b9091555060408051610940810190915261090e8082526000916120a291839133916129236020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f198184030181529082905261208e9291602001612886565b6040516020818303038152906040526122e7565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156120e657600080fd5b505af11580156120fa573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000906113d5565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b031615801561221e57506001600160a01b03821615155b6122a05760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26122e382611e4f565b5050565b6000808447101561233a5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161071d565b82516123885760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161071d565b8383516020850187f590506001600160a01b0381166123e95760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161071d565b949350505050565b6001600160a01b03811681146109c157600080fd5b6000806040838503121561241957600080fd5b8235612424816123f1565b946020939093013593505050565b60006020828403121561244457600080fd5b81356113d5816123f1565b60006020828403121561246157600080fd5b5035919050565b60008060006060848603121561247d57600080fd5b8335612488816123f1565b92506020840135612498816123f1565b929592945050506040919091013590565b6000602082840312156124bb57600080fd5b813567ffffffffffffffff811681146113d557600080fd5b6000602082840312156124e557600080fd5b813560ff811681146113d557600080fd5b60008083601f84011261250857600080fd5b50813567ffffffffffffffff81111561252057600080fd5b60208301915083602082850101111561253857600080fd5b9250929050565b60008060008060006060868803121561255757600080fd5b853567ffffffffffffffff8082111561256f57600080fd5b61257b89838a016124f6565b9097509550602088013591508082111561259457600080fd5b506125a1888289016124f6565b96999598509660400135949350505050565b600080600080608085870312156125c957600080fd5b84356125d4816123f1565b935060208501356125e4816123f1565b925060408501356125f4816123f1565b9396929550929360600135925050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261268757612687612662565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b03849003851316156126c4576126c461268c565b600160ff1b83900384128116156126dd576126dd61268c565b50500190565b6000602082840312156126f557600080fd5b81516113d5816123f1565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561275c57600080fd5b815180151581146113d557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b8214156127ca576127ca61268c565b5060000390565b6000828210156127e3576127e361268c565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006128256060830187896127e8565b82810360208401526128388186886127e8565b9150508260408301529695505050505050565b6000815160005b8181101561286c5760208185018101518683015201612852565b8181111561287b576000828601525b509290920192915050565b60006123e9612895838661284b565b8461284b565b60008083128015600160ff1b8501841216156128b9576128b961268c565b6001600160ff1b03840183138116156128d4576128d461268c565b50500390565b6000826128e9576128e9612662565b500790565b60006020828403121561290057600080fd5b5051919050565b600060001982141561291b5761291b61268c565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220b588a2f2d4cb671a90072515016931b16cdf94a0a4ced664f6e2884a1b1a5d8164736f6c634300080c0033 diff --git a/pkg/bindings/EigenPodManagerStorage/binding.go b/pkg/bindings/EigenPodManagerStorage/binding.go new file mode 100644 index 000000000..928919851 --- /dev/null +++ b/pkg/bindings/EigenPodManagerStorage/binding.go @@ -0,0 +1,2255 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package EigenPodManagerStorage + +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 +) + +// 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\":\"beaconChainOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeaconChainOracle\"}],\"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\":\"denebForkTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"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\":\"getBlockRootAtTimestamp\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"setDenebForkTimestamp\",\"inputs\":[{\"name\":\"newDenebForkTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"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\":\"updateBeaconChainOracle\",\"inputs\":[{\"name\":\"newBeaconChainOracle\",\"type\":\"address\",\"internalType\":\"contractIBeaconChainOracle\"}],\"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\":\"BeaconOracleUpdated\",\"inputs\":[{\"name\":\"newOracleAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DenebForkTimestampUpdated\",\"inputs\":[{\"name\":\"newValue\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"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}]", +} + +// EigenPodManagerStorageABI is the input ABI used to generate the binding from. +// Deprecated: Use EigenPodManagerStorageMetaData.ABI instead. +var EigenPodManagerStorageABI = EigenPodManagerStorageMetaData.ABI + +// EigenPodManagerStorage is an auto generated Go binding around an Ethereum contract. +type EigenPodManagerStorage struct { + EigenPodManagerStorageCaller // Read-only binding to the contract + EigenPodManagerStorageTransactor // Write-only binding to the contract + EigenPodManagerStorageFilterer // Log filterer for contract events +} + +// EigenPodManagerStorageCaller is an auto generated read-only Go binding around an Ethereum contract. +type EigenPodManagerStorageCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenPodManagerStorageTransactor is an auto generated write-only Go binding around an Ethereum contract. +type EigenPodManagerStorageTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenPodManagerStorageFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type EigenPodManagerStorageFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenPodManagerStorageSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type EigenPodManagerStorageSession struct { + Contract *EigenPodManagerStorage // 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 +} + +// EigenPodManagerStorageCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type EigenPodManagerStorageCallerSession struct { + Contract *EigenPodManagerStorageCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// EigenPodManagerStorageTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type EigenPodManagerStorageTransactorSession struct { + Contract *EigenPodManagerStorageTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// EigenPodManagerStorageRaw is an auto generated low-level Go binding around an Ethereum contract. +type EigenPodManagerStorageRaw struct { + Contract *EigenPodManagerStorage // Generic contract binding to access the raw methods on +} + +// EigenPodManagerStorageCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type EigenPodManagerStorageCallerRaw struct { + Contract *EigenPodManagerStorageCaller // Generic read-only contract binding to access the raw methods on +} + +// EigenPodManagerStorageTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type EigenPodManagerStorageTransactorRaw struct { + Contract *EigenPodManagerStorageTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewEigenPodManagerStorage creates a new instance of EigenPodManagerStorage, bound to a specific deployed contract. +func NewEigenPodManagerStorage(address common.Address, backend bind.ContractBackend) (*EigenPodManagerStorage, error) { + contract, err := bindEigenPodManagerStorage(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &EigenPodManagerStorage{EigenPodManagerStorageCaller: EigenPodManagerStorageCaller{contract: contract}, EigenPodManagerStorageTransactor: EigenPodManagerStorageTransactor{contract: contract}, EigenPodManagerStorageFilterer: EigenPodManagerStorageFilterer{contract: contract}}, nil +} + +// NewEigenPodManagerStorageCaller creates a new read-only instance of EigenPodManagerStorage, bound to a specific deployed contract. +func NewEigenPodManagerStorageCaller(address common.Address, caller bind.ContractCaller) (*EigenPodManagerStorageCaller, error) { + contract, err := bindEigenPodManagerStorage(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &EigenPodManagerStorageCaller{contract: contract}, nil +} + +// NewEigenPodManagerStorageTransactor creates a new write-only instance of EigenPodManagerStorage, bound to a specific deployed contract. +func NewEigenPodManagerStorageTransactor(address common.Address, transactor bind.ContractTransactor) (*EigenPodManagerStorageTransactor, error) { + contract, err := bindEigenPodManagerStorage(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &EigenPodManagerStorageTransactor{contract: contract}, nil +} + +// NewEigenPodManagerStorageFilterer creates a new log filterer instance of EigenPodManagerStorage, bound to a specific deployed contract. +func NewEigenPodManagerStorageFilterer(address common.Address, filterer bind.ContractFilterer) (*EigenPodManagerStorageFilterer, error) { + contract, err := bindEigenPodManagerStorage(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &EigenPodManagerStorageFilterer{contract: contract}, nil +} + +// bindEigenPodManagerStorage binds a generic wrapper to an already deployed contract. +func bindEigenPodManagerStorage(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := EigenPodManagerStorageMetaData.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 (_EigenPodManagerStorage *EigenPodManagerStorageRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EigenPodManagerStorage.Contract.EigenPodManagerStorageCaller.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 (_EigenPodManagerStorage *EigenPodManagerStorageRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.EigenPodManagerStorageTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EigenPodManagerStorage *EigenPodManagerStorageRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.EigenPodManagerStorageTransactor.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 (_EigenPodManagerStorage *EigenPodManagerStorageCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EigenPodManagerStorage.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 (_EigenPodManagerStorage *EigenPodManagerStorageTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.contract.Transact(opts, method, params...) +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) BeaconChainETHStrategy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManagerStorage.contract.Call(opts, &out, "beaconChainETHStrategy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) BeaconChainETHStrategy() (common.Address, error) { + return _EigenPodManagerStorage.Contract.BeaconChainETHStrategy(&_EigenPodManagerStorage.CallOpts) +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) BeaconChainETHStrategy() (common.Address, error) { + return _EigenPodManagerStorage.Contract.BeaconChainETHStrategy(&_EigenPodManagerStorage.CallOpts) +} + +// BeaconChainOracle is a free data retrieval call binding the contract method 0xc052bd61. +// +// Solidity: function beaconChainOracle() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) BeaconChainOracle(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManagerStorage.contract.Call(opts, &out, "beaconChainOracle") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BeaconChainOracle is a free data retrieval call binding the contract method 0xc052bd61. +// +// Solidity: function beaconChainOracle() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) BeaconChainOracle() (common.Address, error) { + return _EigenPodManagerStorage.Contract.BeaconChainOracle(&_EigenPodManagerStorage.CallOpts) +} + +// BeaconChainOracle is a free data retrieval call binding the contract method 0xc052bd61. +// +// Solidity: function beaconChainOracle() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) BeaconChainOracle() (common.Address, error) { + return _EigenPodManagerStorage.Contract.BeaconChainOracle(&_EigenPodManagerStorage.CallOpts) +} + +// DelegationManager is a free data retrieval call binding the contract method 0xea4d3c9b. +// +// Solidity: function delegationManager() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) DelegationManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManagerStorage.contract.Call(opts, &out, "delegationManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DelegationManager is a free data retrieval call binding the contract method 0xea4d3c9b. +// +// Solidity: function delegationManager() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) DelegationManager() (common.Address, error) { + return _EigenPodManagerStorage.Contract.DelegationManager(&_EigenPodManagerStorage.CallOpts) +} + +// DelegationManager is a free data retrieval call binding the contract method 0xea4d3c9b. +// +// Solidity: function delegationManager() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) DelegationManager() (common.Address, error) { + return _EigenPodManagerStorage.Contract.DelegationManager(&_EigenPodManagerStorage.CallOpts) +} + +// DenebForkTimestamp is a free data retrieval call binding the contract method 0x44e71c80. +// +// Solidity: function denebForkTimestamp() view returns(uint64) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) DenebForkTimestamp(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _EigenPodManagerStorage.contract.Call(opts, &out, "denebForkTimestamp") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// DenebForkTimestamp is a free data retrieval call binding the contract method 0x44e71c80. +// +// Solidity: function denebForkTimestamp() view returns(uint64) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) DenebForkTimestamp() (uint64, error) { + return _EigenPodManagerStorage.Contract.DenebForkTimestamp(&_EigenPodManagerStorage.CallOpts) +} + +// DenebForkTimestamp is a free data retrieval call binding the contract method 0x44e71c80. +// +// Solidity: function denebForkTimestamp() view returns(uint64) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) DenebForkTimestamp() (uint64, error) { + return _EigenPodManagerStorage.Contract.DenebForkTimestamp(&_EigenPodManagerStorage.CallOpts) +} + +// EigenPodBeacon is a free data retrieval call binding the contract method 0x292b7b2b. +// +// Solidity: function eigenPodBeacon() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) EigenPodBeacon(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManagerStorage.contract.Call(opts, &out, "eigenPodBeacon") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EigenPodBeacon is a free data retrieval call binding the contract method 0x292b7b2b. +// +// Solidity: function eigenPodBeacon() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) EigenPodBeacon() (common.Address, error) { + return _EigenPodManagerStorage.Contract.EigenPodBeacon(&_EigenPodManagerStorage.CallOpts) +} + +// EigenPodBeacon is a free data retrieval call binding the contract method 0x292b7b2b. +// +// Solidity: function eigenPodBeacon() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) EigenPodBeacon() (common.Address, error) { + return _EigenPodManagerStorage.Contract.EigenPodBeacon(&_EigenPodManagerStorage.CallOpts) +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) EthPOS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManagerStorage.contract.Call(opts, &out, "ethPOS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) EthPOS() (common.Address, error) { + return _EigenPodManagerStorage.Contract.EthPOS(&_EigenPodManagerStorage.CallOpts) +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) EthPOS() (common.Address, error) { + return _EigenPodManagerStorage.Contract.EthPOS(&_EigenPodManagerStorage.CallOpts) +} + +// GetBlockRootAtTimestamp is a free data retrieval call binding the contract method 0xd1c64cc9. +// +// Solidity: function getBlockRootAtTimestamp(uint64 timestamp) view returns(bytes32) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) GetBlockRootAtTimestamp(opts *bind.CallOpts, timestamp uint64) ([32]byte, error) { + var out []interface{} + err := _EigenPodManagerStorage.contract.Call(opts, &out, "getBlockRootAtTimestamp", timestamp) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetBlockRootAtTimestamp is a free data retrieval call binding the contract method 0xd1c64cc9. +// +// Solidity: function getBlockRootAtTimestamp(uint64 timestamp) view returns(bytes32) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) GetBlockRootAtTimestamp(timestamp uint64) ([32]byte, error) { + return _EigenPodManagerStorage.Contract.GetBlockRootAtTimestamp(&_EigenPodManagerStorage.CallOpts, timestamp) +} + +// GetBlockRootAtTimestamp is a free data retrieval call binding the contract method 0xd1c64cc9. +// +// Solidity: function getBlockRootAtTimestamp(uint64 timestamp) view returns(bytes32) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) GetBlockRootAtTimestamp(timestamp uint64) ([32]byte, error) { + return _EigenPodManagerStorage.Contract.GetBlockRootAtTimestamp(&_EigenPodManagerStorage.CallOpts, timestamp) +} + +// GetPod is a free data retrieval call binding the contract method 0xa38406a3. +// +// Solidity: function getPod(address podOwner) view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) GetPod(opts *bind.CallOpts, podOwner common.Address) (common.Address, error) { + var out []interface{} + err := _EigenPodManagerStorage.contract.Call(opts, &out, "getPod", podOwner) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPod is a free data retrieval call binding the contract method 0xa38406a3. +// +// Solidity: function getPod(address podOwner) view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) GetPod(podOwner common.Address) (common.Address, error) { + return _EigenPodManagerStorage.Contract.GetPod(&_EigenPodManagerStorage.CallOpts, podOwner) +} + +// GetPod is a free data retrieval call binding the contract method 0xa38406a3. +// +// Solidity: function getPod(address podOwner) view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) GetPod(podOwner common.Address) (common.Address, error) { + return _EigenPodManagerStorage.Contract.GetPod(&_EigenPodManagerStorage.CallOpts, podOwner) +} + +// HasPod is a free data retrieval call binding the contract method 0xf6848d24. +// +// Solidity: function hasPod(address podOwner) view returns(bool) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) HasPod(opts *bind.CallOpts, podOwner common.Address) (bool, error) { + var out []interface{} + err := _EigenPodManagerStorage.contract.Call(opts, &out, "hasPod", podOwner) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasPod is a free data retrieval call binding the contract method 0xf6848d24. +// +// Solidity: function hasPod(address podOwner) view returns(bool) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) HasPod(podOwner common.Address) (bool, error) { + return _EigenPodManagerStorage.Contract.HasPod(&_EigenPodManagerStorage.CallOpts, podOwner) +} + +// HasPod is a free data retrieval call binding the contract method 0xf6848d24. +// +// Solidity: function hasPod(address podOwner) view returns(bool) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) HasPod(podOwner common.Address) (bool, error) { + return _EigenPodManagerStorage.Contract.HasPod(&_EigenPodManagerStorage.CallOpts, podOwner) +} + +// NumPods is a free data retrieval call binding the contract method 0xa6a509be. +// +// Solidity: function numPods() view returns(uint256) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) NumPods(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _EigenPodManagerStorage.contract.Call(opts, &out, "numPods") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NumPods is a free data retrieval call binding the contract method 0xa6a509be. +// +// Solidity: function numPods() view returns(uint256) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) NumPods() (*big.Int, error) { + return _EigenPodManagerStorage.Contract.NumPods(&_EigenPodManagerStorage.CallOpts) +} + +// NumPods is a free data retrieval call binding the contract method 0xa6a509be. +// +// Solidity: function numPods() view returns(uint256) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) NumPods() (*big.Int, error) { + return _EigenPodManagerStorage.Contract.NumPods(&_EigenPodManagerStorage.CallOpts) +} + +// OwnerToPod is a free data retrieval call binding the contract method 0x9ba06275. +// +// Solidity: function ownerToPod(address ) view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) OwnerToPod(opts *bind.CallOpts, arg0 common.Address) (common.Address, error) { + var out []interface{} + err := _EigenPodManagerStorage.contract.Call(opts, &out, "ownerToPod", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OwnerToPod is a free data retrieval call binding the contract method 0x9ba06275. +// +// Solidity: function ownerToPod(address ) view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) OwnerToPod(arg0 common.Address) (common.Address, error) { + return _EigenPodManagerStorage.Contract.OwnerToPod(&_EigenPodManagerStorage.CallOpts, arg0) +} + +// OwnerToPod is a free data retrieval call binding the contract method 0x9ba06275. +// +// Solidity: function ownerToPod(address ) view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) OwnerToPod(arg0 common.Address) (common.Address, error) { + return _EigenPodManagerStorage.Contract.OwnerToPod(&_EigenPodManagerStorage.CallOpts, arg0) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _EigenPodManagerStorage.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 (_EigenPodManagerStorage *EigenPodManagerStorageSession) Paused(index uint8) (bool, error) { + return _EigenPodManagerStorage.Contract.Paused(&_EigenPodManagerStorage.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) Paused(index uint8) (bool, error) { + return _EigenPodManagerStorage.Contract.Paused(&_EigenPodManagerStorage.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _EigenPodManagerStorage.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 (_EigenPodManagerStorage *EigenPodManagerStorageSession) Paused0() (*big.Int, error) { + return _EigenPodManagerStorage.Contract.Paused0(&_EigenPodManagerStorage.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) Paused0() (*big.Int, error) { + return _EigenPodManagerStorage.Contract.Paused0(&_EigenPodManagerStorage.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManagerStorage.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 (_EigenPodManagerStorage *EigenPodManagerStorageSession) PauserRegistry() (common.Address, error) { + return _EigenPodManagerStorage.Contract.PauserRegistry(&_EigenPodManagerStorage.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) PauserRegistry() (common.Address, error) { + return _EigenPodManagerStorage.Contract.PauserRegistry(&_EigenPodManagerStorage.CallOpts) +} + +// PodOwnerShares is a free data retrieval call binding the contract method 0x60f4062b. +// +// Solidity: function podOwnerShares(address ) view returns(int256) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) PodOwnerShares(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _EigenPodManagerStorage.contract.Call(opts, &out, "podOwnerShares", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// PodOwnerShares is a free data retrieval call binding the contract method 0x60f4062b. +// +// Solidity: function podOwnerShares(address ) view returns(int256) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) PodOwnerShares(arg0 common.Address) (*big.Int, error) { + return _EigenPodManagerStorage.Contract.PodOwnerShares(&_EigenPodManagerStorage.CallOpts, arg0) +} + +// PodOwnerShares is a free data retrieval call binding the contract method 0x60f4062b. +// +// Solidity: function podOwnerShares(address ) view returns(int256) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) PodOwnerShares(arg0 common.Address) (*big.Int, error) { + return _EigenPodManagerStorage.Contract.PodOwnerShares(&_EigenPodManagerStorage.CallOpts, arg0) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) Slasher(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManagerStorage.contract.Call(opts, &out, "slasher") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) Slasher() (common.Address, error) { + return _EigenPodManagerStorage.Contract.Slasher(&_EigenPodManagerStorage.CallOpts) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) Slasher() (common.Address, error) { + return _EigenPodManagerStorage.Contract.Slasher(&_EigenPodManagerStorage.CallOpts) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenPodManagerStorage.contract.Call(opts, &out, "strategyManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) StrategyManager() (common.Address, error) { + return _EigenPodManagerStorage.Contract.StrategyManager(&_EigenPodManagerStorage.CallOpts) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) StrategyManager() (common.Address, error) { + return _EigenPodManagerStorage.Contract.StrategyManager(&_EigenPodManagerStorage.CallOpts) +} + +// AddShares is a paid mutator transaction binding the contract method 0x0e81073c. +// +// 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) +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) +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.AddShares(&_EigenPodManagerStorage.TransactOpts, podOwner, shares) +} + +// CreatePod is a paid mutator transaction binding the contract method 0x84d81062. +// +// Solidity: function createPod() returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactor) CreatePod(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPodManagerStorage.contract.Transact(opts, "createPod") +} + +// CreatePod is a paid mutator transaction binding the contract method 0x84d81062. +// +// Solidity: function createPod() returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) CreatePod() (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.CreatePod(&_EigenPodManagerStorage.TransactOpts) +} + +// CreatePod is a paid mutator transaction binding the contract method 0x84d81062. +// +// Solidity: function createPod() returns(address) +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorSession) CreatePod() (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.CreatePod(&_EigenPodManagerStorage.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.Pause(&_EigenPodManagerStorage.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.Pause(&_EigenPodManagerStorage.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPodManagerStorage.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) PauseAll() (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.PauseAll(&_EigenPodManagerStorage.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorSession) PauseAll() (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.PauseAll(&_EigenPodManagerStorage.TransactOpts) +} + +// RecordBeaconChainETHBalanceUpdate is a paid mutator transaction binding the contract method 0xc2c51c40. +// +// Solidity: function recordBeaconChainETHBalanceUpdate(address podOwner, int256 sharesDelta) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactor) RecordBeaconChainETHBalanceUpdate(opts *bind.TransactOpts, podOwner common.Address, sharesDelta *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.contract.Transact(opts, "recordBeaconChainETHBalanceUpdate", podOwner, sharesDelta) +} + +// RecordBeaconChainETHBalanceUpdate is a paid mutator transaction binding the contract method 0xc2c51c40. +// +// Solidity: function recordBeaconChainETHBalanceUpdate(address podOwner, int256 sharesDelta) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) RecordBeaconChainETHBalanceUpdate(podOwner common.Address, sharesDelta *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.RecordBeaconChainETHBalanceUpdate(&_EigenPodManagerStorage.TransactOpts, podOwner, sharesDelta) +} + +// RecordBeaconChainETHBalanceUpdate is a paid mutator transaction binding the contract method 0xc2c51c40. +// +// Solidity: function recordBeaconChainETHBalanceUpdate(address podOwner, int256 sharesDelta) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorSession) RecordBeaconChainETHBalanceUpdate(podOwner common.Address, sharesDelta *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.RecordBeaconChainETHBalanceUpdate(&_EigenPodManagerStorage.TransactOpts, podOwner, sharesDelta) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0xbeffbb89. +// +// Solidity: function removeShares(address podOwner, uint256 shares) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactor) RemoveShares(opts *bind.TransactOpts, podOwner common.Address, shares *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.contract.Transact(opts, "removeShares", podOwner, shares) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0xbeffbb89. +// +// Solidity: function removeShares(address podOwner, uint256 shares) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) RemoveShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.RemoveShares(&_EigenPodManagerStorage.TransactOpts, podOwner, shares) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0xbeffbb89. +// +// Solidity: function removeShares(address podOwner, uint256 shares) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorSession) RemoveShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.RemoveShares(&_EigenPodManagerStorage.TransactOpts, podOwner, shares) +} + +// SetDenebForkTimestamp is a paid mutator transaction binding the contract method 0x463db038. +// +// Solidity: function setDenebForkTimestamp(uint64 newDenebForkTimestamp) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactor) SetDenebForkTimestamp(opts *bind.TransactOpts, newDenebForkTimestamp uint64) (*types.Transaction, error) { + return _EigenPodManagerStorage.contract.Transact(opts, "setDenebForkTimestamp", newDenebForkTimestamp) +} + +// SetDenebForkTimestamp is a paid mutator transaction binding the contract method 0x463db038. +// +// Solidity: function setDenebForkTimestamp(uint64 newDenebForkTimestamp) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) SetDenebForkTimestamp(newDenebForkTimestamp uint64) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.SetDenebForkTimestamp(&_EigenPodManagerStorage.TransactOpts, newDenebForkTimestamp) +} + +// SetDenebForkTimestamp is a paid mutator transaction binding the contract method 0x463db038. +// +// Solidity: function setDenebForkTimestamp(uint64 newDenebForkTimestamp) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorSession) SetDenebForkTimestamp(newDenebForkTimestamp uint64) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.SetDenebForkTimestamp(&_EigenPodManagerStorage.TransactOpts, newDenebForkTimestamp) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _EigenPodManagerStorage.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.SetPauserRegistry(&_EigenPodManagerStorage.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.SetPauserRegistry(&_EigenPodManagerStorage.TransactOpts, newPauserRegistry) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactor) Stake(opts *bind.TransactOpts, pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _EigenPodManagerStorage.contract.Transact(opts, "stake", pubkey, signature, depositDataRoot) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) Stake(pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.Stake(&_EigenPodManagerStorage.TransactOpts, pubkey, signature, depositDataRoot) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorSession) Stake(pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.Stake(&_EigenPodManagerStorage.TransactOpts, pubkey, signature, depositDataRoot) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.Unpause(&_EigenPodManagerStorage.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.Unpause(&_EigenPodManagerStorage.TransactOpts, newPausedStatus) +} + +// UpdateBeaconChainOracle is a paid mutator transaction binding the contract method 0xc1de3aef. +// +// Solidity: function updateBeaconChainOracle(address newBeaconChainOracle) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactor) UpdateBeaconChainOracle(opts *bind.TransactOpts, newBeaconChainOracle common.Address) (*types.Transaction, error) { + return _EigenPodManagerStorage.contract.Transact(opts, "updateBeaconChainOracle", newBeaconChainOracle) +} + +// UpdateBeaconChainOracle is a paid mutator transaction binding the contract method 0xc1de3aef. +// +// Solidity: function updateBeaconChainOracle(address newBeaconChainOracle) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) UpdateBeaconChainOracle(newBeaconChainOracle common.Address) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.UpdateBeaconChainOracle(&_EigenPodManagerStorage.TransactOpts, newBeaconChainOracle) +} + +// UpdateBeaconChainOracle is a paid mutator transaction binding the contract method 0xc1de3aef. +// +// Solidity: function updateBeaconChainOracle(address newBeaconChainOracle) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorSession) UpdateBeaconChainOracle(newBeaconChainOracle common.Address) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.UpdateBeaconChainOracle(&_EigenPodManagerStorage.TransactOpts, newBeaconChainOracle) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0x387b1300. +// +// Solidity: function withdrawSharesAsTokens(address podOwner, address destination, uint256 shares) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactor) WithdrawSharesAsTokens(opts *bind.TransactOpts, podOwner common.Address, destination common.Address, shares *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.contract.Transact(opts, "withdrawSharesAsTokens", podOwner, destination, shares) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0x387b1300. +// +// Solidity: function withdrawSharesAsTokens(address podOwner, address destination, uint256 shares) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageSession) WithdrawSharesAsTokens(podOwner common.Address, destination common.Address, shares *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.WithdrawSharesAsTokens(&_EigenPodManagerStorage.TransactOpts, podOwner, destination, shares) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0x387b1300. +// +// Solidity: function withdrawSharesAsTokens(address podOwner, address destination, uint256 shares) returns() +func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorSession) WithdrawSharesAsTokens(podOwner common.Address, destination common.Address, shares *big.Int) (*types.Transaction, error) { + return _EigenPodManagerStorage.Contract.WithdrawSharesAsTokens(&_EigenPodManagerStorage.TransactOpts, podOwner, destination, shares) +} + +// EigenPodManagerStorageBeaconChainETHDepositedIterator is returned from FilterBeaconChainETHDeposited and is used to iterate over the raw logs and unpacked data for BeaconChainETHDeposited events raised by the EigenPodManagerStorage contract. +type EigenPodManagerStorageBeaconChainETHDepositedIterator struct { + Event *EigenPodManagerStorageBeaconChainETHDeposited // 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 *EigenPodManagerStorageBeaconChainETHDepositedIterator) 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(EigenPodManagerStorageBeaconChainETHDeposited) + 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(EigenPodManagerStorageBeaconChainETHDeposited) + 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 *EigenPodManagerStorageBeaconChainETHDepositedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerStorageBeaconChainETHDepositedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerStorageBeaconChainETHDeposited represents a BeaconChainETHDeposited event raised by the EigenPodManagerStorage contract. +type EigenPodManagerStorageBeaconChainETHDeposited struct { + PodOwner common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBeaconChainETHDeposited is a free log retrieval operation binding the contract event 0x35a85cabc603f48abb2b71d9fbd8adea7c449d7f0be900ae7a2986ea369c3d0d. +// +// Solidity: event BeaconChainETHDeposited(address indexed podOwner, uint256 amount) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) FilterBeaconChainETHDeposited(opts *bind.FilterOpts, podOwner []common.Address) (*EigenPodManagerStorageBeaconChainETHDepositedIterator, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManagerStorage.contract.FilterLogs(opts, "BeaconChainETHDeposited", podOwnerRule) + if err != nil { + return nil, err + } + return &EigenPodManagerStorageBeaconChainETHDepositedIterator{contract: _EigenPodManagerStorage.contract, event: "BeaconChainETHDeposited", logs: logs, sub: sub}, nil +} + +// WatchBeaconChainETHDeposited is a free log subscription operation binding the contract event 0x35a85cabc603f48abb2b71d9fbd8adea7c449d7f0be900ae7a2986ea369c3d0d. +// +// Solidity: event BeaconChainETHDeposited(address indexed podOwner, uint256 amount) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) WatchBeaconChainETHDeposited(opts *bind.WatchOpts, sink chan<- *EigenPodManagerStorageBeaconChainETHDeposited, podOwner []common.Address) (event.Subscription, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManagerStorage.contract.WatchLogs(opts, "BeaconChainETHDeposited", podOwnerRule) + 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(EigenPodManagerStorageBeaconChainETHDeposited) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "BeaconChainETHDeposited", 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 +} + +// ParseBeaconChainETHDeposited is a log parse operation binding the contract event 0x35a85cabc603f48abb2b71d9fbd8adea7c449d7f0be900ae7a2986ea369c3d0d. +// +// Solidity: event BeaconChainETHDeposited(address indexed podOwner, uint256 amount) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) ParseBeaconChainETHDeposited(log types.Log) (*EigenPodManagerStorageBeaconChainETHDeposited, error) { + event := new(EigenPodManagerStorageBeaconChainETHDeposited) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "BeaconChainETHDeposited", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerStorageBeaconChainETHWithdrawalCompletedIterator is returned from FilterBeaconChainETHWithdrawalCompleted and is used to iterate over the raw logs and unpacked data for BeaconChainETHWithdrawalCompleted events raised by the EigenPodManagerStorage contract. +type EigenPodManagerStorageBeaconChainETHWithdrawalCompletedIterator struct { + Event *EigenPodManagerStorageBeaconChainETHWithdrawalCompleted // 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 *EigenPodManagerStorageBeaconChainETHWithdrawalCompletedIterator) 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(EigenPodManagerStorageBeaconChainETHWithdrawalCompleted) + 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(EigenPodManagerStorageBeaconChainETHWithdrawalCompleted) + 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 *EigenPodManagerStorageBeaconChainETHWithdrawalCompletedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerStorageBeaconChainETHWithdrawalCompletedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerStorageBeaconChainETHWithdrawalCompleted represents a BeaconChainETHWithdrawalCompleted event raised by the EigenPodManagerStorage contract. +type EigenPodManagerStorageBeaconChainETHWithdrawalCompleted struct { + PodOwner common.Address + Shares *big.Int + Nonce *big.Int + DelegatedAddress common.Address + Withdrawer common.Address + WithdrawalRoot [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBeaconChainETHWithdrawalCompleted is a free log retrieval operation binding the contract event 0xa6bab1d55a361fcea2eee2bc9491e4f01e6cf333df03c9c4f2c144466429f7d6. +// +// Solidity: event BeaconChainETHWithdrawalCompleted(address indexed podOwner, uint256 shares, uint96 nonce, address delegatedAddress, address withdrawer, bytes32 withdrawalRoot) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) FilterBeaconChainETHWithdrawalCompleted(opts *bind.FilterOpts, podOwner []common.Address) (*EigenPodManagerStorageBeaconChainETHWithdrawalCompletedIterator, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManagerStorage.contract.FilterLogs(opts, "BeaconChainETHWithdrawalCompleted", podOwnerRule) + if err != nil { + return nil, err + } + return &EigenPodManagerStorageBeaconChainETHWithdrawalCompletedIterator{contract: _EigenPodManagerStorage.contract, event: "BeaconChainETHWithdrawalCompleted", logs: logs, sub: sub}, nil +} + +// WatchBeaconChainETHWithdrawalCompleted is a free log subscription operation binding the contract event 0xa6bab1d55a361fcea2eee2bc9491e4f01e6cf333df03c9c4f2c144466429f7d6. +// +// Solidity: event BeaconChainETHWithdrawalCompleted(address indexed podOwner, uint256 shares, uint96 nonce, address delegatedAddress, address withdrawer, bytes32 withdrawalRoot) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) WatchBeaconChainETHWithdrawalCompleted(opts *bind.WatchOpts, sink chan<- *EigenPodManagerStorageBeaconChainETHWithdrawalCompleted, podOwner []common.Address) (event.Subscription, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManagerStorage.contract.WatchLogs(opts, "BeaconChainETHWithdrawalCompleted", podOwnerRule) + 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(EigenPodManagerStorageBeaconChainETHWithdrawalCompleted) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "BeaconChainETHWithdrawalCompleted", 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 +} + +// ParseBeaconChainETHWithdrawalCompleted is a log parse operation binding the contract event 0xa6bab1d55a361fcea2eee2bc9491e4f01e6cf333df03c9c4f2c144466429f7d6. +// +// Solidity: event BeaconChainETHWithdrawalCompleted(address indexed podOwner, uint256 shares, uint96 nonce, address delegatedAddress, address withdrawer, bytes32 withdrawalRoot) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) ParseBeaconChainETHWithdrawalCompleted(log types.Log) (*EigenPodManagerStorageBeaconChainETHWithdrawalCompleted, error) { + event := new(EigenPodManagerStorageBeaconChainETHWithdrawalCompleted) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "BeaconChainETHWithdrawalCompleted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerStorageBeaconOracleUpdatedIterator is returned from FilterBeaconOracleUpdated and is used to iterate over the raw logs and unpacked data for BeaconOracleUpdated events raised by the EigenPodManagerStorage contract. +type EigenPodManagerStorageBeaconOracleUpdatedIterator struct { + Event *EigenPodManagerStorageBeaconOracleUpdated // 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 *EigenPodManagerStorageBeaconOracleUpdatedIterator) 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(EigenPodManagerStorageBeaconOracleUpdated) + 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(EigenPodManagerStorageBeaconOracleUpdated) + 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 *EigenPodManagerStorageBeaconOracleUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerStorageBeaconOracleUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerStorageBeaconOracleUpdated represents a BeaconOracleUpdated event raised by the EigenPodManagerStorage contract. +type EigenPodManagerStorageBeaconOracleUpdated struct { + NewOracleAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBeaconOracleUpdated is a free log retrieval operation binding the contract event 0x08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f6. +// +// Solidity: event BeaconOracleUpdated(address indexed newOracleAddress) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) FilterBeaconOracleUpdated(opts *bind.FilterOpts, newOracleAddress []common.Address) (*EigenPodManagerStorageBeaconOracleUpdatedIterator, error) { + + var newOracleAddressRule []interface{} + for _, newOracleAddressItem := range newOracleAddress { + newOracleAddressRule = append(newOracleAddressRule, newOracleAddressItem) + } + + logs, sub, err := _EigenPodManagerStorage.contract.FilterLogs(opts, "BeaconOracleUpdated", newOracleAddressRule) + if err != nil { + return nil, err + } + return &EigenPodManagerStorageBeaconOracleUpdatedIterator{contract: _EigenPodManagerStorage.contract, event: "BeaconOracleUpdated", logs: logs, sub: sub}, nil +} + +// WatchBeaconOracleUpdated is a free log subscription operation binding the contract event 0x08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f6. +// +// Solidity: event BeaconOracleUpdated(address indexed newOracleAddress) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) WatchBeaconOracleUpdated(opts *bind.WatchOpts, sink chan<- *EigenPodManagerStorageBeaconOracleUpdated, newOracleAddress []common.Address) (event.Subscription, error) { + + var newOracleAddressRule []interface{} + for _, newOracleAddressItem := range newOracleAddress { + newOracleAddressRule = append(newOracleAddressRule, newOracleAddressItem) + } + + logs, sub, err := _EigenPodManagerStorage.contract.WatchLogs(opts, "BeaconOracleUpdated", newOracleAddressRule) + 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(EigenPodManagerStorageBeaconOracleUpdated) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "BeaconOracleUpdated", 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 +} + +// ParseBeaconOracleUpdated is a log parse operation binding the contract event 0x08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f6. +// +// Solidity: event BeaconOracleUpdated(address indexed newOracleAddress) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) ParseBeaconOracleUpdated(log types.Log) (*EigenPodManagerStorageBeaconOracleUpdated, error) { + event := new(EigenPodManagerStorageBeaconOracleUpdated) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "BeaconOracleUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerStorageDenebForkTimestampUpdatedIterator is returned from FilterDenebForkTimestampUpdated and is used to iterate over the raw logs and unpacked data for DenebForkTimestampUpdated events raised by the EigenPodManagerStorage contract. +type EigenPodManagerStorageDenebForkTimestampUpdatedIterator struct { + Event *EigenPodManagerStorageDenebForkTimestampUpdated // 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 *EigenPodManagerStorageDenebForkTimestampUpdatedIterator) 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(EigenPodManagerStorageDenebForkTimestampUpdated) + 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(EigenPodManagerStorageDenebForkTimestampUpdated) + 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 *EigenPodManagerStorageDenebForkTimestampUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerStorageDenebForkTimestampUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerStorageDenebForkTimestampUpdated represents a DenebForkTimestampUpdated event raised by the EigenPodManagerStorage contract. +type EigenPodManagerStorageDenebForkTimestampUpdated struct { + NewValue uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDenebForkTimestampUpdated is a free log retrieval operation binding the contract event 0x19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db. +// +// Solidity: event DenebForkTimestampUpdated(uint64 newValue) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) FilterDenebForkTimestampUpdated(opts *bind.FilterOpts) (*EigenPodManagerStorageDenebForkTimestampUpdatedIterator, error) { + + logs, sub, err := _EigenPodManagerStorage.contract.FilterLogs(opts, "DenebForkTimestampUpdated") + if err != nil { + return nil, err + } + return &EigenPodManagerStorageDenebForkTimestampUpdatedIterator{contract: _EigenPodManagerStorage.contract, event: "DenebForkTimestampUpdated", logs: logs, sub: sub}, nil +} + +// WatchDenebForkTimestampUpdated is a free log subscription operation binding the contract event 0x19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db. +// +// Solidity: event DenebForkTimestampUpdated(uint64 newValue) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) WatchDenebForkTimestampUpdated(opts *bind.WatchOpts, sink chan<- *EigenPodManagerStorageDenebForkTimestampUpdated) (event.Subscription, error) { + + logs, sub, err := _EigenPodManagerStorage.contract.WatchLogs(opts, "DenebForkTimestampUpdated") + 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(EigenPodManagerStorageDenebForkTimestampUpdated) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "DenebForkTimestampUpdated", 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 +} + +// ParseDenebForkTimestampUpdated is a log parse operation binding the contract event 0x19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db. +// +// Solidity: event DenebForkTimestampUpdated(uint64 newValue) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) ParseDenebForkTimestampUpdated(log types.Log) (*EigenPodManagerStorageDenebForkTimestampUpdated, error) { + event := new(EigenPodManagerStorageDenebForkTimestampUpdated) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "DenebForkTimestampUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerStoragePausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the EigenPodManagerStorage contract. +type EigenPodManagerStoragePausedIterator struct { + Event *EigenPodManagerStoragePaused // 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 *EigenPodManagerStoragePausedIterator) 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(EigenPodManagerStoragePaused) + 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(EigenPodManagerStoragePaused) + 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 *EigenPodManagerStoragePausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerStoragePausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerStoragePaused represents a Paused event raised by the EigenPodManagerStorage contract. +type EigenPodManagerStoragePaused 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 (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*EigenPodManagerStoragePausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _EigenPodManagerStorage.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &EigenPodManagerStoragePausedIterator{contract: _EigenPodManagerStorage.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 (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *EigenPodManagerStoragePaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _EigenPodManagerStorage.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(EigenPodManagerStoragePaused) + if err := _EigenPodManagerStorage.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 (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) ParsePaused(log types.Log) (*EigenPodManagerStoragePaused, error) { + event := new(EigenPodManagerStoragePaused) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerStoragePauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the EigenPodManagerStorage contract. +type EigenPodManagerStoragePauserRegistrySetIterator struct { + Event *EigenPodManagerStoragePauserRegistrySet // 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 *EigenPodManagerStoragePauserRegistrySetIterator) 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(EigenPodManagerStoragePauserRegistrySet) + 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(EigenPodManagerStoragePauserRegistrySet) + 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 *EigenPodManagerStoragePauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerStoragePauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerStoragePauserRegistrySet represents a PauserRegistrySet event raised by the EigenPodManagerStorage contract. +type EigenPodManagerStoragePauserRegistrySet 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 (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*EigenPodManagerStoragePauserRegistrySetIterator, error) { + + logs, sub, err := _EigenPodManagerStorage.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &EigenPodManagerStoragePauserRegistrySetIterator{contract: _EigenPodManagerStorage.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 (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *EigenPodManagerStoragePauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _EigenPodManagerStorage.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(EigenPodManagerStoragePauserRegistrySet) + if err := _EigenPodManagerStorage.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 (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) ParsePauserRegistrySet(log types.Log) (*EigenPodManagerStoragePauserRegistrySet, error) { + event := new(EigenPodManagerStoragePauserRegistrySet) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerStoragePodDeployedIterator is returned from FilterPodDeployed and is used to iterate over the raw logs and unpacked data for PodDeployed events raised by the EigenPodManagerStorage contract. +type EigenPodManagerStoragePodDeployedIterator struct { + Event *EigenPodManagerStoragePodDeployed // 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 *EigenPodManagerStoragePodDeployedIterator) 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(EigenPodManagerStoragePodDeployed) + 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(EigenPodManagerStoragePodDeployed) + 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 *EigenPodManagerStoragePodDeployedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerStoragePodDeployedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerStoragePodDeployed represents a PodDeployed event raised by the EigenPodManagerStorage contract. +type EigenPodManagerStoragePodDeployed struct { + EigenPod common.Address + PodOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPodDeployed is a free log retrieval operation binding the contract event 0x21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a. +// +// Solidity: event PodDeployed(address indexed eigenPod, address indexed podOwner) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) FilterPodDeployed(opts *bind.FilterOpts, eigenPod []common.Address, podOwner []common.Address) (*EigenPodManagerStoragePodDeployedIterator, error) { + + var eigenPodRule []interface{} + for _, eigenPodItem := range eigenPod { + eigenPodRule = append(eigenPodRule, eigenPodItem) + } + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManagerStorage.contract.FilterLogs(opts, "PodDeployed", eigenPodRule, podOwnerRule) + if err != nil { + return nil, err + } + return &EigenPodManagerStoragePodDeployedIterator{contract: _EigenPodManagerStorage.contract, event: "PodDeployed", logs: logs, sub: sub}, nil +} + +// WatchPodDeployed is a free log subscription operation binding the contract event 0x21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a. +// +// Solidity: event PodDeployed(address indexed eigenPod, address indexed podOwner) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) WatchPodDeployed(opts *bind.WatchOpts, sink chan<- *EigenPodManagerStoragePodDeployed, eigenPod []common.Address, podOwner []common.Address) (event.Subscription, error) { + + var eigenPodRule []interface{} + for _, eigenPodItem := range eigenPod { + eigenPodRule = append(eigenPodRule, eigenPodItem) + } + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManagerStorage.contract.WatchLogs(opts, "PodDeployed", eigenPodRule, podOwnerRule) + 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(EigenPodManagerStoragePodDeployed) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "PodDeployed", 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 +} + +// ParsePodDeployed is a log parse operation binding the contract event 0x21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a. +// +// Solidity: event PodDeployed(address indexed eigenPod, address indexed podOwner) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) ParsePodDeployed(log types.Log) (*EigenPodManagerStoragePodDeployed, error) { + event := new(EigenPodManagerStoragePodDeployed) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "PodDeployed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerStoragePodSharesUpdatedIterator is returned from FilterPodSharesUpdated and is used to iterate over the raw logs and unpacked data for PodSharesUpdated events raised by the EigenPodManagerStorage contract. +type EigenPodManagerStoragePodSharesUpdatedIterator struct { + Event *EigenPodManagerStoragePodSharesUpdated // 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 *EigenPodManagerStoragePodSharesUpdatedIterator) 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(EigenPodManagerStoragePodSharesUpdated) + 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(EigenPodManagerStoragePodSharesUpdated) + 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 *EigenPodManagerStoragePodSharesUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerStoragePodSharesUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerStoragePodSharesUpdated represents a PodSharesUpdated event raised by the EigenPodManagerStorage contract. +type EigenPodManagerStoragePodSharesUpdated struct { + PodOwner common.Address + SharesDelta *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPodSharesUpdated is a free log retrieval operation binding the contract event 0x4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193. +// +// Solidity: event PodSharesUpdated(address indexed podOwner, int256 sharesDelta) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) FilterPodSharesUpdated(opts *bind.FilterOpts, podOwner []common.Address) (*EigenPodManagerStoragePodSharesUpdatedIterator, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManagerStorage.contract.FilterLogs(opts, "PodSharesUpdated", podOwnerRule) + if err != nil { + return nil, err + } + return &EigenPodManagerStoragePodSharesUpdatedIterator{contract: _EigenPodManagerStorage.contract, event: "PodSharesUpdated", logs: logs, sub: sub}, nil +} + +// WatchPodSharesUpdated is a free log subscription operation binding the contract event 0x4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193. +// +// Solidity: event PodSharesUpdated(address indexed podOwner, int256 sharesDelta) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) WatchPodSharesUpdated(opts *bind.WatchOpts, sink chan<- *EigenPodManagerStoragePodSharesUpdated, podOwner []common.Address) (event.Subscription, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _EigenPodManagerStorage.contract.WatchLogs(opts, "PodSharesUpdated", podOwnerRule) + 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(EigenPodManagerStoragePodSharesUpdated) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "PodSharesUpdated", 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 +} + +// ParsePodSharesUpdated is a log parse operation binding the contract event 0x4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193. +// +// Solidity: event PodSharesUpdated(address indexed podOwner, int256 sharesDelta) +func (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) ParsePodSharesUpdated(log types.Log) (*EigenPodManagerStoragePodSharesUpdated, error) { + event := new(EigenPodManagerStoragePodSharesUpdated) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "PodSharesUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenPodManagerStorageUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the EigenPodManagerStorage contract. +type EigenPodManagerStorageUnpausedIterator struct { + Event *EigenPodManagerStorageUnpaused // 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 *EigenPodManagerStorageUnpausedIterator) 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(EigenPodManagerStorageUnpaused) + 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(EigenPodManagerStorageUnpaused) + 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 *EigenPodManagerStorageUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenPodManagerStorageUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenPodManagerStorageUnpaused represents a Unpaused event raised by the EigenPodManagerStorage contract. +type EigenPodManagerStorageUnpaused 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 (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*EigenPodManagerStorageUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _EigenPodManagerStorage.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &EigenPodManagerStorageUnpausedIterator{contract: _EigenPodManagerStorage.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 (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *EigenPodManagerStorageUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _EigenPodManagerStorage.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(EigenPodManagerStorageUnpaused) + if err := _EigenPodManagerStorage.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 (_EigenPodManagerStorage *EigenPodManagerStorageFilterer) ParseUnpaused(log types.Log) (*EigenPodManagerStorageUnpaused, error) { + event := new(EigenPodManagerStorageUnpaused) + if err := _EigenPodManagerStorage.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/EigenPodManagerStorage/tmp.abi b/pkg/bindings/EigenPodManagerStorage/tmp.abi new file mode 100644 index 000000000..e0e59e1fe --- /dev/null +++ b/pkg/bindings/EigenPodManagerStorage/tmp.abi @@ -0,0 +1,633 @@ +[ + { + "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": "contract IStrategy" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "beaconChainOracle", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IBeaconChainOracle" + } + ], + "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": "contract IDelegationManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "denebForkTimestamp", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eigenPodBeacon", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IBeacon" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ethPOS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IETHPOSDeposit" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBlockRootAtTimestamp", + "inputs": [ + { + "name": "timestamp", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPod", + "inputs": [ + { + "name": "podOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IEigenPod" + } + ], + "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": "contract IEigenPod" + } + ], + "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": "contract IPauserRegistry" + } + ], + "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": "setDenebForkTimestamp", + "inputs": [ + { + "name": "newDenebForkTimestamp", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPauserRegistry", + "inputs": [ + { + "name": "newPauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "slasher", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ISlasher" + } + ], + "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": "contract IStrategyManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "unpause", + "inputs": [ + { + "name": "newPausedStatus", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateBeaconChainOracle", + "inputs": [ + { + "name": "newBeaconChainOracle", + "type": "address", + "internalType": "contract IBeaconChainOracle" + } + ], + "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": "BeaconOracleUpdated", + "inputs": [ + { + "name": "newOracleAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DenebForkTimestampUpdated", + "inputs": [ + { + "name": "newValue", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "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": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "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 + } +] diff --git a/pkg/bindings/EigenPodManagerStorage/tmp.bin b/pkg/bindings/EigenPodManagerStorage/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/EigenPodManagerStorage/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/EigenPodPausingConstants/binding.go b/pkg/bindings/EigenPodPausingConstants/binding.go new file mode 100644 index 000000000..7ddb12164 --- /dev/null +++ b/pkg/bindings/EigenPodPausingConstants/binding.go @@ -0,0 +1,181 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package EigenPodPausingConstants + +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 +) + +// EigenPodPausingConstantsMetaData contains all meta data concerning the EigenPodPausingConstants contract. +var EigenPodPausingConstantsMetaData = &bind.MetaData{ + ABI: "[]", +} + +// EigenPodPausingConstantsABI is the input ABI used to generate the binding from. +// Deprecated: Use EigenPodPausingConstantsMetaData.ABI instead. +var EigenPodPausingConstantsABI = EigenPodPausingConstantsMetaData.ABI + +// EigenPodPausingConstants is an auto generated Go binding around an Ethereum contract. +type EigenPodPausingConstants struct { + EigenPodPausingConstantsCaller // Read-only binding to the contract + EigenPodPausingConstantsTransactor // Write-only binding to the contract + EigenPodPausingConstantsFilterer // Log filterer for contract events +} + +// EigenPodPausingConstantsCaller is an auto generated read-only Go binding around an Ethereum contract. +type EigenPodPausingConstantsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenPodPausingConstantsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type EigenPodPausingConstantsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenPodPausingConstantsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type EigenPodPausingConstantsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenPodPausingConstantsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type EigenPodPausingConstantsSession struct { + Contract *EigenPodPausingConstants // 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 +} + +// EigenPodPausingConstantsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type EigenPodPausingConstantsCallerSession struct { + Contract *EigenPodPausingConstantsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// EigenPodPausingConstantsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type EigenPodPausingConstantsTransactorSession struct { + Contract *EigenPodPausingConstantsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// EigenPodPausingConstantsRaw is an auto generated low-level Go binding around an Ethereum contract. +type EigenPodPausingConstantsRaw struct { + Contract *EigenPodPausingConstants // Generic contract binding to access the raw methods on +} + +// EigenPodPausingConstantsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type EigenPodPausingConstantsCallerRaw struct { + Contract *EigenPodPausingConstantsCaller // Generic read-only contract binding to access the raw methods on +} + +// EigenPodPausingConstantsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type EigenPodPausingConstantsTransactorRaw struct { + Contract *EigenPodPausingConstantsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewEigenPodPausingConstants creates a new instance of EigenPodPausingConstants, bound to a specific deployed contract. +func NewEigenPodPausingConstants(address common.Address, backend bind.ContractBackend) (*EigenPodPausingConstants, error) { + contract, err := bindEigenPodPausingConstants(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &EigenPodPausingConstants{EigenPodPausingConstantsCaller: EigenPodPausingConstantsCaller{contract: contract}, EigenPodPausingConstantsTransactor: EigenPodPausingConstantsTransactor{contract: contract}, EigenPodPausingConstantsFilterer: EigenPodPausingConstantsFilterer{contract: contract}}, nil +} + +// NewEigenPodPausingConstantsCaller creates a new read-only instance of EigenPodPausingConstants, bound to a specific deployed contract. +func NewEigenPodPausingConstantsCaller(address common.Address, caller bind.ContractCaller) (*EigenPodPausingConstantsCaller, error) { + contract, err := bindEigenPodPausingConstants(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &EigenPodPausingConstantsCaller{contract: contract}, nil +} + +// NewEigenPodPausingConstantsTransactor creates a new write-only instance of EigenPodPausingConstants, bound to a specific deployed contract. +func NewEigenPodPausingConstantsTransactor(address common.Address, transactor bind.ContractTransactor) (*EigenPodPausingConstantsTransactor, error) { + contract, err := bindEigenPodPausingConstants(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &EigenPodPausingConstantsTransactor{contract: contract}, nil +} + +// NewEigenPodPausingConstantsFilterer creates a new log filterer instance of EigenPodPausingConstants, bound to a specific deployed contract. +func NewEigenPodPausingConstantsFilterer(address common.Address, filterer bind.ContractFilterer) (*EigenPodPausingConstantsFilterer, error) { + contract, err := bindEigenPodPausingConstants(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &EigenPodPausingConstantsFilterer{contract: contract}, nil +} + +// bindEigenPodPausingConstants binds a generic wrapper to an already deployed contract. +func bindEigenPodPausingConstants(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := EigenPodPausingConstantsMetaData.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 (_EigenPodPausingConstants *EigenPodPausingConstantsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EigenPodPausingConstants.Contract.EigenPodPausingConstantsCaller.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 (_EigenPodPausingConstants *EigenPodPausingConstantsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPodPausingConstants.Contract.EigenPodPausingConstantsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EigenPodPausingConstants *EigenPodPausingConstantsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EigenPodPausingConstants.Contract.EigenPodPausingConstantsTransactor.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 (_EigenPodPausingConstants *EigenPodPausingConstantsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EigenPodPausingConstants.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 (_EigenPodPausingConstants *EigenPodPausingConstantsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenPodPausingConstants.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EigenPodPausingConstants *EigenPodPausingConstantsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EigenPodPausingConstants.Contract.contract.Transact(opts, method, params...) +} diff --git a/pkg/bindings/EigenPodPausingConstants/tmp.abi b/pkg/bindings/EigenPodPausingConstants/tmp.abi new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/pkg/bindings/EigenPodPausingConstants/tmp.abi @@ -0,0 +1 @@ +[] diff --git a/pkg/bindings/EigenPodPausingConstants/tmp.bin b/pkg/bindings/EigenPodPausingConstants/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/EigenPodPausingConstants/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/EigenStrategy/binding.go b/pkg/bindings/EigenStrategy/binding.go new file mode 100644 index 000000000..7d153e81f --- /dev/null +++ b/pkg/bindings/EigenStrategy/binding.go @@ -0,0 +1,1385 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package EigenStrategy + +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 +) + +// 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\":\"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\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162001bd238038062001bd2833981016040819052620000349162000116565b6001600160a01b038116608052806200004c62000054565b505062000148565b600054610100900460ff1615620000c15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000114576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012957600080fd5b81516001600160a01b03811681146200014157600080fd5b9392505050565b608051611a5962000179600039600081816101af015281816105ac01528181610a340152610aff0152611a596000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80637a8b2637116100c3578063ce7c2ac21161007c578063ce7c2ac2146102da578063d9caed12146102ed578063e3dae51c14610300578063f3e7387514610313578063fabc1cbc14610326578063fdc371ce1461033957600080fd5b80637a8b263714610260578063886f1195146102735780638c8710191461028c5780638f6a62401461029f578063ab5921e1146102b2578063c0c53b8b146102c757600080fd5b806347e7ef241161011557806347e7ef24146101e8578063485cc955146101fb578063553ca5f81461020e578063595c6a67146102215780635ac86ab7146102295780635c975abb1461025857600080fd5b806310d67a2f14610152578063136439dd146101675780632495a5991461017a57806339b70e38146101aa5780633a98ef39146101d1575b600080fd5b610165610160366004611653565b61034c565b005b610165610175366004611670565b610408565b60325461018d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61018d7f000000000000000000000000000000000000000000000000000000000000000081565b6101da60335481565b6040519081526020016101a1565b6101da6101f6366004611689565b61054c565b6101656102093660046116b5565b6106f0565b6101da61021c366004611653565b6107be565b6101656107d2565b6102486102373660046116ee565b6001805460ff9092161b9081161490565b60405190151581526020016101a1565b6001546101da565b6101da61026e366004611670565b61089e565b60005461018d906201000090046001600160a01b031681565b6101da61029a366004611670565b6108e9565b6101da6102ad366004611653565b6108f4565b6102ba610902565b6040516101a1919061173d565b6101656102d5366004611770565b610922565b6101da6102e8366004611653565b610a0c565b6101656102fb3660046117bb565b610aa1565b6101da61030e366004611670565b610c6a565b6101da610321366004611670565b610ca3565b610165610334366004611670565b610cae565b60645461018d906001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c391906117fc565b6001600160a01b0316336001600160a01b0316146103fc5760405162461bcd60e51b81526004016103f390611819565b60405180910390fd5b61040581610e0a565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104799190611863565b6104955760405162461bcd60e51b81526004016103f390611885565b6001548181161461050e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016103f3565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600180546000918291811614156105a15760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016103f3565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106195760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e6167657260448201526064016103f3565b6106238484610f0f565b60335460006106346103e8836118e3565b905060006103e8610643611023565b61064d91906118e3565b9050600061065b87836118fb565b9050806106688489611912565b6106729190611931565b9550856106d85760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b60648201526084016103f3565b6106e286856118e3565b603355505050505092915050565b600054610100900460ff16158080156107105750600054600160ff909116105b8061072a5750303b15801561072a575060005460ff166001145b6107465760405162461bcd60e51b81526004016103f390611953565b6000805460ff191660011790558015610769576000805461ff0019166101001790555b6107738383611095565b80156107b9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006107cc61026e83610a0c565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561081f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108439190611863565b61085f5760405162461bcd60e51b81526004016103f390611885565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e86033546108b191906118e3565b905060006103e86108c0611023565b6108ca91906118e3565b9050816108d78583611912565b6108e19190611931565b949350505050565b60006107cc82610c6a565b60006107cc61032183610a0c565b60606040518060800160405280604d81526020016119d7604d9139905090565b600054610100900460ff16158080156109425750600054600160ff909116105b8061095c5750303b15801561095c575060005460ff166001145b6109785760405162461bcd60e51b81526004016103f390611953565b6000805460ff19166001179055801561099b576000805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b0386161790556109c08383611095565b8015610a06576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa158015610a7d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc91906119a1565b6001805460029081161415610af45760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016103f3565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b6c5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e6167657260448201526064016103f3565b610b77848484611126565b60335480831115610c065760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a4016103f3565b6000610c146103e8836118e3565b905060006103e8610c23611023565b610c2d91906118e3565b9050600082610c3c8784611912565b610c469190611931565b9050610c5286856118fb565b603355610c608888836111c1565b5050505050505050565b6000806103e8603354610c7d91906118e3565b905060006103e8610c8c611023565b610c9691906118e3565b9050806108d78386611912565b60006107cc8261089e565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2591906117fc565b6001600160a01b0316336001600160a01b031614610d555760405162461bcd60e51b81526004016103f390611819565b600154198119600154191614610dd35760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016103f3565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610541565b6001600160a01b038116610e985760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016103f3565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b0383811691161480610f3857506064546001600160a01b038381169116145b610faa5760405162461bcd60e51b815260206004820152603760248201527f456967656e53747261746567792e6465706f7369743a2043616e206f6e6c792060448201527f6465706f7369742062454947454e206f7220454947454e00000000000000000060648201526084016103f3565b6064546001600160a01b038381169116141561101f57606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e90602401600060405180830381600087803b15801561100657600080fd5b505af115801561101a573d6000803e3d6000fd5b505050505b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561106c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109091906119a1565b905090565b600054610100900460ff166111005760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103f3565b603280546001600160a01b0319166001600160a01b03841617905561101f8160006112c2565b6032546001600160a01b038381169116148061114f57506064546001600160a01b038381169116145b6107b95760405162461bcd60e51b815260206004820152603960248201527f456967656e53747261746567792e77697468647261773a2043616e206f6e6c7960448201527f2077697468647261772062454947454e206f7220454947454e0000000000000060648201526084016103f3565b6064546001600160a01b03838116911614156112ae5760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af115801561122a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124e9190611863565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb090602401600060405180830381600087803b15801561129557600080fd5b505af11580156112a9573d6000803e3d6000fd5b505050505b6107b96001600160a01b03831684836113ae565b6000546201000090046001600160a01b03161580156112e957506001600160a01b03821615155b61136b5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016103f3565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261101f82610e0a565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526107b99286929160009161143e9185169084906114bb565b8051909150156107b9578080602001905181019061145c9190611863565b6107b95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103f3565b60606114ca84846000856114d4565b90505b9392505050565b6060824710156115355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103f3565b6001600160a01b0385163b61158c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103f3565b600080866001600160a01b031685876040516115a891906119ba565b60006040518083038185875af1925050503d80600081146115e5576040519150601f19603f3d011682016040523d82523d6000602084013e6115ea565b606091505b50915091506115fa828286611605565b979650505050505050565b606083156116145750816114cd565b8251156116245782518084602001fd5b8160405162461bcd60e51b81526004016103f3919061173d565b6001600160a01b038116811461040557600080fd5b60006020828403121561166557600080fd5b81356114cd8161163e565b60006020828403121561168257600080fd5b5035919050565b6000806040838503121561169c57600080fd5b82356116a78161163e565b946020939093013593505050565b600080604083850312156116c857600080fd5b82356116d38161163e565b915060208301356116e38161163e565b809150509250929050565b60006020828403121561170057600080fd5b813560ff811681146114cd57600080fd5b60005b8381101561172c578181015183820152602001611714565b83811115610a065750506000910152565b602081526000825180602084015261175c816040850160208701611711565b601f01601f19169190910160400192915050565b60008060006060848603121561178557600080fd5b83356117908161163e565b925060208401356117a08161163e565b915060408401356117b08161163e565b809150509250925092565b6000806000606084860312156117d057600080fd5b83356117db8161163e565b925060208401356117eb8161163e565b929592945050506040919091013590565b60006020828403121561180e57600080fd5b81516114cd8161163e565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561187557600080fd5b815180151581146114cd57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156118f6576118f66118cd565b500190565b60008282101561190d5761190d6118cd565b500390565b600081600019048311821515161561192c5761192c6118cd565b500290565b60008261194e57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156119b357600080fd5b5051919050565b600082516119cc818460208701611711565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a264697066735822122091303774325b6a8843b54c6eadd6cb6b215ab5b7b80d3603da29a7c9dd7709c764736f6c634300080c0033", +} + +// EigenStrategyABI is the input ABI used to generate the binding from. +// Deprecated: Use EigenStrategyMetaData.ABI instead. +var EigenStrategyABI = EigenStrategyMetaData.ABI + +// EigenStrategyBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use EigenStrategyMetaData.Bin instead. +var EigenStrategyBin = EigenStrategyMetaData.Bin + +// DeployEigenStrategy deploys a new Ethereum contract, binding an instance of EigenStrategy to it. +func DeployEigenStrategy(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address) (common.Address, *types.Transaction, *EigenStrategy, error) { + parsed, err := EigenStrategyMetaData.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(EigenStrategyBin), backend, _strategyManager) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &EigenStrategy{EigenStrategyCaller: EigenStrategyCaller{contract: contract}, EigenStrategyTransactor: EigenStrategyTransactor{contract: contract}, EigenStrategyFilterer: EigenStrategyFilterer{contract: contract}}, nil +} + +// EigenStrategy is an auto generated Go binding around an Ethereum contract. +type EigenStrategy struct { + EigenStrategyCaller // Read-only binding to the contract + EigenStrategyTransactor // Write-only binding to the contract + EigenStrategyFilterer // Log filterer for contract events +} + +// EigenStrategyCaller is an auto generated read-only Go binding around an Ethereum contract. +type EigenStrategyCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenStrategyTransactor is an auto generated write-only Go binding around an Ethereum contract. +type EigenStrategyTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenStrategyFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type EigenStrategyFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EigenStrategySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type EigenStrategySession struct { + Contract *EigenStrategy // 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 +} + +// EigenStrategyCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type EigenStrategyCallerSession struct { + Contract *EigenStrategyCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// EigenStrategyTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type EigenStrategyTransactorSession struct { + Contract *EigenStrategyTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// EigenStrategyRaw is an auto generated low-level Go binding around an Ethereum contract. +type EigenStrategyRaw struct { + Contract *EigenStrategy // Generic contract binding to access the raw methods on +} + +// EigenStrategyCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type EigenStrategyCallerRaw struct { + Contract *EigenStrategyCaller // Generic read-only contract binding to access the raw methods on +} + +// EigenStrategyTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type EigenStrategyTransactorRaw struct { + Contract *EigenStrategyTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewEigenStrategy creates a new instance of EigenStrategy, bound to a specific deployed contract. +func NewEigenStrategy(address common.Address, backend bind.ContractBackend) (*EigenStrategy, error) { + contract, err := bindEigenStrategy(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &EigenStrategy{EigenStrategyCaller: EigenStrategyCaller{contract: contract}, EigenStrategyTransactor: EigenStrategyTransactor{contract: contract}, EigenStrategyFilterer: EigenStrategyFilterer{contract: contract}}, nil +} + +// NewEigenStrategyCaller creates a new read-only instance of EigenStrategy, bound to a specific deployed contract. +func NewEigenStrategyCaller(address common.Address, caller bind.ContractCaller) (*EigenStrategyCaller, error) { + contract, err := bindEigenStrategy(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &EigenStrategyCaller{contract: contract}, nil +} + +// NewEigenStrategyTransactor creates a new write-only instance of EigenStrategy, bound to a specific deployed contract. +func NewEigenStrategyTransactor(address common.Address, transactor bind.ContractTransactor) (*EigenStrategyTransactor, error) { + contract, err := bindEigenStrategy(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &EigenStrategyTransactor{contract: contract}, nil +} + +// NewEigenStrategyFilterer creates a new log filterer instance of EigenStrategy, bound to a specific deployed contract. +func NewEigenStrategyFilterer(address common.Address, filterer bind.ContractFilterer) (*EigenStrategyFilterer, error) { + contract, err := bindEigenStrategy(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &EigenStrategyFilterer{contract: contract}, nil +} + +// bindEigenStrategy binds a generic wrapper to an already deployed contract. +func bindEigenStrategy(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := EigenStrategyMetaData.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 (_EigenStrategy *EigenStrategyRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EigenStrategy.Contract.EigenStrategyCaller.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 (_EigenStrategy *EigenStrategyRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenStrategy.Contract.EigenStrategyTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EigenStrategy *EigenStrategyRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EigenStrategy.Contract.EigenStrategyTransactor.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 (_EigenStrategy *EigenStrategyCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EigenStrategy.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 (_EigenStrategy *EigenStrategyTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenStrategy.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EigenStrategy *EigenStrategyTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EigenStrategy.Contract.contract.Transact(opts, method, params...) +} + +// EIGEN is a free data retrieval call binding the contract method 0xfdc371ce. +// +// Solidity: function EIGEN() view returns(address) +func (_EigenStrategy *EigenStrategyCaller) EIGEN(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenStrategy.contract.Call(opts, &out, "EIGEN") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EIGEN is a free data retrieval call binding the contract method 0xfdc371ce. +// +// Solidity: function EIGEN() view returns(address) +func (_EigenStrategy *EigenStrategySession) EIGEN() (common.Address, error) { + return _EigenStrategy.Contract.EIGEN(&_EigenStrategy.CallOpts) +} + +// EIGEN is a free data retrieval call binding the contract method 0xfdc371ce. +// +// Solidity: function EIGEN() view returns(address) +func (_EigenStrategy *EigenStrategyCallerSession) EIGEN() (common.Address, error) { + return _EigenStrategy.Contract.EIGEN(&_EigenStrategy.CallOpts) +} + +// Explanation is a free data retrieval call binding the contract method 0xab5921e1. +// +// Solidity: function explanation() pure returns(string) +func (_EigenStrategy *EigenStrategyCaller) Explanation(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _EigenStrategy.contract.Call(opts, &out, "explanation") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Explanation is a free data retrieval call binding the contract method 0xab5921e1. +// +// Solidity: function explanation() pure returns(string) +func (_EigenStrategy *EigenStrategySession) Explanation() (string, error) { + return _EigenStrategy.Contract.Explanation(&_EigenStrategy.CallOpts) +} + +// Explanation is a free data retrieval call binding the contract method 0xab5921e1. +// +// Solidity: function explanation() pure returns(string) +func (_EigenStrategy *EigenStrategyCallerSession) Explanation() (string, error) { + return _EigenStrategy.Contract.Explanation(&_EigenStrategy.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_EigenStrategy *EigenStrategyCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _EigenStrategy.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 (_EigenStrategy *EigenStrategySession) Paused(index uint8) (bool, error) { + return _EigenStrategy.Contract.Paused(&_EigenStrategy.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_EigenStrategy *EigenStrategyCallerSession) Paused(index uint8) (bool, error) { + return _EigenStrategy.Contract.Paused(&_EigenStrategy.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_EigenStrategy *EigenStrategyCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _EigenStrategy.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 (_EigenStrategy *EigenStrategySession) Paused0() (*big.Int, error) { + return _EigenStrategy.Contract.Paused0(&_EigenStrategy.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_EigenStrategy *EigenStrategyCallerSession) Paused0() (*big.Int, error) { + return _EigenStrategy.Contract.Paused0(&_EigenStrategy.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_EigenStrategy *EigenStrategyCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenStrategy.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 (_EigenStrategy *EigenStrategySession) PauserRegistry() (common.Address, error) { + return _EigenStrategy.Contract.PauserRegistry(&_EigenStrategy.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_EigenStrategy *EigenStrategyCallerSession) PauserRegistry() (common.Address, error) { + return _EigenStrategy.Contract.PauserRegistry(&_EigenStrategy.CallOpts) +} + +// Shares is a free data retrieval call binding the contract method 0xce7c2ac2. +// +// Solidity: function shares(address user) view returns(uint256) +func (_EigenStrategy *EigenStrategyCaller) Shares(opts *bind.CallOpts, user common.Address) (*big.Int, error) { + var out []interface{} + err := _EigenStrategy.contract.Call(opts, &out, "shares", user) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Shares is a free data retrieval call binding the contract method 0xce7c2ac2. +// +// Solidity: function shares(address user) view returns(uint256) +func (_EigenStrategy *EigenStrategySession) Shares(user common.Address) (*big.Int, error) { + return _EigenStrategy.Contract.Shares(&_EigenStrategy.CallOpts, user) +} + +// Shares is a free data retrieval call binding the contract method 0xce7c2ac2. +// +// Solidity: function shares(address user) view returns(uint256) +func (_EigenStrategy *EigenStrategyCallerSession) Shares(user common.Address) (*big.Int, error) { + return _EigenStrategy.Contract.Shares(&_EigenStrategy.CallOpts, user) +} + +// SharesToUnderlying is a free data retrieval call binding the contract method 0xf3e73875. +// +// Solidity: function sharesToUnderlying(uint256 amountShares) view returns(uint256) +func (_EigenStrategy *EigenStrategyCaller) SharesToUnderlying(opts *bind.CallOpts, amountShares *big.Int) (*big.Int, error) { + var out []interface{} + err := _EigenStrategy.contract.Call(opts, &out, "sharesToUnderlying", amountShares) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SharesToUnderlying is a free data retrieval call binding the contract method 0xf3e73875. +// +// Solidity: function sharesToUnderlying(uint256 amountShares) view returns(uint256) +func (_EigenStrategy *EigenStrategySession) SharesToUnderlying(amountShares *big.Int) (*big.Int, error) { + return _EigenStrategy.Contract.SharesToUnderlying(&_EigenStrategy.CallOpts, amountShares) +} + +// SharesToUnderlying is a free data retrieval call binding the contract method 0xf3e73875. +// +// Solidity: function sharesToUnderlying(uint256 amountShares) view returns(uint256) +func (_EigenStrategy *EigenStrategyCallerSession) SharesToUnderlying(amountShares *big.Int) (*big.Int, error) { + return _EigenStrategy.Contract.SharesToUnderlying(&_EigenStrategy.CallOpts, amountShares) +} + +// SharesToUnderlyingView is a free data retrieval call binding the contract method 0x7a8b2637. +// +// Solidity: function sharesToUnderlyingView(uint256 amountShares) view returns(uint256) +func (_EigenStrategy *EigenStrategyCaller) SharesToUnderlyingView(opts *bind.CallOpts, amountShares *big.Int) (*big.Int, error) { + var out []interface{} + err := _EigenStrategy.contract.Call(opts, &out, "sharesToUnderlyingView", amountShares) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SharesToUnderlyingView is a free data retrieval call binding the contract method 0x7a8b2637. +// +// Solidity: function sharesToUnderlyingView(uint256 amountShares) view returns(uint256) +func (_EigenStrategy *EigenStrategySession) SharesToUnderlyingView(amountShares *big.Int) (*big.Int, error) { + return _EigenStrategy.Contract.SharesToUnderlyingView(&_EigenStrategy.CallOpts, amountShares) +} + +// SharesToUnderlyingView is a free data retrieval call binding the contract method 0x7a8b2637. +// +// Solidity: function sharesToUnderlyingView(uint256 amountShares) view returns(uint256) +func (_EigenStrategy *EigenStrategyCallerSession) SharesToUnderlyingView(amountShares *big.Int) (*big.Int, error) { + return _EigenStrategy.Contract.SharesToUnderlyingView(&_EigenStrategy.CallOpts, amountShares) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_EigenStrategy *EigenStrategyCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenStrategy.contract.Call(opts, &out, "strategyManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_EigenStrategy *EigenStrategySession) StrategyManager() (common.Address, error) { + return _EigenStrategy.Contract.StrategyManager(&_EigenStrategy.CallOpts) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_EigenStrategy *EigenStrategyCallerSession) StrategyManager() (common.Address, error) { + return _EigenStrategy.Contract.StrategyManager(&_EigenStrategy.CallOpts) +} + +// TotalShares is a free data retrieval call binding the contract method 0x3a98ef39. +// +// Solidity: function totalShares() view returns(uint256) +func (_EigenStrategy *EigenStrategyCaller) TotalShares(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _EigenStrategy.contract.Call(opts, &out, "totalShares") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalShares is a free data retrieval call binding the contract method 0x3a98ef39. +// +// Solidity: function totalShares() view returns(uint256) +func (_EigenStrategy *EigenStrategySession) TotalShares() (*big.Int, error) { + return _EigenStrategy.Contract.TotalShares(&_EigenStrategy.CallOpts) +} + +// TotalShares is a free data retrieval call binding the contract method 0x3a98ef39. +// +// Solidity: function totalShares() view returns(uint256) +func (_EigenStrategy *EigenStrategyCallerSession) TotalShares() (*big.Int, error) { + return _EigenStrategy.Contract.TotalShares(&_EigenStrategy.CallOpts) +} + +// UnderlyingToShares is a free data retrieval call binding the contract method 0x8c871019. +// +// Solidity: function underlyingToShares(uint256 amountUnderlying) view returns(uint256) +func (_EigenStrategy *EigenStrategyCaller) UnderlyingToShares(opts *bind.CallOpts, amountUnderlying *big.Int) (*big.Int, error) { + var out []interface{} + err := _EigenStrategy.contract.Call(opts, &out, "underlyingToShares", amountUnderlying) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// UnderlyingToShares is a free data retrieval call binding the contract method 0x8c871019. +// +// Solidity: function underlyingToShares(uint256 amountUnderlying) view returns(uint256) +func (_EigenStrategy *EigenStrategySession) UnderlyingToShares(amountUnderlying *big.Int) (*big.Int, error) { + return _EigenStrategy.Contract.UnderlyingToShares(&_EigenStrategy.CallOpts, amountUnderlying) +} + +// UnderlyingToShares is a free data retrieval call binding the contract method 0x8c871019. +// +// Solidity: function underlyingToShares(uint256 amountUnderlying) view returns(uint256) +func (_EigenStrategy *EigenStrategyCallerSession) UnderlyingToShares(amountUnderlying *big.Int) (*big.Int, error) { + return _EigenStrategy.Contract.UnderlyingToShares(&_EigenStrategy.CallOpts, amountUnderlying) +} + +// UnderlyingToSharesView is a free data retrieval call binding the contract method 0xe3dae51c. +// +// Solidity: function underlyingToSharesView(uint256 amountUnderlying) view returns(uint256) +func (_EigenStrategy *EigenStrategyCaller) UnderlyingToSharesView(opts *bind.CallOpts, amountUnderlying *big.Int) (*big.Int, error) { + var out []interface{} + err := _EigenStrategy.contract.Call(opts, &out, "underlyingToSharesView", amountUnderlying) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// UnderlyingToSharesView is a free data retrieval call binding the contract method 0xe3dae51c. +// +// Solidity: function underlyingToSharesView(uint256 amountUnderlying) view returns(uint256) +func (_EigenStrategy *EigenStrategySession) UnderlyingToSharesView(amountUnderlying *big.Int) (*big.Int, error) { + return _EigenStrategy.Contract.UnderlyingToSharesView(&_EigenStrategy.CallOpts, amountUnderlying) +} + +// UnderlyingToSharesView is a free data retrieval call binding the contract method 0xe3dae51c. +// +// Solidity: function underlyingToSharesView(uint256 amountUnderlying) view returns(uint256) +func (_EigenStrategy *EigenStrategyCallerSession) UnderlyingToSharesView(amountUnderlying *big.Int) (*big.Int, error) { + return _EigenStrategy.Contract.UnderlyingToSharesView(&_EigenStrategy.CallOpts, amountUnderlying) +} + +// UnderlyingToken is a free data retrieval call binding the contract method 0x2495a599. +// +// Solidity: function underlyingToken() view returns(address) +func (_EigenStrategy *EigenStrategyCaller) UnderlyingToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EigenStrategy.contract.Call(opts, &out, "underlyingToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// UnderlyingToken is a free data retrieval call binding the contract method 0x2495a599. +// +// Solidity: function underlyingToken() view returns(address) +func (_EigenStrategy *EigenStrategySession) UnderlyingToken() (common.Address, error) { + return _EigenStrategy.Contract.UnderlyingToken(&_EigenStrategy.CallOpts) +} + +// UnderlyingToken is a free data retrieval call binding the contract method 0x2495a599. +// +// Solidity: function underlyingToken() view returns(address) +func (_EigenStrategy *EigenStrategyCallerSession) UnderlyingToken() (common.Address, error) { + return _EigenStrategy.Contract.UnderlyingToken(&_EigenStrategy.CallOpts) +} + +// UserUnderlyingView is a free data retrieval call binding the contract method 0x553ca5f8. +// +// Solidity: function userUnderlyingView(address user) view returns(uint256) +func (_EigenStrategy *EigenStrategyCaller) UserUnderlyingView(opts *bind.CallOpts, user common.Address) (*big.Int, error) { + var out []interface{} + err := _EigenStrategy.contract.Call(opts, &out, "userUnderlyingView", user) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// UserUnderlyingView is a free data retrieval call binding the contract method 0x553ca5f8. +// +// Solidity: function userUnderlyingView(address user) view returns(uint256) +func (_EigenStrategy *EigenStrategySession) UserUnderlyingView(user common.Address) (*big.Int, error) { + return _EigenStrategy.Contract.UserUnderlyingView(&_EigenStrategy.CallOpts, user) +} + +// UserUnderlyingView is a free data retrieval call binding the contract method 0x553ca5f8. +// +// Solidity: function userUnderlyingView(address user) view returns(uint256) +func (_EigenStrategy *EigenStrategyCallerSession) UserUnderlyingView(user common.Address) (*big.Int, error) { + return _EigenStrategy.Contract.UserUnderlyingView(&_EigenStrategy.CallOpts, user) +} + +// Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. +// +// Solidity: function deposit(address token, uint256 amount) returns(uint256 newShares) +func (_EigenStrategy *EigenStrategyTransactor) Deposit(opts *bind.TransactOpts, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _EigenStrategy.contract.Transact(opts, "deposit", token, amount) +} + +// Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. +// +// Solidity: function deposit(address token, uint256 amount) returns(uint256 newShares) +func (_EigenStrategy *EigenStrategySession) Deposit(token common.Address, amount *big.Int) (*types.Transaction, error) { + return _EigenStrategy.Contract.Deposit(&_EigenStrategy.TransactOpts, token, amount) +} + +// Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. +// +// Solidity: function deposit(address token, uint256 amount) returns(uint256 newShares) +func (_EigenStrategy *EigenStrategyTransactorSession) Deposit(token common.Address, amount *big.Int) (*types.Transaction, error) { + return _EigenStrategy.Contract.Deposit(&_EigenStrategy.TransactOpts, token, amount) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _underlyingToken, address _pauserRegistry) returns() +func (_EigenStrategy *EigenStrategyTransactor) Initialize(opts *bind.TransactOpts, _underlyingToken common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _EigenStrategy.contract.Transact(opts, "initialize", _underlyingToken, _pauserRegistry) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _underlyingToken, address _pauserRegistry) returns() +func (_EigenStrategy *EigenStrategySession) Initialize(_underlyingToken common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _EigenStrategy.Contract.Initialize(&_EigenStrategy.TransactOpts, _underlyingToken, _pauserRegistry) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _underlyingToken, address _pauserRegistry) returns() +func (_EigenStrategy *EigenStrategyTransactorSession) Initialize(_underlyingToken common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _EigenStrategy.Contract.Initialize(&_EigenStrategy.TransactOpts, _underlyingToken, _pauserRegistry) +} + +// Initialize0 is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address _EIGEN, address _bEIGEN, address _pauserRegistry) returns() +func (_EigenStrategy *EigenStrategyTransactor) Initialize0(opts *bind.TransactOpts, _EIGEN common.Address, _bEIGEN common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _EigenStrategy.contract.Transact(opts, "initialize0", _EIGEN, _bEIGEN, _pauserRegistry) +} + +// Initialize0 is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address _EIGEN, address _bEIGEN, address _pauserRegistry) returns() +func (_EigenStrategy *EigenStrategySession) Initialize0(_EIGEN common.Address, _bEIGEN common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _EigenStrategy.Contract.Initialize0(&_EigenStrategy.TransactOpts, _EIGEN, _bEIGEN, _pauserRegistry) +} + +// Initialize0 is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address _EIGEN, address _bEIGEN, address _pauserRegistry) returns() +func (_EigenStrategy *EigenStrategyTransactorSession) Initialize0(_EIGEN common.Address, _bEIGEN common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _EigenStrategy.Contract.Initialize0(&_EigenStrategy.TransactOpts, _EIGEN, _bEIGEN, _pauserRegistry) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_EigenStrategy *EigenStrategyTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenStrategy.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_EigenStrategy *EigenStrategySession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenStrategy.Contract.Pause(&_EigenStrategy.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_EigenStrategy *EigenStrategyTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenStrategy.Contract.Pause(&_EigenStrategy.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_EigenStrategy *EigenStrategyTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EigenStrategy.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_EigenStrategy *EigenStrategySession) PauseAll() (*types.Transaction, error) { + return _EigenStrategy.Contract.PauseAll(&_EigenStrategy.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_EigenStrategy *EigenStrategyTransactorSession) PauseAll() (*types.Transaction, error) { + return _EigenStrategy.Contract.PauseAll(&_EigenStrategy.TransactOpts) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_EigenStrategy *EigenStrategyTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _EigenStrategy.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_EigenStrategy *EigenStrategySession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _EigenStrategy.Contract.SetPauserRegistry(&_EigenStrategy.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_EigenStrategy *EigenStrategyTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _EigenStrategy.Contract.SetPauserRegistry(&_EigenStrategy.TransactOpts, newPauserRegistry) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_EigenStrategy *EigenStrategyTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenStrategy.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_EigenStrategy *EigenStrategySession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenStrategy.Contract.Unpause(&_EigenStrategy.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_EigenStrategy *EigenStrategyTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _EigenStrategy.Contract.Unpause(&_EigenStrategy.TransactOpts, newPausedStatus) +} + +// UserUnderlying is a paid mutator transaction binding the contract method 0x8f6a6240. +// +// Solidity: function userUnderlying(address user) returns(uint256) +func (_EigenStrategy *EigenStrategyTransactor) UserUnderlying(opts *bind.TransactOpts, user common.Address) (*types.Transaction, error) { + return _EigenStrategy.contract.Transact(opts, "userUnderlying", user) +} + +// UserUnderlying is a paid mutator transaction binding the contract method 0x8f6a6240. +// +// Solidity: function userUnderlying(address user) returns(uint256) +func (_EigenStrategy *EigenStrategySession) UserUnderlying(user common.Address) (*types.Transaction, error) { + return _EigenStrategy.Contract.UserUnderlying(&_EigenStrategy.TransactOpts, user) +} + +// UserUnderlying is a paid mutator transaction binding the contract method 0x8f6a6240. +// +// Solidity: function userUnderlying(address user) returns(uint256) +func (_EigenStrategy *EigenStrategyTransactorSession) UserUnderlying(user common.Address) (*types.Transaction, error) { + return _EigenStrategy.Contract.UserUnderlying(&_EigenStrategy.TransactOpts, user) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address recipient, address token, uint256 amountShares) returns() +func (_EigenStrategy *EigenStrategyTransactor) Withdraw(opts *bind.TransactOpts, recipient common.Address, token common.Address, amountShares *big.Int) (*types.Transaction, error) { + return _EigenStrategy.contract.Transact(opts, "withdraw", recipient, token, amountShares) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address recipient, address token, uint256 amountShares) returns() +func (_EigenStrategy *EigenStrategySession) Withdraw(recipient common.Address, token common.Address, amountShares *big.Int) (*types.Transaction, error) { + return _EigenStrategy.Contract.Withdraw(&_EigenStrategy.TransactOpts, recipient, token, amountShares) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address recipient, address token, uint256 amountShares) returns() +func (_EigenStrategy *EigenStrategyTransactorSession) Withdraw(recipient common.Address, token common.Address, amountShares *big.Int) (*types.Transaction, error) { + return _EigenStrategy.Contract.Withdraw(&_EigenStrategy.TransactOpts, recipient, token, amountShares) +} + +// EigenStrategyInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the EigenStrategy contract. +type EigenStrategyInitializedIterator struct { + Event *EigenStrategyInitialized // 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 *EigenStrategyInitializedIterator) 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(EigenStrategyInitialized) + 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(EigenStrategyInitialized) + 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 *EigenStrategyInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenStrategyInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenStrategyInitialized represents a Initialized event raised by the EigenStrategy contract. +type EigenStrategyInitialized 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 (_EigenStrategy *EigenStrategyFilterer) FilterInitialized(opts *bind.FilterOpts) (*EigenStrategyInitializedIterator, error) { + + logs, sub, err := _EigenStrategy.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &EigenStrategyInitializedIterator{contract: _EigenStrategy.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 (_EigenStrategy *EigenStrategyFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *EigenStrategyInitialized) (event.Subscription, error) { + + logs, sub, err := _EigenStrategy.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(EigenStrategyInitialized) + if err := _EigenStrategy.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 (_EigenStrategy *EigenStrategyFilterer) ParseInitialized(log types.Log) (*EigenStrategyInitialized, error) { + event := new(EigenStrategyInitialized) + if err := _EigenStrategy.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenStrategyPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the EigenStrategy contract. +type EigenStrategyPausedIterator struct { + Event *EigenStrategyPaused // 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 *EigenStrategyPausedIterator) 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(EigenStrategyPaused) + 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(EigenStrategyPaused) + 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 *EigenStrategyPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenStrategyPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenStrategyPaused represents a Paused event raised by the EigenStrategy contract. +type EigenStrategyPaused 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 (_EigenStrategy *EigenStrategyFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*EigenStrategyPausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _EigenStrategy.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &EigenStrategyPausedIterator{contract: _EigenStrategy.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 (_EigenStrategy *EigenStrategyFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *EigenStrategyPaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _EigenStrategy.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(EigenStrategyPaused) + if err := _EigenStrategy.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 (_EigenStrategy *EigenStrategyFilterer) ParsePaused(log types.Log) (*EigenStrategyPaused, error) { + event := new(EigenStrategyPaused) + if err := _EigenStrategy.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenStrategyPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the EigenStrategy contract. +type EigenStrategyPauserRegistrySetIterator struct { + Event *EigenStrategyPauserRegistrySet // 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 *EigenStrategyPauserRegistrySetIterator) 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(EigenStrategyPauserRegistrySet) + 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(EigenStrategyPauserRegistrySet) + 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 *EigenStrategyPauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenStrategyPauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenStrategyPauserRegistrySet represents a PauserRegistrySet event raised by the EigenStrategy contract. +type EigenStrategyPauserRegistrySet 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 (_EigenStrategy *EigenStrategyFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*EigenStrategyPauserRegistrySetIterator, error) { + + logs, sub, err := _EigenStrategy.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &EigenStrategyPauserRegistrySetIterator{contract: _EigenStrategy.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 (_EigenStrategy *EigenStrategyFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *EigenStrategyPauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _EigenStrategy.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(EigenStrategyPauserRegistrySet) + if err := _EigenStrategy.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 (_EigenStrategy *EigenStrategyFilterer) ParsePauserRegistrySet(log types.Log) (*EigenStrategyPauserRegistrySet, error) { + event := new(EigenStrategyPauserRegistrySet) + if err := _EigenStrategy.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EigenStrategyUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the EigenStrategy contract. +type EigenStrategyUnpausedIterator struct { + Event *EigenStrategyUnpaused // 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 *EigenStrategyUnpausedIterator) 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(EigenStrategyUnpaused) + 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(EigenStrategyUnpaused) + 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 *EigenStrategyUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EigenStrategyUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EigenStrategyUnpaused represents a Unpaused event raised by the EigenStrategy contract. +type EigenStrategyUnpaused 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 (_EigenStrategy *EigenStrategyFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*EigenStrategyUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _EigenStrategy.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &EigenStrategyUnpausedIterator{contract: _EigenStrategy.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 (_EigenStrategy *EigenStrategyFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *EigenStrategyUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _EigenStrategy.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(EigenStrategyUnpaused) + if err := _EigenStrategy.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 (_EigenStrategy *EigenStrategyFilterer) ParseUnpaused(log types.Log) (*EigenStrategyUnpaused, error) { + event := new(EigenStrategyUnpaused) + if err := _EigenStrategy.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/EigenStrategy/tmp.abi b/pkg/bindings/EigenStrategy/tmp.abi new file mode 100644 index 000000000..f92d5d265 --- /dev/null +++ b/pkg/bindings/EigenStrategy/tmp.abi @@ -0,0 +1,460 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_strategyManager", + "type": "address", + "internalType": "contract IStrategyManager" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "EIGEN", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IEigen" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deposit", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "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": "contract IERC20" + }, + { + "name": "_pauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_EIGEN", + "type": "address", + "internalType": "contract IEigen" + }, + { + "name": "_bEIGEN", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "_pauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "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": "contract IPauserRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setPauserRegistry", + "inputs": [ + { + "name": "newPauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "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": "contract IStrategyManager" + } + ], + "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": "contract IERC20" + } + ], + "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": "contract IERC20" + }, + { + "name": "amountShares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "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": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "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 + } +] diff --git a/pkg/bindings/EigenStrategy/tmp.bin b/pkg/bindings/EigenStrategy/tmp.bin new file mode 100644 index 000000000..d67ed58e3 --- /dev/null +++ b/pkg/bindings/EigenStrategy/tmp.bin @@ -0,0 +1 @@ +0x60a06040523480156200001157600080fd5b5060405162001bd238038062001bd2833981016040819052620000349162000116565b6001600160a01b038116608052806200004c62000054565b505062000148565b600054610100900460ff1615620000c15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000114576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012957600080fd5b81516001600160a01b03811681146200014157600080fd5b9392505050565b608051611a5962000179600039600081816101af015281816105ac01528181610a340152610aff0152611a596000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80637a8b2637116100c3578063ce7c2ac21161007c578063ce7c2ac2146102da578063d9caed12146102ed578063e3dae51c14610300578063f3e7387514610313578063fabc1cbc14610326578063fdc371ce1461033957600080fd5b80637a8b263714610260578063886f1195146102735780638c8710191461028c5780638f6a62401461029f578063ab5921e1146102b2578063c0c53b8b146102c757600080fd5b806347e7ef241161011557806347e7ef24146101e8578063485cc955146101fb578063553ca5f81461020e578063595c6a67146102215780635ac86ab7146102295780635c975abb1461025857600080fd5b806310d67a2f14610152578063136439dd146101675780632495a5991461017a57806339b70e38146101aa5780633a98ef39146101d1575b600080fd5b610165610160366004611653565b61034c565b005b610165610175366004611670565b610408565b60325461018d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61018d7f000000000000000000000000000000000000000000000000000000000000000081565b6101da60335481565b6040519081526020016101a1565b6101da6101f6366004611689565b61054c565b6101656102093660046116b5565b6106f0565b6101da61021c366004611653565b6107be565b6101656107d2565b6102486102373660046116ee565b6001805460ff9092161b9081161490565b60405190151581526020016101a1565b6001546101da565b6101da61026e366004611670565b61089e565b60005461018d906201000090046001600160a01b031681565b6101da61029a366004611670565b6108e9565b6101da6102ad366004611653565b6108f4565b6102ba610902565b6040516101a1919061173d565b6101656102d5366004611770565b610922565b6101da6102e8366004611653565b610a0c565b6101656102fb3660046117bb565b610aa1565b6101da61030e366004611670565b610c6a565b6101da610321366004611670565b610ca3565b610165610334366004611670565b610cae565b60645461018d906001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c391906117fc565b6001600160a01b0316336001600160a01b0316146103fc5760405162461bcd60e51b81526004016103f390611819565b60405180910390fd5b61040581610e0a565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104799190611863565b6104955760405162461bcd60e51b81526004016103f390611885565b6001548181161461050e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016103f3565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600180546000918291811614156105a15760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016103f3565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106195760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e6167657260448201526064016103f3565b6106238484610f0f565b60335460006106346103e8836118e3565b905060006103e8610643611023565b61064d91906118e3565b9050600061065b87836118fb565b9050806106688489611912565b6106729190611931565b9550856106d85760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b60648201526084016103f3565b6106e286856118e3565b603355505050505092915050565b600054610100900460ff16158080156107105750600054600160ff909116105b8061072a5750303b15801561072a575060005460ff166001145b6107465760405162461bcd60e51b81526004016103f390611953565b6000805460ff191660011790558015610769576000805461ff0019166101001790555b6107738383611095565b80156107b9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006107cc61026e83610a0c565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561081f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108439190611863565b61085f5760405162461bcd60e51b81526004016103f390611885565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e86033546108b191906118e3565b905060006103e86108c0611023565b6108ca91906118e3565b9050816108d78583611912565b6108e19190611931565b949350505050565b60006107cc82610c6a565b60006107cc61032183610a0c565b60606040518060800160405280604d81526020016119d7604d9139905090565b600054610100900460ff16158080156109425750600054600160ff909116105b8061095c5750303b15801561095c575060005460ff166001145b6109785760405162461bcd60e51b81526004016103f390611953565b6000805460ff19166001179055801561099b576000805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b0386161790556109c08383611095565b8015610a06576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa158015610a7d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc91906119a1565b6001805460029081161415610af45760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016103f3565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b6c5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e6167657260448201526064016103f3565b610b77848484611126565b60335480831115610c065760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a4016103f3565b6000610c146103e8836118e3565b905060006103e8610c23611023565b610c2d91906118e3565b9050600082610c3c8784611912565b610c469190611931565b9050610c5286856118fb565b603355610c608888836111c1565b5050505050505050565b6000806103e8603354610c7d91906118e3565b905060006103e8610c8c611023565b610c9691906118e3565b9050806108d78386611912565b60006107cc8261089e565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2591906117fc565b6001600160a01b0316336001600160a01b031614610d555760405162461bcd60e51b81526004016103f390611819565b600154198119600154191614610dd35760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016103f3565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610541565b6001600160a01b038116610e985760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016103f3565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b0383811691161480610f3857506064546001600160a01b038381169116145b610faa5760405162461bcd60e51b815260206004820152603760248201527f456967656e53747261746567792e6465706f7369743a2043616e206f6e6c792060448201527f6465706f7369742062454947454e206f7220454947454e00000000000000000060648201526084016103f3565b6064546001600160a01b038381169116141561101f57606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e90602401600060405180830381600087803b15801561100657600080fd5b505af115801561101a573d6000803e3d6000fd5b505050505b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561106c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109091906119a1565b905090565b600054610100900460ff166111005760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103f3565b603280546001600160a01b0319166001600160a01b03841617905561101f8160006112c2565b6032546001600160a01b038381169116148061114f57506064546001600160a01b038381169116145b6107b95760405162461bcd60e51b815260206004820152603960248201527f456967656e53747261746567792e77697468647261773a2043616e206f6e6c7960448201527f2077697468647261772062454947454e206f7220454947454e0000000000000060648201526084016103f3565b6064546001600160a01b03838116911614156112ae5760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af115801561122a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124e9190611863565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb090602401600060405180830381600087803b15801561129557600080fd5b505af11580156112a9573d6000803e3d6000fd5b505050505b6107b96001600160a01b03831684836113ae565b6000546201000090046001600160a01b03161580156112e957506001600160a01b03821615155b61136b5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016103f3565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261101f82610e0a565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526107b99286929160009161143e9185169084906114bb565b8051909150156107b9578080602001905181019061145c9190611863565b6107b95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103f3565b60606114ca84846000856114d4565b90505b9392505050565b6060824710156115355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103f3565b6001600160a01b0385163b61158c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103f3565b600080866001600160a01b031685876040516115a891906119ba565b60006040518083038185875af1925050503d80600081146115e5576040519150601f19603f3d011682016040523d82523d6000602084013e6115ea565b606091505b50915091506115fa828286611605565b979650505050505050565b606083156116145750816114cd565b8251156116245782518084602001fd5b8160405162461bcd60e51b81526004016103f3919061173d565b6001600160a01b038116811461040557600080fd5b60006020828403121561166557600080fd5b81356114cd8161163e565b60006020828403121561168257600080fd5b5035919050565b6000806040838503121561169c57600080fd5b82356116a78161163e565b946020939093013593505050565b600080604083850312156116c857600080fd5b82356116d38161163e565b915060208301356116e38161163e565b809150509250929050565b60006020828403121561170057600080fd5b813560ff811681146114cd57600080fd5b60005b8381101561172c578181015183820152602001611714565b83811115610a065750506000910152565b602081526000825180602084015261175c816040850160208701611711565b601f01601f19169190910160400192915050565b60008060006060848603121561178557600080fd5b83356117908161163e565b925060208401356117a08161163e565b915060408401356117b08161163e565b809150509250925092565b6000806000606084860312156117d057600080fd5b83356117db8161163e565b925060208401356117eb8161163e565b929592945050506040919091013590565b60006020828403121561180e57600080fd5b81516114cd8161163e565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561187557600080fd5b815180151581146114cd57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156118f6576118f66118cd565b500190565b60008282101561190d5761190d6118cd565b500390565b600081600019048311821515161561192c5761192c6118cd565b500290565b60008261194e57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156119b357600080fd5b5051919050565b600082516119cc818460208701611711565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a264697066735822122091303774325b6a8843b54c6eadd6cb6b215ab5b7b80d3603da29a7c9dd7709c764736f6c634300080c0033 diff --git a/pkg/bindings/Endian/binding.go b/pkg/bindings/Endian/binding.go new file mode 100644 index 000000000..971d34dd7 --- /dev/null +++ b/pkg/bindings/Endian/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 Endian + +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 +) + +// EndianMetaData contains all meta data concerning the Endian contract. +var EndianMetaData = &bind.MetaData{ + ABI: "[]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209aaa7fc8edeceb818497dc77ef1ff3830403a669bcd0014f8af1e039bd09c23b64736f6c634300080c0033", +} + +// EndianABI is the input ABI used to generate the binding from. +// Deprecated: Use EndianMetaData.ABI instead. +var EndianABI = EndianMetaData.ABI + +// EndianBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use EndianMetaData.Bin instead. +var EndianBin = EndianMetaData.Bin + +// DeployEndian deploys a new Ethereum contract, binding an instance of Endian to it. +func DeployEndian(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Endian, error) { + parsed, err := EndianMetaData.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(EndianBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Endian{EndianCaller: EndianCaller{contract: contract}, EndianTransactor: EndianTransactor{contract: contract}, EndianFilterer: EndianFilterer{contract: contract}}, nil +} + +// Endian is an auto generated Go binding around an Ethereum contract. +type Endian struct { + EndianCaller // Read-only binding to the contract + EndianTransactor // Write-only binding to the contract + EndianFilterer // Log filterer for contract events +} + +// EndianCaller is an auto generated read-only Go binding around an Ethereum contract. +type EndianCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EndianTransactor is an auto generated write-only Go binding around an Ethereum contract. +type EndianTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EndianFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type EndianFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EndianSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type EndianSession struct { + Contract *Endian // 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 +} + +// EndianCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type EndianCallerSession struct { + Contract *EndianCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// EndianTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type EndianTransactorSession struct { + Contract *EndianTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// EndianRaw is an auto generated low-level Go binding around an Ethereum contract. +type EndianRaw struct { + Contract *Endian // Generic contract binding to access the raw methods on +} + +// EndianCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type EndianCallerRaw struct { + Contract *EndianCaller // Generic read-only contract binding to access the raw methods on +} + +// EndianTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type EndianTransactorRaw struct { + Contract *EndianTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewEndian creates a new instance of Endian, bound to a specific deployed contract. +func NewEndian(address common.Address, backend bind.ContractBackend) (*Endian, error) { + contract, err := bindEndian(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Endian{EndianCaller: EndianCaller{contract: contract}, EndianTransactor: EndianTransactor{contract: contract}, EndianFilterer: EndianFilterer{contract: contract}}, nil +} + +// NewEndianCaller creates a new read-only instance of Endian, bound to a specific deployed contract. +func NewEndianCaller(address common.Address, caller bind.ContractCaller) (*EndianCaller, error) { + contract, err := bindEndian(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &EndianCaller{contract: contract}, nil +} + +// NewEndianTransactor creates a new write-only instance of Endian, bound to a specific deployed contract. +func NewEndianTransactor(address common.Address, transactor bind.ContractTransactor) (*EndianTransactor, error) { + contract, err := bindEndian(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &EndianTransactor{contract: contract}, nil +} + +// NewEndianFilterer creates a new log filterer instance of Endian, bound to a specific deployed contract. +func NewEndianFilterer(address common.Address, filterer bind.ContractFilterer) (*EndianFilterer, error) { + contract, err := bindEndian(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &EndianFilterer{contract: contract}, nil +} + +// bindEndian binds a generic wrapper to an already deployed contract. +func bindEndian(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := EndianMetaData.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 (_Endian *EndianRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Endian.Contract.EndianCaller.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 (_Endian *EndianRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Endian.Contract.EndianTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Endian *EndianRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Endian.Contract.EndianTransactor.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 (_Endian *EndianCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Endian.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 (_Endian *EndianTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Endian.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Endian *EndianTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Endian.Contract.contract.Transact(opts, method, params...) +} diff --git a/pkg/bindings/Endian/tmp.abi b/pkg/bindings/Endian/tmp.abi new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/pkg/bindings/Endian/tmp.abi @@ -0,0 +1 @@ +[] diff --git a/pkg/bindings/Endian/tmp.bin b/pkg/bindings/Endian/tmp.bin new file mode 100644 index 000000000..8e008f276 --- /dev/null +++ b/pkg/bindings/Endian/tmp.bin @@ -0,0 +1 @@ +0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209aaa7fc8edeceb818497dc77ef1ff3830403a669bcd0014f8af1e039bd09c23b64736f6c634300080c0033 diff --git a/pkg/bindings/IAVSDirectory/binding.go b/pkg/bindings/IAVSDirectory/binding.go new file mode 100644 index 000000000..6ee8f3ce0 --- /dev/null +++ b/pkg/bindings/IAVSDirectory/binding.go @@ -0,0 +1,643 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IAVSDirectory + +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 +) + +// ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithSaltAndExpiry struct { + Signature []byte + Salt [32]byte + Expiry *big.Int +} + +// 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}]", +} + +// IAVSDirectoryABI is the input ABI used to generate the binding from. +// Deprecated: Use IAVSDirectoryMetaData.ABI instead. +var IAVSDirectoryABI = IAVSDirectoryMetaData.ABI + +// IAVSDirectory is an auto generated Go binding around an Ethereum contract. +type IAVSDirectory struct { + IAVSDirectoryCaller // Read-only binding to the contract + IAVSDirectoryTransactor // Write-only binding to the contract + IAVSDirectoryFilterer // Log filterer for contract events +} + +// IAVSDirectoryCaller is an auto generated read-only Go binding around an Ethereum contract. +type IAVSDirectoryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IAVSDirectoryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IAVSDirectoryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IAVSDirectoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IAVSDirectoryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IAVSDirectorySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IAVSDirectorySession struct { + Contract *IAVSDirectory // 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 +} + +// IAVSDirectoryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IAVSDirectoryCallerSession struct { + Contract *IAVSDirectoryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IAVSDirectoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IAVSDirectoryTransactorSession struct { + Contract *IAVSDirectoryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IAVSDirectoryRaw is an auto generated low-level Go binding around an Ethereum contract. +type IAVSDirectoryRaw struct { + Contract *IAVSDirectory // Generic contract binding to access the raw methods on +} + +// IAVSDirectoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IAVSDirectoryCallerRaw struct { + Contract *IAVSDirectoryCaller // Generic read-only contract binding to access the raw methods on +} + +// IAVSDirectoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IAVSDirectoryTransactorRaw struct { + Contract *IAVSDirectoryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIAVSDirectory creates a new instance of IAVSDirectory, bound to a specific deployed contract. +func NewIAVSDirectory(address common.Address, backend bind.ContractBackend) (*IAVSDirectory, error) { + contract, err := bindIAVSDirectory(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IAVSDirectory{IAVSDirectoryCaller: IAVSDirectoryCaller{contract: contract}, IAVSDirectoryTransactor: IAVSDirectoryTransactor{contract: contract}, IAVSDirectoryFilterer: IAVSDirectoryFilterer{contract: contract}}, nil +} + +// NewIAVSDirectoryCaller creates a new read-only instance of IAVSDirectory, bound to a specific deployed contract. +func NewIAVSDirectoryCaller(address common.Address, caller bind.ContractCaller) (*IAVSDirectoryCaller, error) { + contract, err := bindIAVSDirectory(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IAVSDirectoryCaller{contract: contract}, nil +} + +// NewIAVSDirectoryTransactor creates a new write-only instance of IAVSDirectory, bound to a specific deployed contract. +func NewIAVSDirectoryTransactor(address common.Address, transactor bind.ContractTransactor) (*IAVSDirectoryTransactor, error) { + contract, err := bindIAVSDirectory(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IAVSDirectoryTransactor{contract: contract}, nil +} + +// NewIAVSDirectoryFilterer creates a new log filterer instance of IAVSDirectory, bound to a specific deployed contract. +func NewIAVSDirectoryFilterer(address common.Address, filterer bind.ContractFilterer) (*IAVSDirectoryFilterer, error) { + contract, err := bindIAVSDirectory(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IAVSDirectoryFilterer{contract: contract}, nil +} + +// bindIAVSDirectory binds a generic wrapper to an already deployed contract. +func bindIAVSDirectory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IAVSDirectoryMetaData.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 (_IAVSDirectory *IAVSDirectoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IAVSDirectory.Contract.IAVSDirectoryCaller.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 (_IAVSDirectory *IAVSDirectoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IAVSDirectory.Contract.IAVSDirectoryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IAVSDirectory *IAVSDirectoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IAVSDirectory.Contract.IAVSDirectoryTransactor.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 (_IAVSDirectory *IAVSDirectoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IAVSDirectory.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IAVSDirectory *IAVSDirectoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IAVSDirectory.Contract.contract.Transact(opts, method, params...) +} + +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_IAVSDirectory *IAVSDirectoryCaller) OPERATORAVSREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "OPERATOR_AVS_REGISTRATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_IAVSDirectory *IAVSDirectorySession) OPERATORAVSREGISTRATIONTYPEHASH() ([32]byte, error) { + return _IAVSDirectory.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_IAVSDirectory.CallOpts) +} + +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_IAVSDirectory *IAVSDirectoryCallerSession) OPERATORAVSREGISTRATIONTYPEHASH() ([32]byte, error) { + return _IAVSDirectory.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_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) +func (_IAVSDirectory *IAVSDirectoryCaller) CalculateOperatorAVSRegistrationDigestHash(opts *bind.CallOpts, operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "calculateOperatorAVSRegistrationDigestHash", operator, avs, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// 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) +func (_IAVSDirectory *IAVSDirectorySession) CalculateOperatorAVSRegistrationDigestHash(operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _IAVSDirectory.Contract.CalculateOperatorAVSRegistrationDigestHash(&_IAVSDirectory.CallOpts, operator, avs, 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) +func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateOperatorAVSRegistrationDigestHash(operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _IAVSDirectory.Contract.CalculateOperatorAVSRegistrationDigestHash(&_IAVSDirectory.CallOpts, operator, avs, salt, expiry) +} + +// 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) +} + +// 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) +} + +// 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) +} + +// 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 +} + +// 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 +} diff --git a/pkg/bindings/IAVSDirectory/tmp.abi b/pkg/bindings/IAVSDirectory/tmp.abi new file mode 100644 index 000000000..5db9b7e2e --- /dev/null +++ b/pkg/bindings/IAVSDirectory/tmp.abi @@ -0,0 +1,178 @@ +[ + { + "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": "struct ISignatureUtils.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": "enum IAVSDirectory.OperatorAVSRegistrationStatus" + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/IAVSDirectory/tmp.bin b/pkg/bindings/IAVSDirectory/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IAVSDirectory/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/IBackingEigen/binding.go b/pkg/bindings/IBackingEigen/binding.go new file mode 100644 index 000000000..bc72362ae --- /dev/null +++ b/pkg/bindings/IBackingEigen/binding.go @@ -0,0 +1,770 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IBackingEigen + +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 +) + +// IBackingEigenMetaData contains all meta data concerning the IBackingEigen contract. +var IBackingEigenMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"CLOCK_MODE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"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\":\"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\":\"clock\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint48\",\"internalType\":\"uint48\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableTransferRestrictions\",\"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\":\"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\":\"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\":\"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}]", +} + +// IBackingEigenABI is the input ABI used to generate the binding from. +// Deprecated: Use IBackingEigenMetaData.ABI instead. +var IBackingEigenABI = IBackingEigenMetaData.ABI + +// IBackingEigen is an auto generated Go binding around an Ethereum contract. +type IBackingEigen struct { + IBackingEigenCaller // Read-only binding to the contract + IBackingEigenTransactor // Write-only binding to the contract + IBackingEigenFilterer // Log filterer for contract events +} + +// IBackingEigenCaller is an auto generated read-only Go binding around an Ethereum contract. +type IBackingEigenCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBackingEigenTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IBackingEigenTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBackingEigenFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IBackingEigenFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBackingEigenSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IBackingEigenSession struct { + Contract *IBackingEigen // 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 +} + +// IBackingEigenCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IBackingEigenCallerSession struct { + Contract *IBackingEigenCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IBackingEigenTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IBackingEigenTransactorSession struct { + Contract *IBackingEigenTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IBackingEigenRaw is an auto generated low-level Go binding around an Ethereum contract. +type IBackingEigenRaw struct { + Contract *IBackingEigen // Generic contract binding to access the raw methods on +} + +// IBackingEigenCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IBackingEigenCallerRaw struct { + Contract *IBackingEigenCaller // Generic read-only contract binding to access the raw methods on +} + +// IBackingEigenTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IBackingEigenTransactorRaw struct { + Contract *IBackingEigenTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIBackingEigen creates a new instance of IBackingEigen, bound to a specific deployed contract. +func NewIBackingEigen(address common.Address, backend bind.ContractBackend) (*IBackingEigen, error) { + contract, err := bindIBackingEigen(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IBackingEigen{IBackingEigenCaller: IBackingEigenCaller{contract: contract}, IBackingEigenTransactor: IBackingEigenTransactor{contract: contract}, IBackingEigenFilterer: IBackingEigenFilterer{contract: contract}}, nil +} + +// NewIBackingEigenCaller creates a new read-only instance of IBackingEigen, bound to a specific deployed contract. +func NewIBackingEigenCaller(address common.Address, caller bind.ContractCaller) (*IBackingEigenCaller, error) { + contract, err := bindIBackingEigen(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IBackingEigenCaller{contract: contract}, nil +} + +// NewIBackingEigenTransactor creates a new write-only instance of IBackingEigen, bound to a specific deployed contract. +func NewIBackingEigenTransactor(address common.Address, transactor bind.ContractTransactor) (*IBackingEigenTransactor, error) { + contract, err := bindIBackingEigen(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IBackingEigenTransactor{contract: contract}, nil +} + +// NewIBackingEigenFilterer creates a new log filterer instance of IBackingEigen, bound to a specific deployed contract. +func NewIBackingEigenFilterer(address common.Address, filterer bind.ContractFilterer) (*IBackingEigenFilterer, error) { + contract, err := bindIBackingEigen(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IBackingEigenFilterer{contract: contract}, nil +} + +// bindIBackingEigen binds a generic wrapper to an already deployed contract. +func bindIBackingEigen(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IBackingEigenMetaData.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 (_IBackingEigen *IBackingEigenRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IBackingEigen.Contract.IBackingEigenCaller.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 (_IBackingEigen *IBackingEigenRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBackingEigen.Contract.IBackingEigenTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IBackingEigen *IBackingEigenRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IBackingEigen.Contract.IBackingEigenTransactor.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 (_IBackingEigen *IBackingEigenCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IBackingEigen.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 (_IBackingEigen *IBackingEigenTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBackingEigen.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IBackingEigen *IBackingEigenTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IBackingEigen.Contract.contract.Transact(opts, method, params...) +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() pure returns(string) +func (_IBackingEigen *IBackingEigenCaller) CLOCKMODE(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _IBackingEigen.contract.Call(opts, &out, "CLOCK_MODE") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() pure returns(string) +func (_IBackingEigen *IBackingEigenSession) CLOCKMODE() (string, error) { + return _IBackingEigen.Contract.CLOCKMODE(&_IBackingEigen.CallOpts) +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() pure returns(string) +func (_IBackingEigen *IBackingEigenCallerSession) CLOCKMODE() (string, error) { + return _IBackingEigen.Contract.CLOCKMODE(&_IBackingEigen.CallOpts) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_IBackingEigen *IBackingEigenCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _IBackingEigen.contract.Call(opts, &out, "allowance", owner, spender) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_IBackingEigen *IBackingEigenSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _IBackingEigen.Contract.Allowance(&_IBackingEigen.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_IBackingEigen *IBackingEigenCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _IBackingEigen.Contract.Allowance(&_IBackingEigen.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_IBackingEigen *IBackingEigenCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _IBackingEigen.contract.Call(opts, &out, "balanceOf", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_IBackingEigen *IBackingEigenSession) BalanceOf(account common.Address) (*big.Int, error) { + return _IBackingEigen.Contract.BalanceOf(&_IBackingEigen.CallOpts, account) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_IBackingEigen *IBackingEigenCallerSession) BalanceOf(account common.Address) (*big.Int, error) { + return _IBackingEigen.Contract.BalanceOf(&_IBackingEigen.CallOpts, account) +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_IBackingEigen *IBackingEigenCaller) Clock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IBackingEigen.contract.Call(opts, &out, "clock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_IBackingEigen *IBackingEigenSession) Clock() (*big.Int, error) { + return _IBackingEigen.Contract.Clock(&_IBackingEigen.CallOpts) +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_IBackingEigen *IBackingEigenCallerSession) Clock() (*big.Int, error) { + return _IBackingEigen.Contract.Clock(&_IBackingEigen.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_IBackingEigen *IBackingEigenCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IBackingEigen.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_IBackingEigen *IBackingEigenSession) TotalSupply() (*big.Int, error) { + return _IBackingEigen.Contract.TotalSupply(&_IBackingEigen.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_IBackingEigen *IBackingEigenCallerSession) TotalSupply() (*big.Int, error) { + return _IBackingEigen.Contract.TotalSupply(&_IBackingEigen.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_IBackingEigen *IBackingEigenTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _IBackingEigen.contract.Transact(opts, "approve", spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_IBackingEigen *IBackingEigenSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _IBackingEigen.Contract.Approve(&_IBackingEigen.TransactOpts, spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_IBackingEigen *IBackingEigenTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _IBackingEigen.Contract.Approve(&_IBackingEigen.TransactOpts, spender, amount) +} + +// DisableTransferRestrictions is a paid mutator transaction binding the contract method 0xeb415f45. +// +// Solidity: function disableTransferRestrictions() returns() +func (_IBackingEigen *IBackingEigenTransactor) DisableTransferRestrictions(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBackingEigen.contract.Transact(opts, "disableTransferRestrictions") +} + +// DisableTransferRestrictions is a paid mutator transaction binding the contract method 0xeb415f45. +// +// Solidity: function disableTransferRestrictions() returns() +func (_IBackingEigen *IBackingEigenSession) DisableTransferRestrictions() (*types.Transaction, error) { + return _IBackingEigen.Contract.DisableTransferRestrictions(&_IBackingEigen.TransactOpts) +} + +// DisableTransferRestrictions is a paid mutator transaction binding the contract method 0xeb415f45. +// +// Solidity: function disableTransferRestrictions() returns() +func (_IBackingEigen *IBackingEigenTransactorSession) DisableTransferRestrictions() (*types.Transaction, error) { + return _IBackingEigen.Contract.DisableTransferRestrictions(&_IBackingEigen.TransactOpts) +} + +// SetAllowedFrom is a paid mutator transaction binding the contract method 0x1ffacdef. +// +// Solidity: function setAllowedFrom(address from, bool isAllowedFrom) returns() +func (_IBackingEigen *IBackingEigenTransactor) SetAllowedFrom(opts *bind.TransactOpts, from common.Address, isAllowedFrom bool) (*types.Transaction, error) { + return _IBackingEigen.contract.Transact(opts, "setAllowedFrom", from, isAllowedFrom) +} + +// SetAllowedFrom is a paid mutator transaction binding the contract method 0x1ffacdef. +// +// Solidity: function setAllowedFrom(address from, bool isAllowedFrom) returns() +func (_IBackingEigen *IBackingEigenSession) SetAllowedFrom(from common.Address, isAllowedFrom bool) (*types.Transaction, error) { + return _IBackingEigen.Contract.SetAllowedFrom(&_IBackingEigen.TransactOpts, from, isAllowedFrom) +} + +// SetAllowedFrom is a paid mutator transaction binding the contract method 0x1ffacdef. +// +// Solidity: function setAllowedFrom(address from, bool isAllowedFrom) returns() +func (_IBackingEigen *IBackingEigenTransactorSession) SetAllowedFrom(from common.Address, isAllowedFrom bool) (*types.Transaction, error) { + return _IBackingEigen.Contract.SetAllowedFrom(&_IBackingEigen.TransactOpts, from, isAllowedFrom) +} + +// SetAllowedTo is a paid mutator transaction binding the contract method 0xb8c25594. +// +// Solidity: function setAllowedTo(address to, bool isAllowedTo) returns() +func (_IBackingEigen *IBackingEigenTransactor) SetAllowedTo(opts *bind.TransactOpts, to common.Address, isAllowedTo bool) (*types.Transaction, error) { + return _IBackingEigen.contract.Transact(opts, "setAllowedTo", to, isAllowedTo) +} + +// SetAllowedTo is a paid mutator transaction binding the contract method 0xb8c25594. +// +// Solidity: function setAllowedTo(address to, bool isAllowedTo) returns() +func (_IBackingEigen *IBackingEigenSession) SetAllowedTo(to common.Address, isAllowedTo bool) (*types.Transaction, error) { + return _IBackingEigen.Contract.SetAllowedTo(&_IBackingEigen.TransactOpts, to, isAllowedTo) +} + +// SetAllowedTo is a paid mutator transaction binding the contract method 0xb8c25594. +// +// Solidity: function setAllowedTo(address to, bool isAllowedTo) returns() +func (_IBackingEigen *IBackingEigenTransactorSession) SetAllowedTo(to common.Address, isAllowedTo bool) (*types.Transaction, error) { + return _IBackingEigen.Contract.SetAllowedTo(&_IBackingEigen.TransactOpts, to, isAllowedTo) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_IBackingEigen *IBackingEigenTransactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IBackingEigen.contract.Transact(opts, "transfer", to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_IBackingEigen *IBackingEigenSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IBackingEigen.Contract.Transfer(&_IBackingEigen.TransactOpts, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_IBackingEigen *IBackingEigenTransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IBackingEigen.Contract.Transfer(&_IBackingEigen.TransactOpts, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_IBackingEigen *IBackingEigenTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IBackingEigen.contract.Transact(opts, "transferFrom", from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_IBackingEigen *IBackingEigenSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IBackingEigen.Contract.TransferFrom(&_IBackingEigen.TransactOpts, from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_IBackingEigen *IBackingEigenTransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IBackingEigen.Contract.TransferFrom(&_IBackingEigen.TransactOpts, from, to, amount) +} + +// IBackingEigenApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the IBackingEigen contract. +type IBackingEigenApprovalIterator struct { + Event *IBackingEigenApproval // 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 *IBackingEigenApprovalIterator) 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(IBackingEigenApproval) + 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(IBackingEigenApproval) + 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 *IBackingEigenApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBackingEigenApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBackingEigenApproval represents a Approval event raised by the IBackingEigen contract. +type IBackingEigenApproval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_IBackingEigen *IBackingEigenFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*IBackingEigenApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _IBackingEigen.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &IBackingEigenApprovalIterator{contract: _IBackingEigen.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_IBackingEigen *IBackingEigenFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IBackingEigenApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _IBackingEigen.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + 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(IBackingEigenApproval) + if err := _IBackingEigen.contract.UnpackLog(event, "Approval", 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 +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_IBackingEigen *IBackingEigenFilterer) ParseApproval(log types.Log) (*IBackingEigenApproval, error) { + event := new(IBackingEigenApproval) + if err := _IBackingEigen.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBackingEigenTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the IBackingEigen contract. +type IBackingEigenTransferIterator struct { + Event *IBackingEigenTransfer // 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 *IBackingEigenTransferIterator) 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(IBackingEigenTransfer) + 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(IBackingEigenTransfer) + 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 *IBackingEigenTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBackingEigenTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBackingEigenTransfer represents a Transfer event raised by the IBackingEigen contract. +type IBackingEigenTransfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_IBackingEigen *IBackingEigenFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*IBackingEigenTransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IBackingEigen.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &IBackingEigenTransferIterator{contract: _IBackingEigen.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_IBackingEigen *IBackingEigenFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IBackingEigenTransfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IBackingEigen.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + 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(IBackingEigenTransfer) + if err := _IBackingEigen.contract.UnpackLog(event, "Transfer", 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 +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_IBackingEigen *IBackingEigenFilterer) ParseTransfer(log types.Log) (*IBackingEigenTransfer, error) { + event := new(IBackingEigenTransfer) + if err := _IBackingEigen.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IBackingEigen/tmp.abi b/pkg/bindings/IBackingEigen/tmp.abi new file mode 100644 index 000000000..963997665 --- /dev/null +++ b/pkg/bindings/IBackingEigen/tmp.abi @@ -0,0 +1,254 @@ +[ + { + "type": "function", + "name": "CLOCK_MODE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "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": "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": "clock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "disableTransferRestrictions", + "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": "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": "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": "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 + } +] diff --git a/pkg/bindings/IBackingEigen/tmp.bin b/pkg/bindings/IBackingEigen/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IBackingEigen/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/IBeaconChainOracle/binding.go b/pkg/bindings/IBeaconChainOracle/binding.go new file mode 100644 index 000000000..f46878adf --- /dev/null +++ b/pkg/bindings/IBeaconChainOracle/binding.go @@ -0,0 +1,212 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IBeaconChainOracle + +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 +) + +// IBeaconChainOracleMetaData contains all meta data concerning the IBeaconChainOracle contract. +var IBeaconChainOracleMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"timestampToBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"}]", +} + +// IBeaconChainOracleABI is the input ABI used to generate the binding from. +// Deprecated: Use IBeaconChainOracleMetaData.ABI instead. +var IBeaconChainOracleABI = IBeaconChainOracleMetaData.ABI + +// IBeaconChainOracle is an auto generated Go binding around an Ethereum contract. +type IBeaconChainOracle struct { + IBeaconChainOracleCaller // Read-only binding to the contract + IBeaconChainOracleTransactor // Write-only binding to the contract + IBeaconChainOracleFilterer // Log filterer for contract events +} + +// IBeaconChainOracleCaller is an auto generated read-only Go binding around an Ethereum contract. +type IBeaconChainOracleCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBeaconChainOracleTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IBeaconChainOracleTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBeaconChainOracleFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IBeaconChainOracleFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBeaconChainOracleSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IBeaconChainOracleSession struct { + Contract *IBeaconChainOracle // 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 +} + +// IBeaconChainOracleCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IBeaconChainOracleCallerSession struct { + Contract *IBeaconChainOracleCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IBeaconChainOracleTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IBeaconChainOracleTransactorSession struct { + Contract *IBeaconChainOracleTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IBeaconChainOracleRaw is an auto generated low-level Go binding around an Ethereum contract. +type IBeaconChainOracleRaw struct { + Contract *IBeaconChainOracle // Generic contract binding to access the raw methods on +} + +// IBeaconChainOracleCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IBeaconChainOracleCallerRaw struct { + Contract *IBeaconChainOracleCaller // Generic read-only contract binding to access the raw methods on +} + +// IBeaconChainOracleTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IBeaconChainOracleTransactorRaw struct { + Contract *IBeaconChainOracleTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIBeaconChainOracle creates a new instance of IBeaconChainOracle, bound to a specific deployed contract. +func NewIBeaconChainOracle(address common.Address, backend bind.ContractBackend) (*IBeaconChainOracle, error) { + contract, err := bindIBeaconChainOracle(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IBeaconChainOracle{IBeaconChainOracleCaller: IBeaconChainOracleCaller{contract: contract}, IBeaconChainOracleTransactor: IBeaconChainOracleTransactor{contract: contract}, IBeaconChainOracleFilterer: IBeaconChainOracleFilterer{contract: contract}}, nil +} + +// NewIBeaconChainOracleCaller creates a new read-only instance of IBeaconChainOracle, bound to a specific deployed contract. +func NewIBeaconChainOracleCaller(address common.Address, caller bind.ContractCaller) (*IBeaconChainOracleCaller, error) { + contract, err := bindIBeaconChainOracle(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IBeaconChainOracleCaller{contract: contract}, nil +} + +// NewIBeaconChainOracleTransactor creates a new write-only instance of IBeaconChainOracle, bound to a specific deployed contract. +func NewIBeaconChainOracleTransactor(address common.Address, transactor bind.ContractTransactor) (*IBeaconChainOracleTransactor, error) { + contract, err := bindIBeaconChainOracle(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IBeaconChainOracleTransactor{contract: contract}, nil +} + +// NewIBeaconChainOracleFilterer creates a new log filterer instance of IBeaconChainOracle, bound to a specific deployed contract. +func NewIBeaconChainOracleFilterer(address common.Address, filterer bind.ContractFilterer) (*IBeaconChainOracleFilterer, error) { + contract, err := bindIBeaconChainOracle(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IBeaconChainOracleFilterer{contract: contract}, nil +} + +// bindIBeaconChainOracle binds a generic wrapper to an already deployed contract. +func bindIBeaconChainOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IBeaconChainOracleMetaData.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 (_IBeaconChainOracle *IBeaconChainOracleRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IBeaconChainOracle.Contract.IBeaconChainOracleCaller.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 (_IBeaconChainOracle *IBeaconChainOracleRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBeaconChainOracle.Contract.IBeaconChainOracleTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IBeaconChainOracle *IBeaconChainOracleRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IBeaconChainOracle.Contract.IBeaconChainOracleTransactor.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 (_IBeaconChainOracle *IBeaconChainOracleCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IBeaconChainOracle.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 (_IBeaconChainOracle *IBeaconChainOracleTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBeaconChainOracle.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IBeaconChainOracle *IBeaconChainOracleTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IBeaconChainOracle.Contract.contract.Transact(opts, method, params...) +} + +// TimestampToBlockRoot is a free data retrieval call binding the contract method 0x643599f2. +// +// Solidity: function timestampToBlockRoot(uint256 timestamp) view returns(bytes32) +func (_IBeaconChainOracle *IBeaconChainOracleCaller) TimestampToBlockRoot(opts *bind.CallOpts, timestamp *big.Int) ([32]byte, error) { + var out []interface{} + err := _IBeaconChainOracle.contract.Call(opts, &out, "timestampToBlockRoot", timestamp) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// TimestampToBlockRoot is a free data retrieval call binding the contract method 0x643599f2. +// +// Solidity: function timestampToBlockRoot(uint256 timestamp) view returns(bytes32) +func (_IBeaconChainOracle *IBeaconChainOracleSession) TimestampToBlockRoot(timestamp *big.Int) ([32]byte, error) { + return _IBeaconChainOracle.Contract.TimestampToBlockRoot(&_IBeaconChainOracle.CallOpts, timestamp) +} + +// TimestampToBlockRoot is a free data retrieval call binding the contract method 0x643599f2. +// +// Solidity: function timestampToBlockRoot(uint256 timestamp) view returns(bytes32) +func (_IBeaconChainOracle *IBeaconChainOracleCallerSession) TimestampToBlockRoot(timestamp *big.Int) ([32]byte, error) { + return _IBeaconChainOracle.Contract.TimestampToBlockRoot(&_IBeaconChainOracle.CallOpts, timestamp) +} diff --git a/pkg/bindings/IBeaconChainOracle/tmp.abi b/pkg/bindings/IBeaconChainOracle/tmp.abi new file mode 100644 index 000000000..4c6bd5130 --- /dev/null +++ b/pkg/bindings/IBeaconChainOracle/tmp.abi @@ -0,0 +1,21 @@ +[ + { + "type": "function", + "name": "timestampToBlockRoot", + "inputs": [ + { + "name": "timestamp", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + } +] diff --git a/pkg/bindings/IBeaconChainOracle/tmp.bin b/pkg/bindings/IBeaconChainOracle/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IBeaconChainOracle/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/IDelayedWithdrawalRouter/binding.go b/pkg/bindings/IDelayedWithdrawalRouter/binding.go new file mode 100644 index 000000000..86d4473b4 --- /dev/null +++ b/pkg/bindings/IDelayedWithdrawalRouter/binding.go @@ -0,0 +1,902 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IDelayedWithdrawalRouter + +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 +} + +// IDelayedWithdrawalRouterMetaData contains all meta data concerning the IDelayedWithdrawalRouter contract. +var IDelayedWithdrawalRouterMetaData = &bind.MetaData{ + ABI: "[{\"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\":\"maxNumberOfWithdrawalsToClaim\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimDelayedWithdrawals\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxNumberOfWithdrawalsToClaim\",\"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\":\"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\":\"setWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newValue\",\"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\":\"WithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", +} + +// IDelayedWithdrawalRouterABI is the input ABI used to generate the binding from. +// Deprecated: Use IDelayedWithdrawalRouterMetaData.ABI instead. +var IDelayedWithdrawalRouterABI = IDelayedWithdrawalRouterMetaData.ABI + +// IDelayedWithdrawalRouter is an auto generated Go binding around an Ethereum contract. +type IDelayedWithdrawalRouter struct { + IDelayedWithdrawalRouterCaller // Read-only binding to the contract + IDelayedWithdrawalRouterTransactor // Write-only binding to the contract + IDelayedWithdrawalRouterFilterer // Log filterer for contract events +} + +// IDelayedWithdrawalRouterCaller is an auto generated read-only Go binding around an Ethereum contract. +type IDelayedWithdrawalRouterCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IDelayedWithdrawalRouterTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IDelayedWithdrawalRouterTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IDelayedWithdrawalRouterFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IDelayedWithdrawalRouterFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IDelayedWithdrawalRouterSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IDelayedWithdrawalRouterSession struct { + Contract *IDelayedWithdrawalRouter // 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 +} + +// IDelayedWithdrawalRouterCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IDelayedWithdrawalRouterCallerSession struct { + Contract *IDelayedWithdrawalRouterCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IDelayedWithdrawalRouterTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IDelayedWithdrawalRouterTransactorSession struct { + Contract *IDelayedWithdrawalRouterTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IDelayedWithdrawalRouterRaw is an auto generated low-level Go binding around an Ethereum contract. +type IDelayedWithdrawalRouterRaw struct { + Contract *IDelayedWithdrawalRouter // Generic contract binding to access the raw methods on +} + +// IDelayedWithdrawalRouterCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IDelayedWithdrawalRouterCallerRaw struct { + Contract *IDelayedWithdrawalRouterCaller // Generic read-only contract binding to access the raw methods on +} + +// IDelayedWithdrawalRouterTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IDelayedWithdrawalRouterTransactorRaw struct { + Contract *IDelayedWithdrawalRouterTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIDelayedWithdrawalRouter creates a new instance of IDelayedWithdrawalRouter, bound to a specific deployed contract. +func NewIDelayedWithdrawalRouter(address common.Address, backend bind.ContractBackend) (*IDelayedWithdrawalRouter, error) { + contract, err := bindIDelayedWithdrawalRouter(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IDelayedWithdrawalRouter{IDelayedWithdrawalRouterCaller: IDelayedWithdrawalRouterCaller{contract: contract}, IDelayedWithdrawalRouterTransactor: IDelayedWithdrawalRouterTransactor{contract: contract}, IDelayedWithdrawalRouterFilterer: IDelayedWithdrawalRouterFilterer{contract: contract}}, nil +} + +// NewIDelayedWithdrawalRouterCaller creates a new read-only instance of IDelayedWithdrawalRouter, bound to a specific deployed contract. +func NewIDelayedWithdrawalRouterCaller(address common.Address, caller bind.ContractCaller) (*IDelayedWithdrawalRouterCaller, error) { + contract, err := bindIDelayedWithdrawalRouter(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IDelayedWithdrawalRouterCaller{contract: contract}, nil +} + +// NewIDelayedWithdrawalRouterTransactor creates a new write-only instance of IDelayedWithdrawalRouter, bound to a specific deployed contract. +func NewIDelayedWithdrawalRouterTransactor(address common.Address, transactor bind.ContractTransactor) (*IDelayedWithdrawalRouterTransactor, error) { + contract, err := bindIDelayedWithdrawalRouter(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IDelayedWithdrawalRouterTransactor{contract: contract}, nil +} + +// NewIDelayedWithdrawalRouterFilterer creates a new log filterer instance of IDelayedWithdrawalRouter, bound to a specific deployed contract. +func NewIDelayedWithdrawalRouterFilterer(address common.Address, filterer bind.ContractFilterer) (*IDelayedWithdrawalRouterFilterer, error) { + contract, err := bindIDelayedWithdrawalRouter(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IDelayedWithdrawalRouterFilterer{contract: contract}, nil +} + +// bindIDelayedWithdrawalRouter binds a generic wrapper to an already deployed contract. +func bindIDelayedWithdrawalRouter(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IDelayedWithdrawalRouterMetaData.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IDelayedWithdrawalRouter.Contract.IDelayedWithdrawalRouterCaller.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.Contract.IDelayedWithdrawalRouterTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.Contract.IDelayedWithdrawalRouterTransactor.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.Contract.contract.Transact(opts, method, params...) +} + +// CanClaimDelayedWithdrawal is a free data retrieval call binding the contract method 0x75608896. +// +// Solidity: function canClaimDelayedWithdrawal(address user, uint256 index) view returns(bool) +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCaller) CanClaimDelayedWithdrawal(opts *bind.CallOpts, user common.Address, index *big.Int) (bool, error) { + var out []interface{} + err := _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterSession) CanClaimDelayedWithdrawal(user common.Address, index *big.Int) (bool, error) { + return _IDelayedWithdrawalRouter.Contract.CanClaimDelayedWithdrawal(&_IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCallerSession) CanClaimDelayedWithdrawal(user common.Address, index *big.Int) (bool, error) { + return _IDelayedWithdrawalRouter.Contract.CanClaimDelayedWithdrawal(&_IDelayedWithdrawalRouter.CallOpts, user, index) +} + +// GetClaimableUserDelayedWithdrawals is a free data retrieval call binding the contract method 0x1f39d87f. +// +// Solidity: function getClaimableUserDelayedWithdrawals(address user) view returns((uint224,uint32)[]) +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCaller) GetClaimableUserDelayedWithdrawals(opts *bind.CallOpts, user common.Address) ([]IDelayedWithdrawalRouterDelayedWithdrawal, error) { + var out []interface{} + err := _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterSession) GetClaimableUserDelayedWithdrawals(user common.Address) ([]IDelayedWithdrawalRouterDelayedWithdrawal, error) { + return _IDelayedWithdrawalRouter.Contract.GetClaimableUserDelayedWithdrawals(&_IDelayedWithdrawalRouter.CallOpts, user) +} + +// GetClaimableUserDelayedWithdrawals is a free data retrieval call binding the contract method 0x1f39d87f. +// +// Solidity: function getClaimableUserDelayedWithdrawals(address user) view returns((uint224,uint32)[]) +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCallerSession) GetClaimableUserDelayedWithdrawals(user common.Address) ([]IDelayedWithdrawalRouterDelayedWithdrawal, error) { + return _IDelayedWithdrawalRouter.Contract.GetClaimableUserDelayedWithdrawals(&_IDelayedWithdrawalRouter.CallOpts, user) +} + +// GetUserDelayedWithdrawals is a free data retrieval call binding the contract method 0x3e1de008. +// +// Solidity: function getUserDelayedWithdrawals(address user) view returns((uint224,uint32)[]) +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCaller) GetUserDelayedWithdrawals(opts *bind.CallOpts, user common.Address) ([]IDelayedWithdrawalRouterDelayedWithdrawal, error) { + var out []interface{} + err := _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterSession) GetUserDelayedWithdrawals(user common.Address) ([]IDelayedWithdrawalRouterDelayedWithdrawal, error) { + return _IDelayedWithdrawalRouter.Contract.GetUserDelayedWithdrawals(&_IDelayedWithdrawalRouter.CallOpts, user) +} + +// GetUserDelayedWithdrawals is a free data retrieval call binding the contract method 0x3e1de008. +// +// Solidity: function getUserDelayedWithdrawals(address user) view returns((uint224,uint32)[]) +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCallerSession) GetUserDelayedWithdrawals(user common.Address) ([]IDelayedWithdrawalRouterDelayedWithdrawal, error) { + return _IDelayedWithdrawalRouter.Contract.GetUserDelayedWithdrawals(&_IDelayedWithdrawalRouter.CallOpts, user) +} + +// UserDelayedWithdrawalByIndex is a free data retrieval call binding the contract method 0x85594e58. +// +// Solidity: function userDelayedWithdrawalByIndex(address user, uint256 index) view returns((uint224,uint32)) +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCaller) UserDelayedWithdrawalByIndex(opts *bind.CallOpts, user common.Address, index *big.Int) (IDelayedWithdrawalRouterDelayedWithdrawal, error) { + var out []interface{} + err := _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterSession) UserDelayedWithdrawalByIndex(user common.Address, index *big.Int) (IDelayedWithdrawalRouterDelayedWithdrawal, error) { + return _IDelayedWithdrawalRouter.Contract.UserDelayedWithdrawalByIndex(&_IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCallerSession) UserDelayedWithdrawalByIndex(user common.Address, index *big.Int) (IDelayedWithdrawalRouterDelayedWithdrawal, error) { + return _IDelayedWithdrawalRouter.Contract.UserDelayedWithdrawalByIndex(&_IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCaller) UserWithdrawals(opts *bind.CallOpts, user common.Address) (IDelayedWithdrawalRouterUserDelayedWithdrawals, error) { + var out []interface{} + err := _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterSession) UserWithdrawals(user common.Address) (IDelayedWithdrawalRouterUserDelayedWithdrawals, error) { + return _IDelayedWithdrawalRouter.Contract.UserWithdrawals(&_IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCallerSession) UserWithdrawals(user common.Address) (IDelayedWithdrawalRouterUserDelayedWithdrawals, error) { + return _IDelayedWithdrawalRouter.Contract.UserWithdrawals(&_IDelayedWithdrawalRouter.CallOpts, user) +} + +// UserWithdrawalsLength is a free data retrieval call binding the contract method 0xe4f4f887. +// +// Solidity: function userWithdrawalsLength(address user) view returns(uint256) +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCaller) UserWithdrawalsLength(opts *bind.CallOpts, user common.Address) (*big.Int, error) { + var out []interface{} + err := _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterSession) UserWithdrawalsLength(user common.Address) (*big.Int, error) { + return _IDelayedWithdrawalRouter.Contract.UserWithdrawalsLength(&_IDelayedWithdrawalRouter.CallOpts, user) +} + +// UserWithdrawalsLength is a free data retrieval call binding the contract method 0xe4f4f887. +// +// Solidity: function userWithdrawalsLength(address user) view returns(uint256) +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCallerSession) UserWithdrawalsLength(user common.Address) (*big.Int, error) { + return _IDelayedWithdrawalRouter.Contract.UserWithdrawalsLength(&_IDelayedWithdrawalRouter.CallOpts, user) +} + +// WithdrawalDelayBlocks is a free data retrieval call binding the contract method 0x50f73e7c. +// +// Solidity: function withdrawalDelayBlocks() view returns(uint256) +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCaller) WithdrawalDelayBlocks(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterSession) WithdrawalDelayBlocks() (*big.Int, error) { + return _IDelayedWithdrawalRouter.Contract.WithdrawalDelayBlocks(&_IDelayedWithdrawalRouter.CallOpts) +} + +// WithdrawalDelayBlocks is a free data retrieval call binding the contract method 0x50f73e7c. +// +// Solidity: function withdrawalDelayBlocks() view returns(uint256) +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterCallerSession) WithdrawalDelayBlocks() (*big.Int, error) { + return _IDelayedWithdrawalRouter.Contract.WithdrawalDelayBlocks(&_IDelayedWithdrawalRouter.CallOpts) +} + +// ClaimDelayedWithdrawals is a paid mutator transaction binding the contract method 0xd44e1b76. +// +// Solidity: function claimDelayedWithdrawals(uint256 maxNumberOfWithdrawalsToClaim) returns() +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterTransactor) ClaimDelayedWithdrawals(opts *bind.TransactOpts, maxNumberOfWithdrawalsToClaim *big.Int) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.contract.Transact(opts, "claimDelayedWithdrawals", maxNumberOfWithdrawalsToClaim) +} + +// ClaimDelayedWithdrawals is a paid mutator transaction binding the contract method 0xd44e1b76. +// +// Solidity: function claimDelayedWithdrawals(uint256 maxNumberOfWithdrawalsToClaim) returns() +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterSession) ClaimDelayedWithdrawals(maxNumberOfWithdrawalsToClaim *big.Int) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.Contract.ClaimDelayedWithdrawals(&_IDelayedWithdrawalRouter.TransactOpts, maxNumberOfWithdrawalsToClaim) +} + +// ClaimDelayedWithdrawals is a paid mutator transaction binding the contract method 0xd44e1b76. +// +// Solidity: function claimDelayedWithdrawals(uint256 maxNumberOfWithdrawalsToClaim) returns() +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterTransactorSession) ClaimDelayedWithdrawals(maxNumberOfWithdrawalsToClaim *big.Int) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.Contract.ClaimDelayedWithdrawals(&_IDelayedWithdrawalRouter.TransactOpts, maxNumberOfWithdrawalsToClaim) +} + +// ClaimDelayedWithdrawals0 is a paid mutator transaction binding the contract method 0xe5db06c0. +// +// Solidity: function claimDelayedWithdrawals(address recipient, uint256 maxNumberOfWithdrawalsToClaim) returns() +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterTransactor) ClaimDelayedWithdrawals0(opts *bind.TransactOpts, recipient common.Address, maxNumberOfWithdrawalsToClaim *big.Int) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.contract.Transact(opts, "claimDelayedWithdrawals0", recipient, maxNumberOfWithdrawalsToClaim) +} + +// ClaimDelayedWithdrawals0 is a paid mutator transaction binding the contract method 0xe5db06c0. +// +// Solidity: function claimDelayedWithdrawals(address recipient, uint256 maxNumberOfWithdrawalsToClaim) returns() +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterSession) ClaimDelayedWithdrawals0(recipient common.Address, maxNumberOfWithdrawalsToClaim *big.Int) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.Contract.ClaimDelayedWithdrawals0(&_IDelayedWithdrawalRouter.TransactOpts, recipient, maxNumberOfWithdrawalsToClaim) +} + +// ClaimDelayedWithdrawals0 is a paid mutator transaction binding the contract method 0xe5db06c0. +// +// Solidity: function claimDelayedWithdrawals(address recipient, uint256 maxNumberOfWithdrawalsToClaim) returns() +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterTransactorSession) ClaimDelayedWithdrawals0(recipient common.Address, maxNumberOfWithdrawalsToClaim *big.Int) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.Contract.ClaimDelayedWithdrawals0(&_IDelayedWithdrawalRouter.TransactOpts, recipient, maxNumberOfWithdrawalsToClaim) +} + +// CreateDelayedWithdrawal is a paid mutator transaction binding the contract method 0xc0db354c. +// +// Solidity: function createDelayedWithdrawal(address podOwner, address recipient) payable returns() +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterTransactor) CreateDelayedWithdrawal(opts *bind.TransactOpts, podOwner common.Address, recipient common.Address) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterSession) CreateDelayedWithdrawal(podOwner common.Address, recipient common.Address) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.Contract.CreateDelayedWithdrawal(&_IDelayedWithdrawalRouter.TransactOpts, podOwner, recipient) +} + +// CreateDelayedWithdrawal is a paid mutator transaction binding the contract method 0xc0db354c. +// +// Solidity: function createDelayedWithdrawal(address podOwner, address recipient) payable returns() +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterTransactorSession) CreateDelayedWithdrawal(podOwner common.Address, recipient common.Address) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.Contract.CreateDelayedWithdrawal(&_IDelayedWithdrawalRouter.TransactOpts, podOwner, recipient) +} + +// SetWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x4d50f9a4. +// +// Solidity: function setWithdrawalDelayBlocks(uint256 newValue) returns() +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterTransactor) SetWithdrawalDelayBlocks(opts *bind.TransactOpts, newValue *big.Int) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.contract.Transact(opts, "setWithdrawalDelayBlocks", newValue) +} + +// SetWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x4d50f9a4. +// +// Solidity: function setWithdrawalDelayBlocks(uint256 newValue) returns() +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterSession) SetWithdrawalDelayBlocks(newValue *big.Int) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.Contract.SetWithdrawalDelayBlocks(&_IDelayedWithdrawalRouter.TransactOpts, newValue) +} + +// SetWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x4d50f9a4. +// +// Solidity: function setWithdrawalDelayBlocks(uint256 newValue) returns() +func (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterTransactorSession) SetWithdrawalDelayBlocks(newValue *big.Int) (*types.Transaction, error) { + return _IDelayedWithdrawalRouter.Contract.SetWithdrawalDelayBlocks(&_IDelayedWithdrawalRouter.TransactOpts, newValue) +} + +// IDelayedWithdrawalRouterDelayedWithdrawalCreatedIterator is returned from FilterDelayedWithdrawalCreated and is used to iterate over the raw logs and unpacked data for DelayedWithdrawalCreated events raised by the IDelayedWithdrawalRouter contract. +type IDelayedWithdrawalRouterDelayedWithdrawalCreatedIterator struct { + Event *IDelayedWithdrawalRouterDelayedWithdrawalCreated // 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 *IDelayedWithdrawalRouterDelayedWithdrawalCreatedIterator) 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(IDelayedWithdrawalRouterDelayedWithdrawalCreated) + 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(IDelayedWithdrawalRouterDelayedWithdrawalCreated) + 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 *IDelayedWithdrawalRouterDelayedWithdrawalCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelayedWithdrawalRouterDelayedWithdrawalCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelayedWithdrawalRouterDelayedWithdrawalCreated represents a DelayedWithdrawalCreated event raised by the IDelayedWithdrawalRouter contract. +type IDelayedWithdrawalRouterDelayedWithdrawalCreated 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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterFilterer) FilterDelayedWithdrawalCreated(opts *bind.FilterOpts) (*IDelayedWithdrawalRouterDelayedWithdrawalCreatedIterator, error) { + + logs, sub, err := _IDelayedWithdrawalRouter.contract.FilterLogs(opts, "DelayedWithdrawalCreated") + if err != nil { + return nil, err + } + return &IDelayedWithdrawalRouterDelayedWithdrawalCreatedIterator{contract: _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterFilterer) WatchDelayedWithdrawalCreated(opts *bind.WatchOpts, sink chan<- *IDelayedWithdrawalRouterDelayedWithdrawalCreated) (event.Subscription, error) { + + logs, sub, err := _IDelayedWithdrawalRouter.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(IDelayedWithdrawalRouterDelayedWithdrawalCreated) + if err := _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterFilterer) ParseDelayedWithdrawalCreated(log types.Log) (*IDelayedWithdrawalRouterDelayedWithdrawalCreated, error) { + event := new(IDelayedWithdrawalRouterDelayedWithdrawalCreated) + if err := _IDelayedWithdrawalRouter.contract.UnpackLog(event, "DelayedWithdrawalCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelayedWithdrawalRouterDelayedWithdrawalsClaimedIterator is returned from FilterDelayedWithdrawalsClaimed and is used to iterate over the raw logs and unpacked data for DelayedWithdrawalsClaimed events raised by the IDelayedWithdrawalRouter contract. +type IDelayedWithdrawalRouterDelayedWithdrawalsClaimedIterator struct { + Event *IDelayedWithdrawalRouterDelayedWithdrawalsClaimed // 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 *IDelayedWithdrawalRouterDelayedWithdrawalsClaimedIterator) 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(IDelayedWithdrawalRouterDelayedWithdrawalsClaimed) + 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(IDelayedWithdrawalRouterDelayedWithdrawalsClaimed) + 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 *IDelayedWithdrawalRouterDelayedWithdrawalsClaimedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelayedWithdrawalRouterDelayedWithdrawalsClaimedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelayedWithdrawalRouterDelayedWithdrawalsClaimed represents a DelayedWithdrawalsClaimed event raised by the IDelayedWithdrawalRouter contract. +type IDelayedWithdrawalRouterDelayedWithdrawalsClaimed 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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterFilterer) FilterDelayedWithdrawalsClaimed(opts *bind.FilterOpts) (*IDelayedWithdrawalRouterDelayedWithdrawalsClaimedIterator, error) { + + logs, sub, err := _IDelayedWithdrawalRouter.contract.FilterLogs(opts, "DelayedWithdrawalsClaimed") + if err != nil { + return nil, err + } + return &IDelayedWithdrawalRouterDelayedWithdrawalsClaimedIterator{contract: _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterFilterer) WatchDelayedWithdrawalsClaimed(opts *bind.WatchOpts, sink chan<- *IDelayedWithdrawalRouterDelayedWithdrawalsClaimed) (event.Subscription, error) { + + logs, sub, err := _IDelayedWithdrawalRouter.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(IDelayedWithdrawalRouterDelayedWithdrawalsClaimed) + if err := _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterFilterer) ParseDelayedWithdrawalsClaimed(log types.Log) (*IDelayedWithdrawalRouterDelayedWithdrawalsClaimed, error) { + event := new(IDelayedWithdrawalRouterDelayedWithdrawalsClaimed) + if err := _IDelayedWithdrawalRouter.contract.UnpackLog(event, "DelayedWithdrawalsClaimed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelayedWithdrawalRouterWithdrawalDelayBlocksSetIterator is returned from FilterWithdrawalDelayBlocksSet and is used to iterate over the raw logs and unpacked data for WithdrawalDelayBlocksSet events raised by the IDelayedWithdrawalRouter contract. +type IDelayedWithdrawalRouterWithdrawalDelayBlocksSetIterator struct { + Event *IDelayedWithdrawalRouterWithdrawalDelayBlocksSet // 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 *IDelayedWithdrawalRouterWithdrawalDelayBlocksSetIterator) 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(IDelayedWithdrawalRouterWithdrawalDelayBlocksSet) + 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(IDelayedWithdrawalRouterWithdrawalDelayBlocksSet) + 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 *IDelayedWithdrawalRouterWithdrawalDelayBlocksSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelayedWithdrawalRouterWithdrawalDelayBlocksSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelayedWithdrawalRouterWithdrawalDelayBlocksSet represents a WithdrawalDelayBlocksSet event raised by the IDelayedWithdrawalRouter contract. +type IDelayedWithdrawalRouterWithdrawalDelayBlocksSet 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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterFilterer) FilterWithdrawalDelayBlocksSet(opts *bind.FilterOpts) (*IDelayedWithdrawalRouterWithdrawalDelayBlocksSetIterator, error) { + + logs, sub, err := _IDelayedWithdrawalRouter.contract.FilterLogs(opts, "WithdrawalDelayBlocksSet") + if err != nil { + return nil, err + } + return &IDelayedWithdrawalRouterWithdrawalDelayBlocksSetIterator{contract: _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterFilterer) WatchWithdrawalDelayBlocksSet(opts *bind.WatchOpts, sink chan<- *IDelayedWithdrawalRouterWithdrawalDelayBlocksSet) (event.Subscription, error) { + + logs, sub, err := _IDelayedWithdrawalRouter.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(IDelayedWithdrawalRouterWithdrawalDelayBlocksSet) + if err := _IDelayedWithdrawalRouter.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 (_IDelayedWithdrawalRouter *IDelayedWithdrawalRouterFilterer) ParseWithdrawalDelayBlocksSet(log types.Log) (*IDelayedWithdrawalRouterWithdrawalDelayBlocksSet, error) { + event := new(IDelayedWithdrawalRouterWithdrawalDelayBlocksSet) + if err := _IDelayedWithdrawalRouter.contract.UnpackLog(event, "WithdrawalDelayBlocksSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IDelayedWithdrawalRouter/tmp.abi b/pkg/bindings/IDelayedWithdrawalRouter/tmp.abi new file mode 100644 index 000000000..865b60f09 --- /dev/null +++ b/pkg/bindings/IDelayedWithdrawalRouter/tmp.abi @@ -0,0 +1,336 @@ +[ + { + "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": "maxNumberOfWithdrawalsToClaim", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimDelayedWithdrawals", + "inputs": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "maxNumberOfWithdrawalsToClaim", + "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": "getClaimableUserDelayedWithdrawals", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct IDelayedWithdrawalRouter.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": "struct IDelayedWithdrawalRouter.DelayedWithdrawal[]", + "components": [ + { + "name": "amount", + "type": "uint224", + "internalType": "uint224" + }, + { + "name": "blockCreated", + "type": "uint32", + "internalType": "uint32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setWithdrawalDelayBlocks", + "inputs": [ + { + "name": "newValue", + "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": "struct IDelayedWithdrawalRouter.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": "struct IDelayedWithdrawalRouter.UserDelayedWithdrawals", + "components": [ + { + "name": "delayedWithdrawalsCompleted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "delayedWithdrawals", + "type": "tuple[]", + "internalType": "struct IDelayedWithdrawalRouter.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": "WithdrawalDelayBlocksSet", + "inputs": [ + { + "name": "previousValue", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newValue", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/IDelayedWithdrawalRouter/tmp.bin b/pkg/bindings/IDelayedWithdrawalRouter/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IDelayedWithdrawalRouter/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/IDelegationFaucet/binding.go b/pkg/bindings/IDelegationFaucet/binding.go new file mode 100644 index 000000000..9486264d0 --- /dev/null +++ b/pkg/bindings/IDelegationFaucet/binding.go @@ -0,0 +1,352 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IDelegationFaucet + +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 +) + +// IDelegationManagerQueuedWithdrawalParams is an auto generated low-level Go binding around an user-defined struct. +type IDelegationManagerQueuedWithdrawalParams struct { + Strategies []common.Address + Shares []*big.Int + Withdrawer common.Address +} + +// 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 +} + +// ISignatureUtilsSignatureWithExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithExpiry struct { + Signature []byte + Expiry *big.Int +} + +// 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\"}]", +} + +// IDelegationFaucetABI is the input ABI used to generate the binding from. +// Deprecated: Use IDelegationFaucetMetaData.ABI instead. +var IDelegationFaucetABI = IDelegationFaucetMetaData.ABI + +// IDelegationFaucet is an auto generated Go binding around an Ethereum contract. +type IDelegationFaucet struct { + IDelegationFaucetCaller // Read-only binding to the contract + IDelegationFaucetTransactor // Write-only binding to the contract + IDelegationFaucetFilterer // Log filterer for contract events +} + +// IDelegationFaucetCaller is an auto generated read-only Go binding around an Ethereum contract. +type IDelegationFaucetCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IDelegationFaucetTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IDelegationFaucetTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IDelegationFaucetFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IDelegationFaucetFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IDelegationFaucetSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IDelegationFaucetSession struct { + Contract *IDelegationFaucet // 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 +} + +// IDelegationFaucetCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IDelegationFaucetCallerSession struct { + Contract *IDelegationFaucetCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IDelegationFaucetTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IDelegationFaucetTransactorSession struct { + Contract *IDelegationFaucetTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IDelegationFaucetRaw is an auto generated low-level Go binding around an Ethereum contract. +type IDelegationFaucetRaw struct { + Contract *IDelegationFaucet // Generic contract binding to access the raw methods on +} + +// IDelegationFaucetCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IDelegationFaucetCallerRaw struct { + Contract *IDelegationFaucetCaller // Generic read-only contract binding to access the raw methods on +} + +// IDelegationFaucetTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IDelegationFaucetTransactorRaw struct { + Contract *IDelegationFaucetTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIDelegationFaucet creates a new instance of IDelegationFaucet, bound to a specific deployed contract. +func NewIDelegationFaucet(address common.Address, backend bind.ContractBackend) (*IDelegationFaucet, error) { + contract, err := bindIDelegationFaucet(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IDelegationFaucet{IDelegationFaucetCaller: IDelegationFaucetCaller{contract: contract}, IDelegationFaucetTransactor: IDelegationFaucetTransactor{contract: contract}, IDelegationFaucetFilterer: IDelegationFaucetFilterer{contract: contract}}, nil +} + +// NewIDelegationFaucetCaller creates a new read-only instance of IDelegationFaucet, bound to a specific deployed contract. +func NewIDelegationFaucetCaller(address common.Address, caller bind.ContractCaller) (*IDelegationFaucetCaller, error) { + contract, err := bindIDelegationFaucet(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IDelegationFaucetCaller{contract: contract}, nil +} + +// NewIDelegationFaucetTransactor creates a new write-only instance of IDelegationFaucet, bound to a specific deployed contract. +func NewIDelegationFaucetTransactor(address common.Address, transactor bind.ContractTransactor) (*IDelegationFaucetTransactor, error) { + contract, err := bindIDelegationFaucet(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IDelegationFaucetTransactor{contract: contract}, nil +} + +// NewIDelegationFaucetFilterer creates a new log filterer instance of IDelegationFaucet, bound to a specific deployed contract. +func NewIDelegationFaucetFilterer(address common.Address, filterer bind.ContractFilterer) (*IDelegationFaucetFilterer, error) { + contract, err := bindIDelegationFaucet(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IDelegationFaucetFilterer{contract: contract}, nil +} + +// bindIDelegationFaucet binds a generic wrapper to an already deployed contract. +func bindIDelegationFaucet(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IDelegationFaucetMetaData.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 (_IDelegationFaucet *IDelegationFaucetRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IDelegationFaucet.Contract.IDelegationFaucetCaller.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 (_IDelegationFaucet *IDelegationFaucetRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.IDelegationFaucetTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IDelegationFaucet *IDelegationFaucetRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.IDelegationFaucetTransactor.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 (_IDelegationFaucet *IDelegationFaucetCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IDelegationFaucet.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 (_IDelegationFaucet *IDelegationFaucetTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IDelegationFaucet *IDelegationFaucetTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.contract.Transact(opts, method, params...) +} + +// CallAddress is a paid mutator transaction binding the contract method 0xf6e8f39d. +// +// Solidity: function callAddress(address to, bytes data) payable returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetTransactor) CallAddress(opts *bind.TransactOpts, to common.Address, data []byte) (*types.Transaction, error) { + return _IDelegationFaucet.contract.Transact(opts, "callAddress", to, data) +} + +// CallAddress is a paid mutator transaction binding the contract method 0xf6e8f39d. +// +// Solidity: function callAddress(address to, bytes data) payable returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetSession) CallAddress(to common.Address, data []byte) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.CallAddress(&_IDelegationFaucet.TransactOpts, to, data) +} + +// CallAddress is a paid mutator transaction binding the contract method 0xf6e8f39d. +// +// Solidity: function callAddress(address to, bytes data) payable returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetTransactorSession) CallAddress(to common.Address, data []byte) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.CallAddress(&_IDelegationFaucet.TransactOpts, to, data) +} + +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x063dcd50. +// +// Solidity: function completeQueuedWithdrawal(address staker, (address,address,address,uint256,uint32,address[],uint256[]) queuedWithdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, staker common.Address, queuedWithdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _IDelegationFaucet.contract.Transact(opts, "completeQueuedWithdrawal", staker, queuedWithdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +} + +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x063dcd50. +// +// Solidity: function completeQueuedWithdrawal(address staker, (address,address,address,uint256,uint32,address[],uint256[]) queuedWithdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetSession) CompleteQueuedWithdrawal(staker common.Address, queuedWithdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.CompleteQueuedWithdrawal(&_IDelegationFaucet.TransactOpts, staker, queuedWithdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +} + +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x063dcd50. +// +// Solidity: function completeQueuedWithdrawal(address staker, (address,address,address,uint256,uint32,address[],uint256[]) queuedWithdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetTransactorSession) CompleteQueuedWithdrawal(staker common.Address, queuedWithdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.CompleteQueuedWithdrawal(&_IDelegationFaucet.TransactOpts, staker, queuedWithdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xa49ca158. +// +// Solidity: function depositIntoStrategy(address staker, address strategy, address token, uint256 amount) returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetTransactor) DepositIntoStrategy(opts *bind.TransactOpts, staker common.Address, strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _IDelegationFaucet.contract.Transact(opts, "depositIntoStrategy", staker, strategy, token, amount) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xa49ca158. +// +// Solidity: function depositIntoStrategy(address staker, address strategy, address token, uint256 amount) returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetSession) DepositIntoStrategy(staker common.Address, strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.DepositIntoStrategy(&_IDelegationFaucet.TransactOpts, staker, strategy, token, amount) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xa49ca158. +// +// Solidity: function depositIntoStrategy(address staker, address strategy, address token, uint256 amount) returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetTransactorSession) DepositIntoStrategy(staker common.Address, strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.DepositIntoStrategy(&_IDelegationFaucet.TransactOpts, staker, strategy, token, amount) +} + +// GetStaker is a paid mutator transaction binding the contract method 0xa23c44b1. +// +// Solidity: function getStaker(address operator) returns(address) +func (_IDelegationFaucet *IDelegationFaucetTransactor) GetStaker(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _IDelegationFaucet.contract.Transact(opts, "getStaker", operator) +} + +// GetStaker is a paid mutator transaction binding the contract method 0xa23c44b1. +// +// Solidity: function getStaker(address operator) returns(address) +func (_IDelegationFaucet *IDelegationFaucetSession) GetStaker(operator common.Address) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.GetStaker(&_IDelegationFaucet.TransactOpts, operator) +} + +// GetStaker is a paid mutator transaction binding the contract method 0xa23c44b1. +// +// Solidity: function getStaker(address operator) returns(address) +func (_IDelegationFaucet *IDelegationFaucetTransactorSession) GetStaker(operator common.Address) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.GetStaker(&_IDelegationFaucet.TransactOpts, operator) +} + +// MintDepositAndDelegate is a paid mutator transaction binding the contract method 0x34489506. +// +// Solidity: function mintDepositAndDelegate(address _operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt, uint256 _depositAmount) returns() +func (_IDelegationFaucet *IDelegationFaucetTransactor) MintDepositAndDelegate(opts *bind.TransactOpts, _operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte, _depositAmount *big.Int) (*types.Transaction, error) { + return _IDelegationFaucet.contract.Transact(opts, "mintDepositAndDelegate", _operator, approverSignatureAndExpiry, approverSalt, _depositAmount) +} + +// MintDepositAndDelegate is a paid mutator transaction binding the contract method 0x34489506. +// +// Solidity: function mintDepositAndDelegate(address _operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt, uint256 _depositAmount) returns() +func (_IDelegationFaucet *IDelegationFaucetSession) MintDepositAndDelegate(_operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte, _depositAmount *big.Int) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.MintDepositAndDelegate(&_IDelegationFaucet.TransactOpts, _operator, approverSignatureAndExpiry, approverSalt, _depositAmount) +} + +// MintDepositAndDelegate is a paid mutator transaction binding the contract method 0x34489506. +// +// Solidity: function mintDepositAndDelegate(address _operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt, uint256 _depositAmount) returns() +func (_IDelegationFaucet *IDelegationFaucetTransactorSession) MintDepositAndDelegate(_operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte, _depositAmount *big.Int) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.MintDepositAndDelegate(&_IDelegationFaucet.TransactOpts, _operator, approverSignatureAndExpiry, approverSalt, _depositAmount) +} + +// QueueWithdrawal is a paid mutator transaction binding the contract method 0xa76a9d2d. +// +// Solidity: function queueWithdrawal(address staker, (address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetTransactor) QueueWithdrawal(opts *bind.TransactOpts, staker common.Address, queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _IDelegationFaucet.contract.Transact(opts, "queueWithdrawal", staker, queuedWithdrawalParams) +} + +// QueueWithdrawal is a paid mutator transaction binding the contract method 0xa76a9d2d. +// +// Solidity: function queueWithdrawal(address staker, (address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetSession) QueueWithdrawal(staker common.Address, queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.QueueWithdrawal(&_IDelegationFaucet.TransactOpts, staker, queuedWithdrawalParams) +} + +// QueueWithdrawal is a paid mutator transaction binding the contract method 0xa76a9d2d. +// +// Solidity: function queueWithdrawal(address staker, (address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetTransactorSession) QueueWithdrawal(staker common.Address, queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.QueueWithdrawal(&_IDelegationFaucet.TransactOpts, staker, queuedWithdrawalParams) +} + +// Transfer is a paid mutator transaction binding the contract method 0xf18d03cc. +// +// Solidity: function transfer(address staker, address token, address to, uint256 amount) returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetTransactor) Transfer(opts *bind.TransactOpts, staker common.Address, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IDelegationFaucet.contract.Transact(opts, "transfer", staker, token, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xf18d03cc. +// +// Solidity: function transfer(address staker, address token, address to, uint256 amount) returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetSession) Transfer(staker common.Address, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.Transfer(&_IDelegationFaucet.TransactOpts, staker, token, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xf18d03cc. +// +// Solidity: function transfer(address staker, address token, address to, uint256 amount) returns(bytes) +func (_IDelegationFaucet *IDelegationFaucetTransactorSession) Transfer(staker common.Address, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IDelegationFaucet.Contract.Transfer(&_IDelegationFaucet.TransactOpts, staker, token, to, amount) +} diff --git a/pkg/bindings/IDelegationFaucet/tmp.abi b/pkg/bindings/IDelegationFaucet/tmp.abi new file mode 100644 index 000000000..f36da7f9a --- /dev/null +++ b/pkg/bindings/IDelegationFaucet/tmp.abi @@ -0,0 +1,270 @@ +[ + { + "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": "struct IDelegationManager.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": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + }, + { + "name": "tokens", + "type": "address[]", + "internalType": "contract IERC20[]" + }, + { + "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": "contract IStrategy" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "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": "struct ISignatureUtils.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": "struct IDelegationManager.QueuedWithdrawalParams[]", + "components": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "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" + } +] diff --git a/pkg/bindings/IDelegationFaucet/tmp.bin b/pkg/bindings/IDelegationFaucet/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IDelegationFaucet/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/IDelegationManager/binding.go b/pkg/bindings/IDelegationManager/binding.go new file mode 100644 index 000000000..51483a845 --- /dev/null +++ b/pkg/bindings/IDelegationManager/binding.go @@ -0,0 +1,3056 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IDelegationManager + +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 +) + +// IDelegationManagerOperatorDetails is an auto generated low-level Go binding around an user-defined struct. +type IDelegationManagerOperatorDetails struct { + EarningsReceiver common.Address + DelegationApprover common.Address + StakerOptOutWindowBlocks uint32 +} + +// IDelegationManagerQueuedWithdrawalParams is an auto generated low-level Go binding around an user-defined struct. +type IDelegationManagerQueuedWithdrawalParams struct { + Strategies []common.Address + Shares []*big.Int + Withdrawer common.Address +} + +// 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 +} + +// ISignatureUtilsSignatureWithExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithExpiry struct { + Signature []byte + Expiry *big.Int +} + +// IStrategyManagerDeprecatedStructQueuedWithdrawal is an auto generated low-level Go binding around an user-defined struct. +type IStrategyManagerDeprecatedStructQueuedWithdrawal struct { + Strategies []common.Address + Shares []*big.Int + Staker common.Address + WithdrawerAndNonce IStrategyManagerDeprecatedStructWithdrawerAndNonce + WithdrawalStartBlock uint32 + DelegatedAddress common.Address +} + +// IStrategyManagerDeprecatedStructWithdrawerAndNonce is an auto generated low-level Go binding around an user-defined struct. +type IStrategyManagerDeprecatedStructWithdrawerAndNonce struct { + Withdrawer common.Address + Nonce *big.Int +} + +// 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\":\"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\":\"earningsReceiver\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"migrateQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawalsToQueue\",\"type\":\"tuple[]\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_QueuedWithdrawal[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawerAndNonce\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_WithdrawerAndNonce\",\"components\":[{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"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\":\"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\":\"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\":\"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\":\"WithdrawalMigrated\",\"inputs\":[{\"name\":\"oldWithdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"newWithdrawalRoot\",\"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}]", +} + +// IDelegationManagerABI is the input ABI used to generate the binding from. +// Deprecated: Use IDelegationManagerMetaData.ABI instead. +var IDelegationManagerABI = IDelegationManagerMetaData.ABI + +// IDelegationManager is an auto generated Go binding around an Ethereum contract. +type IDelegationManager struct { + IDelegationManagerCaller // Read-only binding to the contract + IDelegationManagerTransactor // Write-only binding to the contract + IDelegationManagerFilterer // Log filterer for contract events +} + +// IDelegationManagerCaller is an auto generated read-only Go binding around an Ethereum contract. +type IDelegationManagerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IDelegationManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IDelegationManagerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IDelegationManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IDelegationManagerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IDelegationManagerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IDelegationManagerSession struct { + Contract *IDelegationManager // 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 +} + +// IDelegationManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IDelegationManagerCallerSession struct { + Contract *IDelegationManagerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IDelegationManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IDelegationManagerTransactorSession struct { + Contract *IDelegationManagerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IDelegationManagerRaw is an auto generated low-level Go binding around an Ethereum contract. +type IDelegationManagerRaw struct { + Contract *IDelegationManager // Generic contract binding to access the raw methods on +} + +// IDelegationManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IDelegationManagerCallerRaw struct { + Contract *IDelegationManagerCaller // Generic read-only contract binding to access the raw methods on +} + +// IDelegationManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IDelegationManagerTransactorRaw struct { + Contract *IDelegationManagerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIDelegationManager creates a new instance of IDelegationManager, bound to a specific deployed contract. +func NewIDelegationManager(address common.Address, backend bind.ContractBackend) (*IDelegationManager, error) { + contract, err := bindIDelegationManager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IDelegationManager{IDelegationManagerCaller: IDelegationManagerCaller{contract: contract}, IDelegationManagerTransactor: IDelegationManagerTransactor{contract: contract}, IDelegationManagerFilterer: IDelegationManagerFilterer{contract: contract}}, nil +} + +// NewIDelegationManagerCaller creates a new read-only instance of IDelegationManager, bound to a specific deployed contract. +func NewIDelegationManagerCaller(address common.Address, caller bind.ContractCaller) (*IDelegationManagerCaller, error) { + contract, err := bindIDelegationManager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IDelegationManagerCaller{contract: contract}, nil +} + +// NewIDelegationManagerTransactor creates a new write-only instance of IDelegationManager, bound to a specific deployed contract. +func NewIDelegationManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*IDelegationManagerTransactor, error) { + contract, err := bindIDelegationManager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IDelegationManagerTransactor{contract: contract}, nil +} + +// NewIDelegationManagerFilterer creates a new log filterer instance of IDelegationManager, bound to a specific deployed contract. +func NewIDelegationManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*IDelegationManagerFilterer, error) { + contract, err := bindIDelegationManager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IDelegationManagerFilterer{contract: contract}, nil +} + +// bindIDelegationManager binds a generic wrapper to an already deployed contract. +func bindIDelegationManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IDelegationManagerMetaData.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 (_IDelegationManager *IDelegationManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IDelegationManager.Contract.IDelegationManagerCaller.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 (_IDelegationManager *IDelegationManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IDelegationManager.Contract.IDelegationManagerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IDelegationManager *IDelegationManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IDelegationManager.Contract.IDelegationManagerTransactor.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 (_IDelegationManager *IDelegationManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IDelegationManager.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 (_IDelegationManager *IDelegationManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IDelegationManager.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IDelegationManager *IDelegationManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IDelegationManager.Contract.contract.Transact(opts, method, params...) +} + +// DELEGATIONAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0x04a4f979. +// +// Solidity: function DELEGATION_APPROVAL_TYPEHASH() view returns(bytes32) +func (_IDelegationManager *IDelegationManagerCaller) DELEGATIONAPPROVALTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "DELEGATION_APPROVAL_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DELEGATIONAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0x04a4f979. +// +// Solidity: function DELEGATION_APPROVAL_TYPEHASH() view returns(bytes32) +func (_IDelegationManager *IDelegationManagerSession) DELEGATIONAPPROVALTYPEHASH() ([32]byte, error) { + return _IDelegationManager.Contract.DELEGATIONAPPROVALTYPEHASH(&_IDelegationManager.CallOpts) +} + +// DELEGATIONAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0x04a4f979. +// +// Solidity: function DELEGATION_APPROVAL_TYPEHASH() view returns(bytes32) +func (_IDelegationManager *IDelegationManagerCallerSession) DELEGATIONAPPROVALTYPEHASH() ([32]byte, error) { + return _IDelegationManager.Contract.DELEGATIONAPPROVALTYPEHASH(&_IDelegationManager.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_IDelegationManager *IDelegationManagerCaller) DOMAINTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "DOMAIN_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_IDelegationManager *IDelegationManagerSession) DOMAINTYPEHASH() ([32]byte, error) { + return _IDelegationManager.Contract.DOMAINTYPEHASH(&_IDelegationManager.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_IDelegationManager *IDelegationManagerCallerSession) DOMAINTYPEHASH() ([32]byte, error) { + return _IDelegationManager.Contract.DOMAINTYPEHASH(&_IDelegationManager.CallOpts) +} + +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_IDelegationManager *IDelegationManagerCaller) STAKERDELEGATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "STAKER_DELEGATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_IDelegationManager *IDelegationManagerSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { + return _IDelegationManager.Contract.STAKERDELEGATIONTYPEHASH(&_IDelegationManager.CallOpts) +} + +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_IDelegationManager *IDelegationManagerCallerSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { + return _IDelegationManager.Contract.STAKERDELEGATIONTYPEHASH(&_IDelegationManager.CallOpts) +} + +// CalculateCurrentStakerDelegationDigestHash is a free data retrieval call binding the contract method 0x1bbce091. +// +// Solidity: function calculateCurrentStakerDelegationDigestHash(address staker, address operator, uint256 expiry) view returns(bytes32) +func (_IDelegationManager *IDelegationManagerCaller) CalculateCurrentStakerDelegationDigestHash(opts *bind.CallOpts, staker common.Address, operator common.Address, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "calculateCurrentStakerDelegationDigestHash", staker, operator, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateCurrentStakerDelegationDigestHash is a free data retrieval call binding the contract method 0x1bbce091. +// +// Solidity: function calculateCurrentStakerDelegationDigestHash(address staker, address operator, uint256 expiry) view returns(bytes32) +func (_IDelegationManager *IDelegationManagerSession) CalculateCurrentStakerDelegationDigestHash(staker common.Address, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _IDelegationManager.Contract.CalculateCurrentStakerDelegationDigestHash(&_IDelegationManager.CallOpts, staker, operator, expiry) +} + +// CalculateCurrentStakerDelegationDigestHash is a free data retrieval call binding the contract method 0x1bbce091. +// +// Solidity: function calculateCurrentStakerDelegationDigestHash(address staker, address operator, uint256 expiry) view returns(bytes32) +func (_IDelegationManager *IDelegationManagerCallerSession) CalculateCurrentStakerDelegationDigestHash(staker common.Address, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _IDelegationManager.Contract.CalculateCurrentStakerDelegationDigestHash(&_IDelegationManager.CallOpts, staker, operator, expiry) +} + +// CalculateDelegationApprovalDigestHash is a free data retrieval call binding the contract method 0x0b9f487a. +// +// Solidity: function calculateDelegationApprovalDigestHash(address staker, address operator, address _delegationApprover, bytes32 approverSalt, uint256 expiry) view returns(bytes32) +func (_IDelegationManager *IDelegationManagerCaller) CalculateDelegationApprovalDigestHash(opts *bind.CallOpts, staker common.Address, operator common.Address, _delegationApprover common.Address, approverSalt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "calculateDelegationApprovalDigestHash", staker, operator, _delegationApprover, approverSalt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateDelegationApprovalDigestHash is a free data retrieval call binding the contract method 0x0b9f487a. +// +// Solidity: function calculateDelegationApprovalDigestHash(address staker, address operator, address _delegationApprover, bytes32 approverSalt, uint256 expiry) view returns(bytes32) +func (_IDelegationManager *IDelegationManagerSession) CalculateDelegationApprovalDigestHash(staker common.Address, operator common.Address, _delegationApprover common.Address, approverSalt [32]byte, expiry *big.Int) ([32]byte, error) { + return _IDelegationManager.Contract.CalculateDelegationApprovalDigestHash(&_IDelegationManager.CallOpts, staker, operator, _delegationApprover, approverSalt, expiry) +} + +// CalculateDelegationApprovalDigestHash is a free data retrieval call binding the contract method 0x0b9f487a. +// +// Solidity: function calculateDelegationApprovalDigestHash(address staker, address operator, address _delegationApprover, bytes32 approverSalt, uint256 expiry) view returns(bytes32) +func (_IDelegationManager *IDelegationManagerCallerSession) CalculateDelegationApprovalDigestHash(staker common.Address, operator common.Address, _delegationApprover common.Address, approverSalt [32]byte, expiry *big.Int) ([32]byte, error) { + return _IDelegationManager.Contract.CalculateDelegationApprovalDigestHash(&_IDelegationManager.CallOpts, staker, operator, _delegationApprover, approverSalt, expiry) +} + +// CalculateStakerDelegationDigestHash is a free data retrieval call binding the contract method 0xc94b5111. +// +// Solidity: function calculateStakerDelegationDigestHash(address staker, uint256 _stakerNonce, address operator, uint256 expiry) view returns(bytes32) +func (_IDelegationManager *IDelegationManagerCaller) CalculateStakerDelegationDigestHash(opts *bind.CallOpts, staker common.Address, _stakerNonce *big.Int, operator common.Address, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "calculateStakerDelegationDigestHash", staker, _stakerNonce, operator, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateStakerDelegationDigestHash is a free data retrieval call binding the contract method 0xc94b5111. +// +// Solidity: function calculateStakerDelegationDigestHash(address staker, uint256 _stakerNonce, address operator, uint256 expiry) view returns(bytes32) +func (_IDelegationManager *IDelegationManagerSession) CalculateStakerDelegationDigestHash(staker common.Address, _stakerNonce *big.Int, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _IDelegationManager.Contract.CalculateStakerDelegationDigestHash(&_IDelegationManager.CallOpts, staker, _stakerNonce, operator, expiry) +} + +// CalculateStakerDelegationDigestHash is a free data retrieval call binding the contract method 0xc94b5111. +// +// Solidity: function calculateStakerDelegationDigestHash(address staker, uint256 _stakerNonce, address operator, uint256 expiry) view returns(bytes32) +func (_IDelegationManager *IDelegationManagerCallerSession) CalculateStakerDelegationDigestHash(staker common.Address, _stakerNonce *big.Int, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _IDelegationManager.Contract.CalculateStakerDelegationDigestHash(&_IDelegationManager.CallOpts, staker, _stakerNonce, operator, expiry) +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0x597b36da. +// +// Solidity: function calculateWithdrawalRoot((address,address,address,uint256,uint32,address[],uint256[]) withdrawal) pure returns(bytes32) +func (_IDelegationManager *IDelegationManagerCaller) CalculateWithdrawalRoot(opts *bind.CallOpts, withdrawal IDelegationManagerWithdrawal) ([32]byte, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "calculateWithdrawalRoot", withdrawal) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0x597b36da. +// +// Solidity: function calculateWithdrawalRoot((address,address,address,uint256,uint32,address[],uint256[]) withdrawal) pure returns(bytes32) +func (_IDelegationManager *IDelegationManagerSession) CalculateWithdrawalRoot(withdrawal IDelegationManagerWithdrawal) ([32]byte, error) { + return _IDelegationManager.Contract.CalculateWithdrawalRoot(&_IDelegationManager.CallOpts, withdrawal) +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0x597b36da. +// +// Solidity: function calculateWithdrawalRoot((address,address,address,uint256,uint32,address[],uint256[]) withdrawal) pure returns(bytes32) +func (_IDelegationManager *IDelegationManagerCallerSession) CalculateWithdrawalRoot(withdrawal IDelegationManagerWithdrawal) ([32]byte, error) { + return _IDelegationManager.Contract.CalculateWithdrawalRoot(&_IDelegationManager.CallOpts, withdrawal) +} + +// CumulativeWithdrawalsQueued is a free data retrieval call binding the contract method 0xa1788484. +// +// Solidity: function cumulativeWithdrawalsQueued(address staker) view returns(uint256) +func (_IDelegationManager *IDelegationManagerCaller) CumulativeWithdrawalsQueued(opts *bind.CallOpts, staker common.Address) (*big.Int, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "cumulativeWithdrawalsQueued", staker) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CumulativeWithdrawalsQueued is a free data retrieval call binding the contract method 0xa1788484. +// +// Solidity: function cumulativeWithdrawalsQueued(address staker) view returns(uint256) +func (_IDelegationManager *IDelegationManagerSession) CumulativeWithdrawalsQueued(staker common.Address) (*big.Int, error) { + return _IDelegationManager.Contract.CumulativeWithdrawalsQueued(&_IDelegationManager.CallOpts, staker) +} + +// CumulativeWithdrawalsQueued is a free data retrieval call binding the contract method 0xa1788484. +// +// Solidity: function cumulativeWithdrawalsQueued(address staker) view returns(uint256) +func (_IDelegationManager *IDelegationManagerCallerSession) CumulativeWithdrawalsQueued(staker common.Address) (*big.Int, error) { + return _IDelegationManager.Contract.CumulativeWithdrawalsQueued(&_IDelegationManager.CallOpts, staker) +} + +// DelegatedTo is a free data retrieval call binding the contract method 0x65da1264. +// +// Solidity: function delegatedTo(address staker) view returns(address) +func (_IDelegationManager *IDelegationManagerCaller) DelegatedTo(opts *bind.CallOpts, staker common.Address) (common.Address, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "delegatedTo", staker) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DelegatedTo is a free data retrieval call binding the contract method 0x65da1264. +// +// Solidity: function delegatedTo(address staker) view returns(address) +func (_IDelegationManager *IDelegationManagerSession) DelegatedTo(staker common.Address) (common.Address, error) { + return _IDelegationManager.Contract.DelegatedTo(&_IDelegationManager.CallOpts, staker) +} + +// DelegatedTo is a free data retrieval call binding the contract method 0x65da1264. +// +// Solidity: function delegatedTo(address staker) view returns(address) +func (_IDelegationManager *IDelegationManagerCallerSession) DelegatedTo(staker common.Address) (common.Address, error) { + return _IDelegationManager.Contract.DelegatedTo(&_IDelegationManager.CallOpts, staker) +} + +// DelegationApprover is a free data retrieval call binding the contract method 0x3cdeb5e0. +// +// Solidity: function delegationApprover(address operator) view returns(address) +func (_IDelegationManager *IDelegationManagerCaller) DelegationApprover(opts *bind.CallOpts, operator common.Address) (common.Address, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "delegationApprover", operator) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DelegationApprover is a free data retrieval call binding the contract method 0x3cdeb5e0. +// +// Solidity: function delegationApprover(address operator) view returns(address) +func (_IDelegationManager *IDelegationManagerSession) DelegationApprover(operator common.Address) (common.Address, error) { + return _IDelegationManager.Contract.DelegationApprover(&_IDelegationManager.CallOpts, operator) +} + +// DelegationApprover is a free data retrieval call binding the contract method 0x3cdeb5e0. +// +// Solidity: function delegationApprover(address operator) view returns(address) +func (_IDelegationManager *IDelegationManagerCallerSession) DelegationApprover(operator common.Address) (common.Address, error) { + return _IDelegationManager.Contract.DelegationApprover(&_IDelegationManager.CallOpts, operator) +} + +// DelegationApproverSaltIsSpent is a free data retrieval call binding the contract method 0xbb45fef2. +// +// Solidity: function delegationApproverSaltIsSpent(address _delegationApprover, bytes32 salt) view returns(bool) +func (_IDelegationManager *IDelegationManagerCaller) DelegationApproverSaltIsSpent(opts *bind.CallOpts, _delegationApprover common.Address, salt [32]byte) (bool, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "delegationApproverSaltIsSpent", _delegationApprover, salt) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// DelegationApproverSaltIsSpent is a free data retrieval call binding the contract method 0xbb45fef2. +// +// Solidity: function delegationApproverSaltIsSpent(address _delegationApprover, bytes32 salt) view returns(bool) +func (_IDelegationManager *IDelegationManagerSession) DelegationApproverSaltIsSpent(_delegationApprover common.Address, salt [32]byte) (bool, error) { + return _IDelegationManager.Contract.DelegationApproverSaltIsSpent(&_IDelegationManager.CallOpts, _delegationApprover, salt) +} + +// DelegationApproverSaltIsSpent is a free data retrieval call binding the contract method 0xbb45fef2. +// +// Solidity: function delegationApproverSaltIsSpent(address _delegationApprover, bytes32 salt) view returns(bool) +func (_IDelegationManager *IDelegationManagerCallerSession) DelegationApproverSaltIsSpent(_delegationApprover common.Address, salt [32]byte) (bool, error) { + return _IDelegationManager.Contract.DelegationApproverSaltIsSpent(&_IDelegationManager.CallOpts, _delegationApprover, salt) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_IDelegationManager *IDelegationManagerCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _IDelegationManager.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 + +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_IDelegationManager *IDelegationManagerSession) DomainSeparator() ([32]byte, error) { + return _IDelegationManager.Contract.DomainSeparator(&_IDelegationManager.CallOpts) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_IDelegationManager *IDelegationManagerCallerSession) DomainSeparator() ([32]byte, error) { + return _IDelegationManager.Contract.DomainSeparator(&_IDelegationManager.CallOpts) +} + +// EarningsReceiver is a free data retrieval call binding the contract method 0x5f966f14. +// +// Solidity: function earningsReceiver(address operator) view returns(address) +func (_IDelegationManager *IDelegationManagerCaller) EarningsReceiver(opts *bind.CallOpts, operator common.Address) (common.Address, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "earningsReceiver", operator) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EarningsReceiver is a free data retrieval call binding the contract method 0x5f966f14. +// +// Solidity: function earningsReceiver(address operator) view returns(address) +func (_IDelegationManager *IDelegationManagerSession) EarningsReceiver(operator common.Address) (common.Address, error) { + return _IDelegationManager.Contract.EarningsReceiver(&_IDelegationManager.CallOpts, operator) +} + +// EarningsReceiver is a free data retrieval call binding the contract method 0x5f966f14. +// +// Solidity: function earningsReceiver(address operator) view returns(address) +func (_IDelegationManager *IDelegationManagerCallerSession) EarningsReceiver(operator common.Address) (common.Address, error) { + return _IDelegationManager.Contract.EarningsReceiver(&_IDelegationManager.CallOpts, operator) +} + +// 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) +func (_IDelegationManager *IDelegationManagerCaller) GetWithdrawalDelay(opts *bind.CallOpts, strategies []common.Address) (*big.Int, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "getWithdrawalDelay", strategies) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. +// +// Solidity: function getWithdrawalDelay(address[] strategies) view returns(uint256) +func (_IDelegationManager *IDelegationManagerSession) GetWithdrawalDelay(strategies []common.Address) (*big.Int, error) { + return _IDelegationManager.Contract.GetWithdrawalDelay(&_IDelegationManager.CallOpts, strategies) +} + +// GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. +// +// Solidity: function getWithdrawalDelay(address[] strategies) view returns(uint256) +func (_IDelegationManager *IDelegationManagerCallerSession) GetWithdrawalDelay(strategies []common.Address) (*big.Int, error) { + return _IDelegationManager.Contract.GetWithdrawalDelay(&_IDelegationManager.CallOpts, strategies) +} + +// IsDelegated is a free data retrieval call binding the contract method 0x3e28391d. +// +// Solidity: function isDelegated(address staker) view returns(bool) +func (_IDelegationManager *IDelegationManagerCaller) IsDelegated(opts *bind.CallOpts, staker common.Address) (bool, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "isDelegated", staker) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsDelegated is a free data retrieval call binding the contract method 0x3e28391d. +// +// Solidity: function isDelegated(address staker) view returns(bool) +func (_IDelegationManager *IDelegationManagerSession) IsDelegated(staker common.Address) (bool, error) { + return _IDelegationManager.Contract.IsDelegated(&_IDelegationManager.CallOpts, staker) +} + +// IsDelegated is a free data retrieval call binding the contract method 0x3e28391d. +// +// Solidity: function isDelegated(address staker) view returns(bool) +func (_IDelegationManager *IDelegationManagerCallerSession) IsDelegated(staker common.Address) (bool, error) { + return _IDelegationManager.Contract.IsDelegated(&_IDelegationManager.CallOpts, staker) +} + +// IsOperator is a free data retrieval call binding the contract method 0x6d70f7ae. +// +// Solidity: function isOperator(address operator) view returns(bool) +func (_IDelegationManager *IDelegationManagerCaller) IsOperator(opts *bind.CallOpts, operator common.Address) (bool, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "isOperator", operator) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsOperator is a free data retrieval call binding the contract method 0x6d70f7ae. +// +// Solidity: function isOperator(address operator) view returns(bool) +func (_IDelegationManager *IDelegationManagerSession) IsOperator(operator common.Address) (bool, error) { + return _IDelegationManager.Contract.IsOperator(&_IDelegationManager.CallOpts, operator) +} + +// IsOperator is a free data retrieval call binding the contract method 0x6d70f7ae. +// +// Solidity: function isOperator(address operator) view returns(bool) +func (_IDelegationManager *IDelegationManagerCallerSession) IsOperator(operator common.Address) (bool, error) { + return _IDelegationManager.Contract.IsOperator(&_IDelegationManager.CallOpts, operator) +} + +// MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. +// +// Solidity: function minWithdrawalDelayBlocks() view returns(uint256) +func (_IDelegationManager *IDelegationManagerCaller) MinWithdrawalDelayBlocks(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "minWithdrawalDelayBlocks") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. +// +// Solidity: function minWithdrawalDelayBlocks() view returns(uint256) +func (_IDelegationManager *IDelegationManagerSession) MinWithdrawalDelayBlocks() (*big.Int, error) { + return _IDelegationManager.Contract.MinWithdrawalDelayBlocks(&_IDelegationManager.CallOpts) +} + +// MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. +// +// Solidity: function minWithdrawalDelayBlocks() view returns(uint256) +func (_IDelegationManager *IDelegationManagerCallerSession) MinWithdrawalDelayBlocks() (*big.Int, error) { + return _IDelegationManager.Contract.MinWithdrawalDelayBlocks(&_IDelegationManager.CallOpts) +} + +// OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. +// +// Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) +func (_IDelegationManager *IDelegationManagerCaller) OperatorDetails(opts *bind.CallOpts, operator common.Address) (IDelegationManagerOperatorDetails, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "operatorDetails", operator) + + if err != nil { + return *new(IDelegationManagerOperatorDetails), err + } + + out0 := *abi.ConvertType(out[0], new(IDelegationManagerOperatorDetails)).(*IDelegationManagerOperatorDetails) + + return out0, err + +} + +// OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. +// +// Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) +func (_IDelegationManager *IDelegationManagerSession) OperatorDetails(operator common.Address) (IDelegationManagerOperatorDetails, error) { + return _IDelegationManager.Contract.OperatorDetails(&_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)) +func (_IDelegationManager *IDelegationManagerCallerSession) OperatorDetails(operator common.Address) (IDelegationManagerOperatorDetails, error) { + return _IDelegationManager.Contract.OperatorDetails(&_IDelegationManager.CallOpts, operator) +} + +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// +// 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, "operatorShares", operator, strategy) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// +// 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) +} + +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// +// 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. +// +// Solidity: function stakerNonce(address staker) view returns(uint256) +func (_IDelegationManager *IDelegationManagerCaller) StakerNonce(opts *bind.CallOpts, staker common.Address) (*big.Int, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "stakerNonce", staker) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerNonce is a free data retrieval call binding the contract method 0x29c77d4f. +// +// Solidity: function stakerNonce(address staker) view returns(uint256) +func (_IDelegationManager *IDelegationManagerSession) StakerNonce(staker common.Address) (*big.Int, error) { + return _IDelegationManager.Contract.StakerNonce(&_IDelegationManager.CallOpts, staker) +} + +// StakerNonce is a free data retrieval call binding the contract method 0x29c77d4f. +// +// Solidity: function stakerNonce(address staker) view returns(uint256) +func (_IDelegationManager *IDelegationManagerCallerSession) StakerNonce(staker common.Address) (*big.Int, error) { + return _IDelegationManager.Contract.StakerNonce(&_IDelegationManager.CallOpts, staker) +} + +// StakerOptOutWindowBlocks is a free data retrieval call binding the contract method 0x16928365. +// +// Solidity: function stakerOptOutWindowBlocks(address operator) view returns(uint256) +func (_IDelegationManager *IDelegationManagerCaller) StakerOptOutWindowBlocks(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "stakerOptOutWindowBlocks", operator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerOptOutWindowBlocks is a free data retrieval call binding the contract method 0x16928365. +// +// Solidity: function stakerOptOutWindowBlocks(address operator) view returns(uint256) +func (_IDelegationManager *IDelegationManagerSession) StakerOptOutWindowBlocks(operator common.Address) (*big.Int, error) { + return _IDelegationManager.Contract.StakerOptOutWindowBlocks(&_IDelegationManager.CallOpts, operator) +} + +// StakerOptOutWindowBlocks is a free data retrieval call binding the contract method 0x16928365. +// +// Solidity: function stakerOptOutWindowBlocks(address operator) view returns(uint256) +func (_IDelegationManager *IDelegationManagerCallerSession) StakerOptOutWindowBlocks(operator common.Address) (*big.Int, error) { + return _IDelegationManager.Contract.StakerOptOutWindowBlocks(&_IDelegationManager.CallOpts, operator) +} + +// StrategyWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc488375a. +// +// Solidity: function strategyWithdrawalDelayBlocks(address strategy) view returns(uint256) +func (_IDelegationManager *IDelegationManagerCaller) StrategyWithdrawalDelayBlocks(opts *bind.CallOpts, strategy common.Address) (*big.Int, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "strategyWithdrawalDelayBlocks", strategy) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StrategyWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc488375a. +// +// Solidity: function strategyWithdrawalDelayBlocks(address strategy) view returns(uint256) +func (_IDelegationManager *IDelegationManagerSession) StrategyWithdrawalDelayBlocks(strategy common.Address) (*big.Int, error) { + return _IDelegationManager.Contract.StrategyWithdrawalDelayBlocks(&_IDelegationManager.CallOpts, strategy) +} + +// StrategyWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc488375a. +// +// Solidity: function strategyWithdrawalDelayBlocks(address strategy) view returns(uint256) +func (_IDelegationManager *IDelegationManagerCallerSession) StrategyWithdrawalDelayBlocks(strategy common.Address) (*big.Int, error) { + return _IDelegationManager.Contract.StrategyWithdrawalDelayBlocks(&_IDelegationManager.CallOpts, strategy) +} + +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// +// 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 0x60d7faed. +// +// 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 0x60d7faed. +// +// 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 0x33404396. +// +// 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 0x33404396. +// +// 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 0x33404396. +// +// 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 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 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 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. +// +// Solidity: function delegateTo(address operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_IDelegationManager *IDelegationManagerTransactor) DelegateTo(opts *bind.TransactOpts, operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "delegateTo", operator, approverSignatureAndExpiry, approverSalt) +} + +// DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. +// +// Solidity: function delegateTo(address operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_IDelegationManager *IDelegationManagerSession) DelegateTo(operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _IDelegationManager.Contract.DelegateTo(&_IDelegationManager.TransactOpts, operator, approverSignatureAndExpiry, approverSalt) +} + +// DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. +// +// Solidity: function delegateTo(address operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) DelegateTo(operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _IDelegationManager.Contract.DelegateTo(&_IDelegationManager.TransactOpts, operator, approverSignatureAndExpiry, approverSalt) +} + +// DelegateToBySignature is a paid mutator transaction binding the contract method 0x7f548071. +// +// Solidity: function delegateToBySignature(address staker, address operator, (bytes,uint256) stakerSignatureAndExpiry, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_IDelegationManager *IDelegationManagerTransactor) DelegateToBySignature(opts *bind.TransactOpts, staker common.Address, operator common.Address, stakerSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "delegateToBySignature", staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) +} + +// DelegateToBySignature is a paid mutator transaction binding the contract method 0x7f548071. +// +// Solidity: function delegateToBySignature(address staker, address operator, (bytes,uint256) stakerSignatureAndExpiry, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_IDelegationManager *IDelegationManagerSession) DelegateToBySignature(staker common.Address, operator common.Address, stakerSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _IDelegationManager.Contract.DelegateToBySignature(&_IDelegationManager.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) +} + +// DelegateToBySignature is a paid mutator transaction binding the contract method 0x7f548071. +// +// Solidity: function delegateToBySignature(address staker, address operator, (bytes,uint256) stakerSignatureAndExpiry, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) DelegateToBySignature(staker common.Address, operator common.Address, stakerSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _IDelegationManager.Contract.DelegateToBySignature(&_IDelegationManager.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) +} + +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// +// 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 0x28a573ae. +// +// 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) +} + +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// +// 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) +} + +// MigrateQueuedWithdrawals is a paid mutator transaction binding the contract method 0x5cfe8d2c. +// +// Solidity: function migrateQueuedWithdrawals((address[],uint256[],address,(address,uint96),uint32,address)[] withdrawalsToQueue) returns() +func (_IDelegationManager *IDelegationManagerTransactor) MigrateQueuedWithdrawals(opts *bind.TransactOpts, withdrawalsToQueue []IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "migrateQueuedWithdrawals", withdrawalsToQueue) +} + +// MigrateQueuedWithdrawals is a paid mutator transaction binding the contract method 0x5cfe8d2c. +// +// Solidity: function migrateQueuedWithdrawals((address[],uint256[],address,(address,uint96),uint32,address)[] withdrawalsToQueue) returns() +func (_IDelegationManager *IDelegationManagerSession) MigrateQueuedWithdrawals(withdrawalsToQueue []IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _IDelegationManager.Contract.MigrateQueuedWithdrawals(&_IDelegationManager.TransactOpts, withdrawalsToQueue) +} + +// MigrateQueuedWithdrawals is a paid mutator transaction binding the contract method 0x5cfe8d2c. +// +// Solidity: function migrateQueuedWithdrawals((address[],uint256[],address,(address,uint96),uint32,address)[] withdrawalsToQueue) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) MigrateQueuedWithdrawals(withdrawalsToQueue []IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _IDelegationManager.Contract.MigrateQueuedWithdrawals(&_IDelegationManager.TransactOpts, withdrawalsToQueue) +} + +// ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. +// +// Solidity: function modifyOperatorDetails((address,address,uint32) newOperatorDetails) returns() +func (_IDelegationManager *IDelegationManagerTransactor) ModifyOperatorDetails(opts *bind.TransactOpts, newOperatorDetails IDelegationManagerOperatorDetails) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "modifyOperatorDetails", newOperatorDetails) +} + +// ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. +// +// Solidity: function modifyOperatorDetails((address,address,uint32) newOperatorDetails) returns() +func (_IDelegationManager *IDelegationManagerSession) ModifyOperatorDetails(newOperatorDetails IDelegationManagerOperatorDetails) (*types.Transaction, error) { + return _IDelegationManager.Contract.ModifyOperatorDetails(&_IDelegationManager.TransactOpts, newOperatorDetails) +} + +// ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. +// +// Solidity: function modifyOperatorDetails((address,address,uint32) newOperatorDetails) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) ModifyOperatorDetails(newOperatorDetails IDelegationManagerOperatorDetails) (*types.Transaction, error) { + return _IDelegationManager.Contract.ModifyOperatorDetails(&_IDelegationManager.TransactOpts, newOperatorDetails) +} + +// QueueWithdrawals is a paid mutator transaction binding the contract method 0x0dd8dd02. +// +// Solidity: function queueWithdrawals((address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes32[]) +func (_IDelegationManager *IDelegationManagerTransactor) QueueWithdrawals(opts *bind.TransactOpts, queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "queueWithdrawals", queuedWithdrawalParams) +} + +// QueueWithdrawals is a paid mutator transaction binding the contract method 0x0dd8dd02. +// +// Solidity: function queueWithdrawals((address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes32[]) +func (_IDelegationManager *IDelegationManagerSession) QueueWithdrawals(queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _IDelegationManager.Contract.QueueWithdrawals(&_IDelegationManager.TransactOpts, queuedWithdrawalParams) +} + +// QueueWithdrawals is a paid mutator transaction binding the contract method 0x0dd8dd02. +// +// Solidity: function queueWithdrawals((address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes32[]) +func (_IDelegationManager *IDelegationManagerTransactorSession) QueueWithdrawals(queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _IDelegationManager.Contract.QueueWithdrawals(&_IDelegationManager.TransactOpts, queuedWithdrawalParams) +} + +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// +// 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 0x0f589e59. +// +// 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 0x0f589e59. +// +// 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. +// +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoot) +func (_IDelegationManager *IDelegationManagerTransactor) Undelegate(opts *bind.TransactOpts, staker common.Address) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "undelegate", staker) +} + +// Undelegate is a paid mutator transaction binding the contract method 0xda8be864. +// +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoot) +func (_IDelegationManager *IDelegationManagerSession) Undelegate(staker common.Address) (*types.Transaction, error) { + return _IDelegationManager.Contract.Undelegate(&_IDelegationManager.TransactOpts, staker) +} + +// Undelegate is a paid mutator transaction binding the contract method 0xda8be864. +// +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoot) +func (_IDelegationManager *IDelegationManagerTransactorSession) Undelegate(staker common.Address) (*types.Transaction, error) { + return _IDelegationManager.Contract.Undelegate(&_IDelegationManager.TransactOpts, staker) +} + +// UpdateOperatorMetadataURI is a paid mutator transaction binding the contract method 0x99be81c8. +// +// Solidity: function updateOperatorMetadataURI(string metadataURI) returns() +func (_IDelegationManager *IDelegationManagerTransactor) UpdateOperatorMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "updateOperatorMetadataURI", metadataURI) +} + +// UpdateOperatorMetadataURI is a paid mutator transaction binding the contract method 0x99be81c8. +// +// Solidity: function updateOperatorMetadataURI(string metadataURI) returns() +func (_IDelegationManager *IDelegationManagerSession) UpdateOperatorMetadataURI(metadataURI string) (*types.Transaction, error) { + return _IDelegationManager.Contract.UpdateOperatorMetadataURI(&_IDelegationManager.TransactOpts, metadataURI) +} + +// UpdateOperatorMetadataURI is a paid mutator transaction binding the contract method 0x99be81c8. +// +// Solidity: function updateOperatorMetadataURI(string metadataURI) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) UpdateOperatorMetadataURI(metadataURI string) (*types.Transaction, error) { + return _IDelegationManager.Contract.UpdateOperatorMetadataURI(&_IDelegationManager.TransactOpts, metadataURI) +} + +// IDelegationManagerMinWithdrawalDelayBlocksSetIterator is returned from FilterMinWithdrawalDelayBlocksSet and is used to iterate over the raw logs and unpacked data for MinWithdrawalDelayBlocksSet events raised by the IDelegationManager contract. +type IDelegationManagerMinWithdrawalDelayBlocksSetIterator struct { + Event *IDelegationManagerMinWithdrawalDelayBlocksSet // 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 *IDelegationManagerMinWithdrawalDelayBlocksSetIterator) 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(IDelegationManagerMinWithdrawalDelayBlocksSet) + 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(IDelegationManagerMinWithdrawalDelayBlocksSet) + 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 *IDelegationManagerMinWithdrawalDelayBlocksSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelegationManagerMinWithdrawalDelayBlocksSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelegationManagerMinWithdrawalDelayBlocksSet represents a MinWithdrawalDelayBlocksSet event raised by the IDelegationManager contract. +type IDelegationManagerMinWithdrawalDelayBlocksSet struct { + PreviousValue *big.Int + NewValue *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMinWithdrawalDelayBlocksSet is a free log retrieval operation binding the contract event 0xafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69. +// +// Solidity: event MinWithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_IDelegationManager *IDelegationManagerFilterer) FilterMinWithdrawalDelayBlocksSet(opts *bind.FilterOpts) (*IDelegationManagerMinWithdrawalDelayBlocksSetIterator, error) { + + logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "MinWithdrawalDelayBlocksSet") + if err != nil { + return nil, err + } + return &IDelegationManagerMinWithdrawalDelayBlocksSetIterator{contract: _IDelegationManager.contract, event: "MinWithdrawalDelayBlocksSet", logs: logs, sub: sub}, nil +} + +// WatchMinWithdrawalDelayBlocksSet is a free log subscription operation binding the contract event 0xafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69. +// +// Solidity: event MinWithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_IDelegationManager *IDelegationManagerFilterer) WatchMinWithdrawalDelayBlocksSet(opts *bind.WatchOpts, sink chan<- *IDelegationManagerMinWithdrawalDelayBlocksSet) (event.Subscription, error) { + + logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "MinWithdrawalDelayBlocksSet") + 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(IDelegationManagerMinWithdrawalDelayBlocksSet) + if err := _IDelegationManager.contract.UnpackLog(event, "MinWithdrawalDelayBlocksSet", 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 +} + +// ParseMinWithdrawalDelayBlocksSet is a log parse operation binding the contract event 0xafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69. +// +// Solidity: event MinWithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_IDelegationManager *IDelegationManagerFilterer) ParseMinWithdrawalDelayBlocksSet(log types.Log) (*IDelegationManagerMinWithdrawalDelayBlocksSet, error) { + event := new(IDelegationManagerMinWithdrawalDelayBlocksSet) + if err := _IDelegationManager.contract.UnpackLog(event, "MinWithdrawalDelayBlocksSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelegationManagerOperatorDetailsModifiedIterator is returned from FilterOperatorDetailsModified and is used to iterate over the raw logs and unpacked data for OperatorDetailsModified events raised by the IDelegationManager contract. +type IDelegationManagerOperatorDetailsModifiedIterator struct { + Event *IDelegationManagerOperatorDetailsModified // 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 *IDelegationManagerOperatorDetailsModifiedIterator) 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(IDelegationManagerOperatorDetailsModified) + 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(IDelegationManagerOperatorDetailsModified) + 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 *IDelegationManagerOperatorDetailsModifiedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelegationManagerOperatorDetailsModifiedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelegationManagerOperatorDetailsModified represents a OperatorDetailsModified event raised by the IDelegationManager contract. +type IDelegationManagerOperatorDetailsModified struct { + Operator common.Address + NewOperatorDetails IDelegationManagerOperatorDetails + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorDetailsModified is a free log retrieval operation binding the contract event 0xfebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac. +// +// Solidity: event OperatorDetailsModified(address indexed operator, (address,address,uint32) newOperatorDetails) +func (_IDelegationManager *IDelegationManagerFilterer) FilterOperatorDetailsModified(opts *bind.FilterOpts, operator []common.Address) (*IDelegationManagerOperatorDetailsModifiedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "OperatorDetailsModified", operatorRule) + if err != nil { + return nil, err + } + return &IDelegationManagerOperatorDetailsModifiedIterator{contract: _IDelegationManager.contract, event: "OperatorDetailsModified", logs: logs, sub: sub}, nil +} + +// WatchOperatorDetailsModified is a free log subscription operation binding the contract event 0xfebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac. +// +// Solidity: event OperatorDetailsModified(address indexed operator, (address,address,uint32) newOperatorDetails) +func (_IDelegationManager *IDelegationManagerFilterer) WatchOperatorDetailsModified(opts *bind.WatchOpts, sink chan<- *IDelegationManagerOperatorDetailsModified, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "OperatorDetailsModified", 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(IDelegationManagerOperatorDetailsModified) + if err := _IDelegationManager.contract.UnpackLog(event, "OperatorDetailsModified", 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 +} + +// ParseOperatorDetailsModified is a log parse operation binding the contract event 0xfebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac. +// +// Solidity: event OperatorDetailsModified(address indexed operator, (address,address,uint32) newOperatorDetails) +func (_IDelegationManager *IDelegationManagerFilterer) ParseOperatorDetailsModified(log types.Log) (*IDelegationManagerOperatorDetailsModified, error) { + event := new(IDelegationManagerOperatorDetailsModified) + if err := _IDelegationManager.contract.UnpackLog(event, "OperatorDetailsModified", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelegationManagerOperatorMetadataURIUpdatedIterator is returned from FilterOperatorMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for OperatorMetadataURIUpdated events raised by the IDelegationManager contract. +type IDelegationManagerOperatorMetadataURIUpdatedIterator struct { + Event *IDelegationManagerOperatorMetadataURIUpdated // 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 *IDelegationManagerOperatorMetadataURIUpdatedIterator) 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(IDelegationManagerOperatorMetadataURIUpdated) + 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(IDelegationManagerOperatorMetadataURIUpdated) + 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 *IDelegationManagerOperatorMetadataURIUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelegationManagerOperatorMetadataURIUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelegationManagerOperatorMetadataURIUpdated represents a OperatorMetadataURIUpdated event raised by the IDelegationManager contract. +type IDelegationManagerOperatorMetadataURIUpdated struct { + Operator common.Address + MetadataURI string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorMetadataURIUpdated is a free log retrieval operation binding the contract event 0x02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090. +// +// Solidity: event OperatorMetadataURIUpdated(address indexed operator, string metadataURI) +func (_IDelegationManager *IDelegationManagerFilterer) FilterOperatorMetadataURIUpdated(opts *bind.FilterOpts, operator []common.Address) (*IDelegationManagerOperatorMetadataURIUpdatedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "OperatorMetadataURIUpdated", operatorRule) + if err != nil { + return nil, err + } + return &IDelegationManagerOperatorMetadataURIUpdatedIterator{contract: _IDelegationManager.contract, event: "OperatorMetadataURIUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorMetadataURIUpdated is a free log subscription operation binding the contract event 0x02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090. +// +// Solidity: event OperatorMetadataURIUpdated(address indexed operator, string metadataURI) +func (_IDelegationManager *IDelegationManagerFilterer) WatchOperatorMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *IDelegationManagerOperatorMetadataURIUpdated, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "OperatorMetadataURIUpdated", 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(IDelegationManagerOperatorMetadataURIUpdated) + if err := _IDelegationManager.contract.UnpackLog(event, "OperatorMetadataURIUpdated", 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 +} + +// ParseOperatorMetadataURIUpdated is a log parse operation binding the contract event 0x02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090. +// +// Solidity: event OperatorMetadataURIUpdated(address indexed operator, string metadataURI) +func (_IDelegationManager *IDelegationManagerFilterer) ParseOperatorMetadataURIUpdated(log types.Log) (*IDelegationManagerOperatorMetadataURIUpdated, error) { + event := new(IDelegationManagerOperatorMetadataURIUpdated) + if err := _IDelegationManager.contract.UnpackLog(event, "OperatorMetadataURIUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelegationManagerOperatorRegisteredIterator is returned from FilterOperatorRegistered and is used to iterate over the raw logs and unpacked data for OperatorRegistered events raised by the IDelegationManager contract. +type IDelegationManagerOperatorRegisteredIterator struct { + Event *IDelegationManagerOperatorRegistered // 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 *IDelegationManagerOperatorRegisteredIterator) 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(IDelegationManagerOperatorRegistered) + 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(IDelegationManagerOperatorRegistered) + 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 *IDelegationManagerOperatorRegisteredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelegationManagerOperatorRegisteredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelegationManagerOperatorRegistered represents a OperatorRegistered event raised by the IDelegationManager contract. +type IDelegationManagerOperatorRegistered struct { + Operator common.Address + OperatorDetails IDelegationManagerOperatorDetails + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorRegistered is a free log retrieval operation binding the contract event 0x8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e2. +// +// Solidity: event OperatorRegistered(address indexed operator, (address,address,uint32) operatorDetails) +func (_IDelegationManager *IDelegationManagerFilterer) FilterOperatorRegistered(opts *bind.FilterOpts, operator []common.Address) (*IDelegationManagerOperatorRegisteredIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "OperatorRegistered", operatorRule) + if err != nil { + return nil, err + } + return &IDelegationManagerOperatorRegisteredIterator{contract: _IDelegationManager.contract, event: "OperatorRegistered", logs: logs, sub: sub}, nil +} + +// WatchOperatorRegistered is a free log subscription operation binding the contract event 0x8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e2. +// +// Solidity: event OperatorRegistered(address indexed operator, (address,address,uint32) operatorDetails) +func (_IDelegationManager *IDelegationManagerFilterer) WatchOperatorRegistered(opts *bind.WatchOpts, sink chan<- *IDelegationManagerOperatorRegistered, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "OperatorRegistered", 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(IDelegationManagerOperatorRegistered) + if err := _IDelegationManager.contract.UnpackLog(event, "OperatorRegistered", 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 +} + +// ParseOperatorRegistered is a log parse operation binding the contract event 0x8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e2. +// +// Solidity: event OperatorRegistered(address indexed operator, (address,address,uint32) operatorDetails) +func (_IDelegationManager *IDelegationManagerFilterer) ParseOperatorRegistered(log types.Log) (*IDelegationManagerOperatorRegistered, error) { + event := new(IDelegationManagerOperatorRegistered) + if err := _IDelegationManager.contract.UnpackLog(event, "OperatorRegistered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelegationManagerOperatorSharesDecreasedIterator is returned from FilterOperatorSharesDecreased and is used to iterate over the raw logs and unpacked data for OperatorSharesDecreased events raised by the IDelegationManager contract. +type IDelegationManagerOperatorSharesDecreasedIterator struct { + Event *IDelegationManagerOperatorSharesDecreased // 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 *IDelegationManagerOperatorSharesDecreasedIterator) 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(IDelegationManagerOperatorSharesDecreased) + 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(IDelegationManagerOperatorSharesDecreased) + 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 *IDelegationManagerOperatorSharesDecreasedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelegationManagerOperatorSharesDecreasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelegationManagerOperatorSharesDecreased represents a OperatorSharesDecreased event raised by the IDelegationManager contract. +type IDelegationManagerOperatorSharesDecreased struct { + Operator common.Address + Staker common.Address + Strategy common.Address + Shares *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSharesDecreased is a free log retrieval operation binding the contract event 0x6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd. +// +// Solidity: event OperatorSharesDecreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_IDelegationManager *IDelegationManagerFilterer) FilterOperatorSharesDecreased(opts *bind.FilterOpts, operator []common.Address) (*IDelegationManagerOperatorSharesDecreasedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "OperatorSharesDecreased", operatorRule) + if err != nil { + return nil, err + } + return &IDelegationManagerOperatorSharesDecreasedIterator{contract: _IDelegationManager.contract, event: "OperatorSharesDecreased", logs: logs, sub: sub}, nil +} + +// WatchOperatorSharesDecreased is a free log subscription operation binding the contract event 0x6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd. +// +// Solidity: event OperatorSharesDecreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_IDelegationManager *IDelegationManagerFilterer) WatchOperatorSharesDecreased(opts *bind.WatchOpts, sink chan<- *IDelegationManagerOperatorSharesDecreased, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "OperatorSharesDecreased", 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(IDelegationManagerOperatorSharesDecreased) + if err := _IDelegationManager.contract.UnpackLog(event, "OperatorSharesDecreased", 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 +} + +// ParseOperatorSharesDecreased is a log parse operation binding the contract event 0x6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd. +// +// Solidity: event OperatorSharesDecreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_IDelegationManager *IDelegationManagerFilterer) ParseOperatorSharesDecreased(log types.Log) (*IDelegationManagerOperatorSharesDecreased, error) { + event := new(IDelegationManagerOperatorSharesDecreased) + if err := _IDelegationManager.contract.UnpackLog(event, "OperatorSharesDecreased", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelegationManagerOperatorSharesIncreasedIterator is returned from FilterOperatorSharesIncreased and is used to iterate over the raw logs and unpacked data for OperatorSharesIncreased events raised by the IDelegationManager contract. +type IDelegationManagerOperatorSharesIncreasedIterator struct { + Event *IDelegationManagerOperatorSharesIncreased // 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 *IDelegationManagerOperatorSharesIncreasedIterator) 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(IDelegationManagerOperatorSharesIncreased) + 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(IDelegationManagerOperatorSharesIncreased) + 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 *IDelegationManagerOperatorSharesIncreasedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelegationManagerOperatorSharesIncreasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelegationManagerOperatorSharesIncreased represents a OperatorSharesIncreased event raised by the IDelegationManager contract. +type IDelegationManagerOperatorSharesIncreased struct { + Operator common.Address + Staker common.Address + Strategy common.Address + Shares *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSharesIncreased is a free log retrieval operation binding the contract event 0x1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c. +// +// Solidity: event OperatorSharesIncreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_IDelegationManager *IDelegationManagerFilterer) FilterOperatorSharesIncreased(opts *bind.FilterOpts, operator []common.Address) (*IDelegationManagerOperatorSharesIncreasedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "OperatorSharesIncreased", operatorRule) + if err != nil { + return nil, err + } + return &IDelegationManagerOperatorSharesIncreasedIterator{contract: _IDelegationManager.contract, event: "OperatorSharesIncreased", logs: logs, sub: sub}, nil +} + +// WatchOperatorSharesIncreased is a free log subscription operation binding the contract event 0x1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c. +// +// Solidity: event OperatorSharesIncreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_IDelegationManager *IDelegationManagerFilterer) WatchOperatorSharesIncreased(opts *bind.WatchOpts, sink chan<- *IDelegationManagerOperatorSharesIncreased, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "OperatorSharesIncreased", 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(IDelegationManagerOperatorSharesIncreased) + if err := _IDelegationManager.contract.UnpackLog(event, "OperatorSharesIncreased", 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 +} + +// ParseOperatorSharesIncreased is a log parse operation binding the contract event 0x1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c. +// +// Solidity: event OperatorSharesIncreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_IDelegationManager *IDelegationManagerFilterer) ParseOperatorSharesIncreased(log types.Log) (*IDelegationManagerOperatorSharesIncreased, error) { + event := new(IDelegationManagerOperatorSharesIncreased) + if err := _IDelegationManager.contract.UnpackLog(event, "OperatorSharesIncreased", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelegationManagerStakerDelegatedIterator is returned from FilterStakerDelegated and is used to iterate over the raw logs and unpacked data for StakerDelegated events raised by the IDelegationManager contract. +type IDelegationManagerStakerDelegatedIterator struct { + Event *IDelegationManagerStakerDelegated // 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 *IDelegationManagerStakerDelegatedIterator) 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(IDelegationManagerStakerDelegated) + 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(IDelegationManagerStakerDelegated) + 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 *IDelegationManagerStakerDelegatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelegationManagerStakerDelegatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelegationManagerStakerDelegated represents a StakerDelegated event raised by the IDelegationManager contract. +type IDelegationManagerStakerDelegated struct { + Staker common.Address + Operator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStakerDelegated is a free log retrieval operation binding the contract event 0xc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d8743304. +// +// Solidity: event StakerDelegated(address indexed staker, address indexed operator) +func (_IDelegationManager *IDelegationManagerFilterer) FilterStakerDelegated(opts *bind.FilterOpts, staker []common.Address, operator []common.Address) (*IDelegationManagerStakerDelegatedIterator, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "StakerDelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return &IDelegationManagerStakerDelegatedIterator{contract: _IDelegationManager.contract, event: "StakerDelegated", logs: logs, sub: sub}, nil +} + +// WatchStakerDelegated is a free log subscription operation binding the contract event 0xc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d8743304. +// +// Solidity: event StakerDelegated(address indexed staker, address indexed operator) +func (_IDelegationManager *IDelegationManagerFilterer) WatchStakerDelegated(opts *bind.WatchOpts, sink chan<- *IDelegationManagerStakerDelegated, staker []common.Address, operator []common.Address) (event.Subscription, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "StakerDelegated", stakerRule, 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(IDelegationManagerStakerDelegated) + if err := _IDelegationManager.contract.UnpackLog(event, "StakerDelegated", 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 +} + +// ParseStakerDelegated is a log parse operation binding the contract event 0xc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d8743304. +// +// Solidity: event StakerDelegated(address indexed staker, address indexed operator) +func (_IDelegationManager *IDelegationManagerFilterer) ParseStakerDelegated(log types.Log) (*IDelegationManagerStakerDelegated, error) { + event := new(IDelegationManagerStakerDelegated) + if err := _IDelegationManager.contract.UnpackLog(event, "StakerDelegated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelegationManagerStakerForceUndelegatedIterator is returned from FilterStakerForceUndelegated and is used to iterate over the raw logs and unpacked data for StakerForceUndelegated events raised by the IDelegationManager contract. +type IDelegationManagerStakerForceUndelegatedIterator struct { + Event *IDelegationManagerStakerForceUndelegated // 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 *IDelegationManagerStakerForceUndelegatedIterator) 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(IDelegationManagerStakerForceUndelegated) + 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(IDelegationManagerStakerForceUndelegated) + 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 *IDelegationManagerStakerForceUndelegatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelegationManagerStakerForceUndelegatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelegationManagerStakerForceUndelegated represents a StakerForceUndelegated event raised by the IDelegationManager contract. +type IDelegationManagerStakerForceUndelegated struct { + Staker common.Address + Operator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStakerForceUndelegated is a free log retrieval operation binding the contract event 0xf0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a. +// +// Solidity: event StakerForceUndelegated(address indexed staker, address indexed operator) +func (_IDelegationManager *IDelegationManagerFilterer) FilterStakerForceUndelegated(opts *bind.FilterOpts, staker []common.Address, operator []common.Address) (*IDelegationManagerStakerForceUndelegatedIterator, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "StakerForceUndelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return &IDelegationManagerStakerForceUndelegatedIterator{contract: _IDelegationManager.contract, event: "StakerForceUndelegated", logs: logs, sub: sub}, nil +} + +// WatchStakerForceUndelegated is a free log subscription operation binding the contract event 0xf0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a. +// +// Solidity: event StakerForceUndelegated(address indexed staker, address indexed operator) +func (_IDelegationManager *IDelegationManagerFilterer) WatchStakerForceUndelegated(opts *bind.WatchOpts, sink chan<- *IDelegationManagerStakerForceUndelegated, staker []common.Address, operator []common.Address) (event.Subscription, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "StakerForceUndelegated", stakerRule, 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(IDelegationManagerStakerForceUndelegated) + if err := _IDelegationManager.contract.UnpackLog(event, "StakerForceUndelegated", 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 +} + +// ParseStakerForceUndelegated is a log parse operation binding the contract event 0xf0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a. +// +// Solidity: event StakerForceUndelegated(address indexed staker, address indexed operator) +func (_IDelegationManager *IDelegationManagerFilterer) ParseStakerForceUndelegated(log types.Log) (*IDelegationManagerStakerForceUndelegated, error) { + event := new(IDelegationManagerStakerForceUndelegated) + if err := _IDelegationManager.contract.UnpackLog(event, "StakerForceUndelegated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelegationManagerStakerUndelegatedIterator is returned from FilterStakerUndelegated and is used to iterate over the raw logs and unpacked data for StakerUndelegated events raised by the IDelegationManager contract. +type IDelegationManagerStakerUndelegatedIterator struct { + Event *IDelegationManagerStakerUndelegated // 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 *IDelegationManagerStakerUndelegatedIterator) 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(IDelegationManagerStakerUndelegated) + 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(IDelegationManagerStakerUndelegated) + 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 *IDelegationManagerStakerUndelegatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelegationManagerStakerUndelegatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelegationManagerStakerUndelegated represents a StakerUndelegated event raised by the IDelegationManager contract. +type IDelegationManagerStakerUndelegated struct { + Staker common.Address + Operator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStakerUndelegated is a free log retrieval operation binding the contract event 0xfee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af44676. +// +// Solidity: event StakerUndelegated(address indexed staker, address indexed operator) +func (_IDelegationManager *IDelegationManagerFilterer) FilterStakerUndelegated(opts *bind.FilterOpts, staker []common.Address, operator []common.Address) (*IDelegationManagerStakerUndelegatedIterator, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "StakerUndelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return &IDelegationManagerStakerUndelegatedIterator{contract: _IDelegationManager.contract, event: "StakerUndelegated", logs: logs, sub: sub}, nil +} + +// WatchStakerUndelegated is a free log subscription operation binding the contract event 0xfee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af44676. +// +// Solidity: event StakerUndelegated(address indexed staker, address indexed operator) +func (_IDelegationManager *IDelegationManagerFilterer) WatchStakerUndelegated(opts *bind.WatchOpts, sink chan<- *IDelegationManagerStakerUndelegated, staker []common.Address, operator []common.Address) (event.Subscription, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "StakerUndelegated", stakerRule, 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(IDelegationManagerStakerUndelegated) + if err := _IDelegationManager.contract.UnpackLog(event, "StakerUndelegated", 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 +} + +// ParseStakerUndelegated is a log parse operation binding the contract event 0xfee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af44676. +// +// Solidity: event StakerUndelegated(address indexed staker, address indexed operator) +func (_IDelegationManager *IDelegationManagerFilterer) ParseStakerUndelegated(log types.Log) (*IDelegationManagerStakerUndelegated, error) { + event := new(IDelegationManagerStakerUndelegated) + if err := _IDelegationManager.contract.UnpackLog(event, "StakerUndelegated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelegationManagerStrategyWithdrawalDelayBlocksSetIterator is returned from FilterStrategyWithdrawalDelayBlocksSet and is used to iterate over the raw logs and unpacked data for StrategyWithdrawalDelayBlocksSet events raised by the IDelegationManager contract. +type IDelegationManagerStrategyWithdrawalDelayBlocksSetIterator struct { + Event *IDelegationManagerStrategyWithdrawalDelayBlocksSet // 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 *IDelegationManagerStrategyWithdrawalDelayBlocksSetIterator) 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(IDelegationManagerStrategyWithdrawalDelayBlocksSet) + 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(IDelegationManagerStrategyWithdrawalDelayBlocksSet) + 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 *IDelegationManagerStrategyWithdrawalDelayBlocksSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelegationManagerStrategyWithdrawalDelayBlocksSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelegationManagerStrategyWithdrawalDelayBlocksSet represents a StrategyWithdrawalDelayBlocksSet event raised by the IDelegationManager contract. +type IDelegationManagerStrategyWithdrawalDelayBlocksSet struct { + Strategy common.Address + PreviousValue *big.Int + NewValue *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyWithdrawalDelayBlocksSet is a free log retrieval operation binding the contract event 0x0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d. +// +// Solidity: event StrategyWithdrawalDelayBlocksSet(address strategy, uint256 previousValue, uint256 newValue) +func (_IDelegationManager *IDelegationManagerFilterer) FilterStrategyWithdrawalDelayBlocksSet(opts *bind.FilterOpts) (*IDelegationManagerStrategyWithdrawalDelayBlocksSetIterator, error) { + + logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "StrategyWithdrawalDelayBlocksSet") + if err != nil { + return nil, err + } + return &IDelegationManagerStrategyWithdrawalDelayBlocksSetIterator{contract: _IDelegationManager.contract, event: "StrategyWithdrawalDelayBlocksSet", logs: logs, sub: sub}, nil +} + +// WatchStrategyWithdrawalDelayBlocksSet is a free log subscription operation binding the contract event 0x0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d. +// +// Solidity: event StrategyWithdrawalDelayBlocksSet(address strategy, uint256 previousValue, uint256 newValue) +func (_IDelegationManager *IDelegationManagerFilterer) WatchStrategyWithdrawalDelayBlocksSet(opts *bind.WatchOpts, sink chan<- *IDelegationManagerStrategyWithdrawalDelayBlocksSet) (event.Subscription, error) { + + logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "StrategyWithdrawalDelayBlocksSet") + 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(IDelegationManagerStrategyWithdrawalDelayBlocksSet) + if err := _IDelegationManager.contract.UnpackLog(event, "StrategyWithdrawalDelayBlocksSet", 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 +} + +// ParseStrategyWithdrawalDelayBlocksSet is a log parse operation binding the contract event 0x0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d. +// +// Solidity: event StrategyWithdrawalDelayBlocksSet(address strategy, uint256 previousValue, uint256 newValue) +func (_IDelegationManager *IDelegationManagerFilterer) ParseStrategyWithdrawalDelayBlocksSet(log types.Log) (*IDelegationManagerStrategyWithdrawalDelayBlocksSet, error) { + event := new(IDelegationManagerStrategyWithdrawalDelayBlocksSet) + if err := _IDelegationManager.contract.UnpackLog(event, "StrategyWithdrawalDelayBlocksSet", 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 + + 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 *IDelegationManagerWithdrawalCompletedIterator) 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(IDelegationManagerWithdrawalCompleted) + 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(IDelegationManagerWithdrawalCompleted) + 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 *IDelegationManagerWithdrawalCompletedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelegationManagerWithdrawalCompletedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelegationManagerWithdrawalCompleted represents a WithdrawalCompleted event raised by the IDelegationManager contract. +type IDelegationManagerWithdrawalCompleted struct { + WithdrawalRoot [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalCompleted is a free log retrieval operation binding the contract event 0xc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d. +// +// Solidity: event WithdrawalCompleted(bytes32 withdrawalRoot) +func (_IDelegationManager *IDelegationManagerFilterer) FilterWithdrawalCompleted(opts *bind.FilterOpts) (*IDelegationManagerWithdrawalCompletedIterator, error) { + + logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "WithdrawalCompleted") + if err != nil { + return nil, err + } + return &IDelegationManagerWithdrawalCompletedIterator{contract: _IDelegationManager.contract, event: "WithdrawalCompleted", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalCompleted is a free log subscription operation binding the contract event 0xc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d. +// +// Solidity: event WithdrawalCompleted(bytes32 withdrawalRoot) +func (_IDelegationManager *IDelegationManagerFilterer) WatchWithdrawalCompleted(opts *bind.WatchOpts, sink chan<- *IDelegationManagerWithdrawalCompleted) (event.Subscription, error) { + + logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "WithdrawalCompleted") + 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(IDelegationManagerWithdrawalCompleted) + if err := _IDelegationManager.contract.UnpackLog(event, "WithdrawalCompleted", 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 +} + +// ParseWithdrawalCompleted is a log parse operation binding the contract event 0xc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d. +// +// Solidity: event WithdrawalCompleted(bytes32 withdrawalRoot) +func (_IDelegationManager *IDelegationManagerFilterer) ParseWithdrawalCompleted(log types.Log) (*IDelegationManagerWithdrawalCompleted, error) { + event := new(IDelegationManagerWithdrawalCompleted) + if err := _IDelegationManager.contract.UnpackLog(event, "WithdrawalCompleted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelegationManagerWithdrawalMigratedIterator is returned from FilterWithdrawalMigrated and is used to iterate over the raw logs and unpacked data for WithdrawalMigrated events raised by the IDelegationManager contract. +type IDelegationManagerWithdrawalMigratedIterator struct { + Event *IDelegationManagerWithdrawalMigrated // 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 *IDelegationManagerWithdrawalMigratedIterator) 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(IDelegationManagerWithdrawalMigrated) + 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(IDelegationManagerWithdrawalMigrated) + 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 *IDelegationManagerWithdrawalMigratedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelegationManagerWithdrawalMigratedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelegationManagerWithdrawalMigrated represents a WithdrawalMigrated event raised by the IDelegationManager contract. +type IDelegationManagerWithdrawalMigrated struct { + OldWithdrawalRoot [32]byte + NewWithdrawalRoot [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalMigrated is a free log retrieval operation binding the contract event 0xdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630. +// +// Solidity: event WithdrawalMigrated(bytes32 oldWithdrawalRoot, bytes32 newWithdrawalRoot) +func (_IDelegationManager *IDelegationManagerFilterer) FilterWithdrawalMigrated(opts *bind.FilterOpts) (*IDelegationManagerWithdrawalMigratedIterator, error) { + + logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "WithdrawalMigrated") + if err != nil { + return nil, err + } + return &IDelegationManagerWithdrawalMigratedIterator{contract: _IDelegationManager.contract, event: "WithdrawalMigrated", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalMigrated is a free log subscription operation binding the contract event 0xdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630. +// +// Solidity: event WithdrawalMigrated(bytes32 oldWithdrawalRoot, bytes32 newWithdrawalRoot) +func (_IDelegationManager *IDelegationManagerFilterer) WatchWithdrawalMigrated(opts *bind.WatchOpts, sink chan<- *IDelegationManagerWithdrawalMigrated) (event.Subscription, error) { + + logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "WithdrawalMigrated") + 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(IDelegationManagerWithdrawalMigrated) + if err := _IDelegationManager.contract.UnpackLog(event, "WithdrawalMigrated", 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 +} + +// ParseWithdrawalMigrated is a log parse operation binding the contract event 0xdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630. +// +// Solidity: event WithdrawalMigrated(bytes32 oldWithdrawalRoot, bytes32 newWithdrawalRoot) +func (_IDelegationManager *IDelegationManagerFilterer) ParseWithdrawalMigrated(log types.Log) (*IDelegationManagerWithdrawalMigrated, error) { + event := new(IDelegationManagerWithdrawalMigrated) + if err := _IDelegationManager.contract.UnpackLog(event, "WithdrawalMigrated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelegationManagerWithdrawalQueuedIterator is returned from FilterWithdrawalQueued and is used to iterate over the raw logs and unpacked data for WithdrawalQueued events raised by the IDelegationManager contract. +type IDelegationManagerWithdrawalQueuedIterator struct { + Event *IDelegationManagerWithdrawalQueued // 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 *IDelegationManagerWithdrawalQueuedIterator) 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(IDelegationManagerWithdrawalQueued) + 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(IDelegationManagerWithdrawalQueued) + 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 *IDelegationManagerWithdrawalQueuedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelegationManagerWithdrawalQueuedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelegationManagerWithdrawalQueued represents a WithdrawalQueued event raised by the IDelegationManager contract. +type IDelegationManagerWithdrawalQueued struct { + WithdrawalRoot [32]byte + Withdrawal IDelegationManagerWithdrawal + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalQueued is a free log retrieval operation binding the contract event 0x9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9. +// +// Solidity: event WithdrawalQueued(bytes32 withdrawalRoot, (address,address,address,uint256,uint32,address[],uint256[]) withdrawal) +func (_IDelegationManager *IDelegationManagerFilterer) FilterWithdrawalQueued(opts *bind.FilterOpts) (*IDelegationManagerWithdrawalQueuedIterator, error) { + + logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "WithdrawalQueued") + if err != nil { + return nil, err + } + return &IDelegationManagerWithdrawalQueuedIterator{contract: _IDelegationManager.contract, event: "WithdrawalQueued", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalQueued is a free log subscription operation binding the contract event 0x9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9. +// +// Solidity: event WithdrawalQueued(bytes32 withdrawalRoot, (address,address,address,uint256,uint32,address[],uint256[]) withdrawal) +func (_IDelegationManager *IDelegationManagerFilterer) WatchWithdrawalQueued(opts *bind.WatchOpts, sink chan<- *IDelegationManagerWithdrawalQueued) (event.Subscription, error) { + + logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "WithdrawalQueued") + 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(IDelegationManagerWithdrawalQueued) + if err := _IDelegationManager.contract.UnpackLog(event, "WithdrawalQueued", 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 +} + +// ParseWithdrawalQueued is a log parse operation binding the contract event 0x9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9. +// +// Solidity: event WithdrawalQueued(bytes32 withdrawalRoot, (address,address,address,uint256,uint32,address[],uint256[]) withdrawal) +func (_IDelegationManager *IDelegationManagerFilterer) ParseWithdrawalQueued(log types.Log) (*IDelegationManagerWithdrawalQueued, error) { + event := new(IDelegationManagerWithdrawalQueued) + if err := _IDelegationManager.contract.UnpackLog(event, "WithdrawalQueued", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IDelegationManager/tmp.abi b/pkg/bindings/IDelegationManager/tmp.abi new file mode 100644 index 000000000..d7babda0a --- /dev/null +++ b/pkg/bindings/IDelegationManager/tmp.abi @@ -0,0 +1,1323 @@ +[ + { + "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": "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": "struct IDelegationManager.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": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "completeQueuedWithdrawal", + "inputs": [ + { + "name": "withdrawal", + "type": "tuple", + "internalType": "struct IDelegationManager.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": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + }, + { + "name": "tokens", + "type": "address[]", + "internalType": "contract IERC20[]" + }, + { + "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": "struct IDelegationManager.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": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + }, + { + "name": "tokens", + "type": "address[][]", + "internalType": "contract IERC20[][]" + }, + { + "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": "contract IStrategy" + }, + { + "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": "struct ISignatureUtils.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": "struct ISignatureUtils.SignatureWithExpiry", + "components": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "approverSignatureAndExpiry", + "type": "tuple", + "internalType": "struct ISignatureUtils.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": "earningsReceiver", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getOperatorShares", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getWithdrawalDelay", + "inputs": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "increaseDelegatedShares", + "inputs": [ + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "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": "migrateQueuedWithdrawals", + "inputs": [ + { + "name": "withdrawalsToQueue", + "type": "tuple[]", + "internalType": "struct IStrategyManager.DeprecatedStruct_QueuedWithdrawal[]", + "components": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "withdrawerAndNonce", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_WithdrawerAndNonce", + "components": [ + { + "name": "withdrawer", + "type": "address", + "internalType": "address" + }, + { + "name": "nonce", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "name": "withdrawalStartBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "delegatedAddress", + "type": "address", + "internalType": "address" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "minWithdrawalDelayBlocks", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "modifyOperatorDetails", + "inputs": [ + { + "name": "newOperatorDetails", + "type": "tuple", + "internalType": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "contract IStrategy" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "queueWithdrawals", + "inputs": [ + { + "name": "queuedWithdrawalParams", + "type": "tuple[]", + "internalType": "struct IDelegationManager.QueuedWithdrawalParams[]", + "components": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "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": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "contract IStrategy" + } + ], + "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": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "struct IDelegationManager.OperatorDetails", + "components": [ + { + "name": "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": "contract IStrategy" + }, + { + "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": "contract IStrategy" + }, + { + "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": "contract IStrategy" + }, + { + "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": "WithdrawalMigrated", + "inputs": [ + { + "name": "oldWithdrawalRoot", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "newWithdrawalRoot", + "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": "struct IDelegationManager.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": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/IDelegationManager/tmp.bin b/pkg/bindings/IDelegationManager/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IDelegationManager/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/IETHPOSDeposit/binding.go b/pkg/bindings/IETHPOSDeposit/binding.go new file mode 100644 index 000000000..5b344a707 --- /dev/null +++ b/pkg/bindings/IETHPOSDeposit/binding.go @@ -0,0 +1,402 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IETHPOSDeposit + +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 +) + +// IETHPOSDepositMetaData contains all meta data concerning the IETHPOSDeposit contract. +var IETHPOSDepositMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"withdrawal_credentials\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"deposit_data_root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"get_deposit_count\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"get_deposit_root\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DepositEvent\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"withdrawal_credentials\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", +} + +// IETHPOSDepositABI is the input ABI used to generate the binding from. +// Deprecated: Use IETHPOSDepositMetaData.ABI instead. +var IETHPOSDepositABI = IETHPOSDepositMetaData.ABI + +// IETHPOSDeposit is an auto generated Go binding around an Ethereum contract. +type IETHPOSDeposit struct { + IETHPOSDepositCaller // Read-only binding to the contract + IETHPOSDepositTransactor // Write-only binding to the contract + IETHPOSDepositFilterer // Log filterer for contract events +} + +// IETHPOSDepositCaller is an auto generated read-only Go binding around an Ethereum contract. +type IETHPOSDepositCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IETHPOSDepositTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IETHPOSDepositTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IETHPOSDepositFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IETHPOSDepositFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IETHPOSDepositSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IETHPOSDepositSession struct { + Contract *IETHPOSDeposit // 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 +} + +// IETHPOSDepositCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IETHPOSDepositCallerSession struct { + Contract *IETHPOSDepositCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IETHPOSDepositTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IETHPOSDepositTransactorSession struct { + Contract *IETHPOSDepositTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IETHPOSDepositRaw is an auto generated low-level Go binding around an Ethereum contract. +type IETHPOSDepositRaw struct { + Contract *IETHPOSDeposit // Generic contract binding to access the raw methods on +} + +// IETHPOSDepositCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IETHPOSDepositCallerRaw struct { + Contract *IETHPOSDepositCaller // Generic read-only contract binding to access the raw methods on +} + +// IETHPOSDepositTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IETHPOSDepositTransactorRaw struct { + Contract *IETHPOSDepositTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIETHPOSDeposit creates a new instance of IETHPOSDeposit, bound to a specific deployed contract. +func NewIETHPOSDeposit(address common.Address, backend bind.ContractBackend) (*IETHPOSDeposit, error) { + contract, err := bindIETHPOSDeposit(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IETHPOSDeposit{IETHPOSDepositCaller: IETHPOSDepositCaller{contract: contract}, IETHPOSDepositTransactor: IETHPOSDepositTransactor{contract: contract}, IETHPOSDepositFilterer: IETHPOSDepositFilterer{contract: contract}}, nil +} + +// NewIETHPOSDepositCaller creates a new read-only instance of IETHPOSDeposit, bound to a specific deployed contract. +func NewIETHPOSDepositCaller(address common.Address, caller bind.ContractCaller) (*IETHPOSDepositCaller, error) { + contract, err := bindIETHPOSDeposit(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IETHPOSDepositCaller{contract: contract}, nil +} + +// NewIETHPOSDepositTransactor creates a new write-only instance of IETHPOSDeposit, bound to a specific deployed contract. +func NewIETHPOSDepositTransactor(address common.Address, transactor bind.ContractTransactor) (*IETHPOSDepositTransactor, error) { + contract, err := bindIETHPOSDeposit(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IETHPOSDepositTransactor{contract: contract}, nil +} + +// NewIETHPOSDepositFilterer creates a new log filterer instance of IETHPOSDeposit, bound to a specific deployed contract. +func NewIETHPOSDepositFilterer(address common.Address, filterer bind.ContractFilterer) (*IETHPOSDepositFilterer, error) { + contract, err := bindIETHPOSDeposit(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IETHPOSDepositFilterer{contract: contract}, nil +} + +// bindIETHPOSDeposit binds a generic wrapper to an already deployed contract. +func bindIETHPOSDeposit(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IETHPOSDepositMetaData.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 (_IETHPOSDeposit *IETHPOSDepositRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IETHPOSDeposit.Contract.IETHPOSDepositCaller.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 (_IETHPOSDeposit *IETHPOSDepositRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IETHPOSDeposit.Contract.IETHPOSDepositTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IETHPOSDeposit *IETHPOSDepositRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IETHPOSDeposit.Contract.IETHPOSDepositTransactor.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 (_IETHPOSDeposit *IETHPOSDepositCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IETHPOSDeposit.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 (_IETHPOSDeposit *IETHPOSDepositTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IETHPOSDeposit.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IETHPOSDeposit *IETHPOSDepositTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IETHPOSDeposit.Contract.contract.Transact(opts, method, params...) +} + +// GetDepositCount is a free data retrieval call binding the contract method 0x621fd130. +// +// Solidity: function get_deposit_count() view returns(bytes) +func (_IETHPOSDeposit *IETHPOSDepositCaller) GetDepositCount(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _IETHPOSDeposit.contract.Call(opts, &out, "get_deposit_count") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// GetDepositCount is a free data retrieval call binding the contract method 0x621fd130. +// +// Solidity: function get_deposit_count() view returns(bytes) +func (_IETHPOSDeposit *IETHPOSDepositSession) GetDepositCount() ([]byte, error) { + return _IETHPOSDeposit.Contract.GetDepositCount(&_IETHPOSDeposit.CallOpts) +} + +// GetDepositCount is a free data retrieval call binding the contract method 0x621fd130. +// +// Solidity: function get_deposit_count() view returns(bytes) +func (_IETHPOSDeposit *IETHPOSDepositCallerSession) GetDepositCount() ([]byte, error) { + return _IETHPOSDeposit.Contract.GetDepositCount(&_IETHPOSDeposit.CallOpts) +} + +// GetDepositRoot is a free data retrieval call binding the contract method 0xc5f2892f. +// +// Solidity: function get_deposit_root() view returns(bytes32) +func (_IETHPOSDeposit *IETHPOSDepositCaller) GetDepositRoot(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _IETHPOSDeposit.contract.Call(opts, &out, "get_deposit_root") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetDepositRoot is a free data retrieval call binding the contract method 0xc5f2892f. +// +// Solidity: function get_deposit_root() view returns(bytes32) +func (_IETHPOSDeposit *IETHPOSDepositSession) GetDepositRoot() ([32]byte, error) { + return _IETHPOSDeposit.Contract.GetDepositRoot(&_IETHPOSDeposit.CallOpts) +} + +// GetDepositRoot is a free data retrieval call binding the contract method 0xc5f2892f. +// +// Solidity: function get_deposit_root() view returns(bytes32) +func (_IETHPOSDeposit *IETHPOSDepositCallerSession) GetDepositRoot() ([32]byte, error) { + return _IETHPOSDeposit.Contract.GetDepositRoot(&_IETHPOSDeposit.CallOpts) +} + +// Deposit is a paid mutator transaction binding the contract method 0x22895118. +// +// Solidity: function deposit(bytes pubkey, bytes withdrawal_credentials, bytes signature, bytes32 deposit_data_root) payable returns() +func (_IETHPOSDeposit *IETHPOSDepositTransactor) Deposit(opts *bind.TransactOpts, pubkey []byte, withdrawal_credentials []byte, signature []byte, deposit_data_root [32]byte) (*types.Transaction, error) { + return _IETHPOSDeposit.contract.Transact(opts, "deposit", pubkey, withdrawal_credentials, signature, deposit_data_root) +} + +// Deposit is a paid mutator transaction binding the contract method 0x22895118. +// +// Solidity: function deposit(bytes pubkey, bytes withdrawal_credentials, bytes signature, bytes32 deposit_data_root) payable returns() +func (_IETHPOSDeposit *IETHPOSDepositSession) Deposit(pubkey []byte, withdrawal_credentials []byte, signature []byte, deposit_data_root [32]byte) (*types.Transaction, error) { + return _IETHPOSDeposit.Contract.Deposit(&_IETHPOSDeposit.TransactOpts, pubkey, withdrawal_credentials, signature, deposit_data_root) +} + +// Deposit is a paid mutator transaction binding the contract method 0x22895118. +// +// Solidity: function deposit(bytes pubkey, bytes withdrawal_credentials, bytes signature, bytes32 deposit_data_root) payable returns() +func (_IETHPOSDeposit *IETHPOSDepositTransactorSession) Deposit(pubkey []byte, withdrawal_credentials []byte, signature []byte, deposit_data_root [32]byte) (*types.Transaction, error) { + return _IETHPOSDeposit.Contract.Deposit(&_IETHPOSDeposit.TransactOpts, pubkey, withdrawal_credentials, signature, deposit_data_root) +} + +// IETHPOSDepositDepositEventIterator is returned from FilterDepositEvent and is used to iterate over the raw logs and unpacked data for DepositEvent events raised by the IETHPOSDeposit contract. +type IETHPOSDepositDepositEventIterator struct { + Event *IETHPOSDepositDepositEvent // 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 *IETHPOSDepositDepositEventIterator) 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(IETHPOSDepositDepositEvent) + 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(IETHPOSDepositDepositEvent) + 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 *IETHPOSDepositDepositEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IETHPOSDepositDepositEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IETHPOSDepositDepositEvent represents a DepositEvent event raised by the IETHPOSDeposit contract. +type IETHPOSDepositDepositEvent struct { + Pubkey []byte + WithdrawalCredentials []byte + Amount []byte + Signature []byte + Index []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDepositEvent is a free log retrieval operation binding the contract event 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5. +// +// Solidity: event DepositEvent(bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index) +func (_IETHPOSDeposit *IETHPOSDepositFilterer) FilterDepositEvent(opts *bind.FilterOpts) (*IETHPOSDepositDepositEventIterator, error) { + + logs, sub, err := _IETHPOSDeposit.contract.FilterLogs(opts, "DepositEvent") + if err != nil { + return nil, err + } + return &IETHPOSDepositDepositEventIterator{contract: _IETHPOSDeposit.contract, event: "DepositEvent", logs: logs, sub: sub}, nil +} + +// WatchDepositEvent is a free log subscription operation binding the contract event 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5. +// +// Solidity: event DepositEvent(bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index) +func (_IETHPOSDeposit *IETHPOSDepositFilterer) WatchDepositEvent(opts *bind.WatchOpts, sink chan<- *IETHPOSDepositDepositEvent) (event.Subscription, error) { + + logs, sub, err := _IETHPOSDeposit.contract.WatchLogs(opts, "DepositEvent") + 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(IETHPOSDepositDepositEvent) + if err := _IETHPOSDeposit.contract.UnpackLog(event, "DepositEvent", 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 +} + +// ParseDepositEvent is a log parse operation binding the contract event 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5. +// +// Solidity: event DepositEvent(bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index) +func (_IETHPOSDeposit *IETHPOSDepositFilterer) ParseDepositEvent(log types.Log) (*IETHPOSDepositDepositEvent, error) { + event := new(IETHPOSDepositDepositEvent) + if err := _IETHPOSDeposit.contract.UnpackLog(event, "DepositEvent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IETHPOSDeposit/tmp.abi b/pkg/bindings/IETHPOSDeposit/tmp.abi new file mode 100644 index 000000000..259b54ceb --- /dev/null +++ b/pkg/bindings/IETHPOSDeposit/tmp.abi @@ -0,0 +1,93 @@ +[ + { + "type": "function", + "name": "deposit", + "inputs": [ + { + "name": "pubkey", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "withdrawal_credentials", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "deposit_data_root", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "get_deposit_count", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "get_deposit_root", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "DepositEvent", + "inputs": [ + { + "name": "pubkey", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "withdrawal_credentials", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "amount", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "signature", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "index", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/IETHPOSDeposit/tmp.bin b/pkg/bindings/IETHPOSDeposit/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IETHPOSDeposit/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/IEigen/binding.go b/pkg/bindings/IEigen/binding.go new file mode 100644 index 000000000..a294ccb77 --- /dev/null +++ b/pkg/bindings/IEigen/binding.go @@ -0,0 +1,833 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IEigen + +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 +) + +// IEigenMetaData contains all meta data concerning the IEigen contract. +var IEigenMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"CLOCK_MODE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"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\":\"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\":\"clock\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint48\",\"internalType\":\"uint48\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableTransferRestrictions\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"mint\",\"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\":\"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\":\"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\":\"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}]", +} + +// IEigenABI is the input ABI used to generate the binding from. +// Deprecated: Use IEigenMetaData.ABI instead. +var IEigenABI = IEigenMetaData.ABI + +// IEigen is an auto generated Go binding around an Ethereum contract. +type IEigen struct { + IEigenCaller // Read-only binding to the contract + IEigenTransactor // Write-only binding to the contract + IEigenFilterer // Log filterer for contract events +} + +// IEigenCaller is an auto generated read-only Go binding around an Ethereum contract. +type IEigenCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IEigenTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IEigenTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IEigenFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IEigenFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IEigenSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IEigenSession struct { + Contract *IEigen // 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 +} + +// IEigenCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IEigenCallerSession struct { + Contract *IEigenCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IEigenTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IEigenTransactorSession struct { + Contract *IEigenTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IEigenRaw is an auto generated low-level Go binding around an Ethereum contract. +type IEigenRaw struct { + Contract *IEigen // Generic contract binding to access the raw methods on +} + +// IEigenCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IEigenCallerRaw struct { + Contract *IEigenCaller // Generic read-only contract binding to access the raw methods on +} + +// IEigenTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IEigenTransactorRaw struct { + Contract *IEigenTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIEigen creates a new instance of IEigen, bound to a specific deployed contract. +func NewIEigen(address common.Address, backend bind.ContractBackend) (*IEigen, error) { + contract, err := bindIEigen(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IEigen{IEigenCaller: IEigenCaller{contract: contract}, IEigenTransactor: IEigenTransactor{contract: contract}, IEigenFilterer: IEigenFilterer{contract: contract}}, nil +} + +// NewIEigenCaller creates a new read-only instance of IEigen, bound to a specific deployed contract. +func NewIEigenCaller(address common.Address, caller bind.ContractCaller) (*IEigenCaller, error) { + contract, err := bindIEigen(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IEigenCaller{contract: contract}, nil +} + +// NewIEigenTransactor creates a new write-only instance of IEigen, bound to a specific deployed contract. +func NewIEigenTransactor(address common.Address, transactor bind.ContractTransactor) (*IEigenTransactor, error) { + contract, err := bindIEigen(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IEigenTransactor{contract: contract}, nil +} + +// NewIEigenFilterer creates a new log filterer instance of IEigen, bound to a specific deployed contract. +func NewIEigenFilterer(address common.Address, filterer bind.ContractFilterer) (*IEigenFilterer, error) { + contract, err := bindIEigen(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IEigenFilterer{contract: contract}, nil +} + +// bindIEigen binds a generic wrapper to an already deployed contract. +func bindIEigen(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IEigenMetaData.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 (_IEigen *IEigenRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IEigen.Contract.IEigenCaller.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 (_IEigen *IEigenRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IEigen.Contract.IEigenTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IEigen *IEigenRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IEigen.Contract.IEigenTransactor.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 (_IEigen *IEigenCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IEigen.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 (_IEigen *IEigenTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IEigen.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IEigen *IEigenTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IEigen.Contract.contract.Transact(opts, method, params...) +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() pure returns(string) +func (_IEigen *IEigenCaller) CLOCKMODE(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _IEigen.contract.Call(opts, &out, "CLOCK_MODE") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() pure returns(string) +func (_IEigen *IEigenSession) CLOCKMODE() (string, error) { + return _IEigen.Contract.CLOCKMODE(&_IEigen.CallOpts) +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() pure returns(string) +func (_IEigen *IEigenCallerSession) CLOCKMODE() (string, error) { + return _IEigen.Contract.CLOCKMODE(&_IEigen.CallOpts) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_IEigen *IEigenCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _IEigen.contract.Call(opts, &out, "allowance", owner, spender) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_IEigen *IEigenSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _IEigen.Contract.Allowance(&_IEigen.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_IEigen *IEigenCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _IEigen.Contract.Allowance(&_IEigen.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_IEigen *IEigenCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _IEigen.contract.Call(opts, &out, "balanceOf", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_IEigen *IEigenSession) BalanceOf(account common.Address) (*big.Int, error) { + return _IEigen.Contract.BalanceOf(&_IEigen.CallOpts, account) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_IEigen *IEigenCallerSession) BalanceOf(account common.Address) (*big.Int, error) { + return _IEigen.Contract.BalanceOf(&_IEigen.CallOpts, account) +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_IEigen *IEigenCaller) Clock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IEigen.contract.Call(opts, &out, "clock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_IEigen *IEigenSession) Clock() (*big.Int, error) { + return _IEigen.Contract.Clock(&_IEigen.CallOpts) +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_IEigen *IEigenCallerSession) Clock() (*big.Int, error) { + return _IEigen.Contract.Clock(&_IEigen.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_IEigen *IEigenCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IEigen.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_IEigen *IEigenSession) TotalSupply() (*big.Int, error) { + return _IEigen.Contract.TotalSupply(&_IEigen.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_IEigen *IEigenCallerSession) TotalSupply() (*big.Int, error) { + return _IEigen.Contract.TotalSupply(&_IEigen.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_IEigen *IEigenTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _IEigen.contract.Transact(opts, "approve", spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_IEigen *IEigenSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _IEigen.Contract.Approve(&_IEigen.TransactOpts, spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_IEigen *IEigenTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _IEigen.Contract.Approve(&_IEigen.TransactOpts, spender, amount) +} + +// DisableTransferRestrictions is a paid mutator transaction binding the contract method 0xeb415f45. +// +// Solidity: function disableTransferRestrictions() returns() +func (_IEigen *IEigenTransactor) DisableTransferRestrictions(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IEigen.contract.Transact(opts, "disableTransferRestrictions") +} + +// DisableTransferRestrictions is a paid mutator transaction binding the contract method 0xeb415f45. +// +// Solidity: function disableTransferRestrictions() returns() +func (_IEigen *IEigenSession) DisableTransferRestrictions() (*types.Transaction, error) { + return _IEigen.Contract.DisableTransferRestrictions(&_IEigen.TransactOpts) +} + +// DisableTransferRestrictions is a paid mutator transaction binding the contract method 0xeb415f45. +// +// Solidity: function disableTransferRestrictions() returns() +func (_IEigen *IEigenTransactorSession) DisableTransferRestrictions() (*types.Transaction, error) { + return _IEigen.Contract.DisableTransferRestrictions(&_IEigen.TransactOpts) +} + +// Mint is a paid mutator transaction binding the contract method 0x1249c58b. +// +// Solidity: function mint() returns() +func (_IEigen *IEigenTransactor) Mint(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IEigen.contract.Transact(opts, "mint") +} + +// Mint is a paid mutator transaction binding the contract method 0x1249c58b. +// +// Solidity: function mint() returns() +func (_IEigen *IEigenSession) Mint() (*types.Transaction, error) { + return _IEigen.Contract.Mint(&_IEigen.TransactOpts) +} + +// Mint is a paid mutator transaction binding the contract method 0x1249c58b. +// +// Solidity: function mint() returns() +func (_IEigen *IEigenTransactorSession) Mint() (*types.Transaction, error) { + return _IEigen.Contract.Mint(&_IEigen.TransactOpts) +} + +// SetAllowedFrom is a paid mutator transaction binding the contract method 0x1ffacdef. +// +// Solidity: function setAllowedFrom(address from, bool isAllowedFrom) returns() +func (_IEigen *IEigenTransactor) SetAllowedFrom(opts *bind.TransactOpts, from common.Address, isAllowedFrom bool) (*types.Transaction, error) { + return _IEigen.contract.Transact(opts, "setAllowedFrom", from, isAllowedFrom) +} + +// SetAllowedFrom is a paid mutator transaction binding the contract method 0x1ffacdef. +// +// Solidity: function setAllowedFrom(address from, bool isAllowedFrom) returns() +func (_IEigen *IEigenSession) SetAllowedFrom(from common.Address, isAllowedFrom bool) (*types.Transaction, error) { + return _IEigen.Contract.SetAllowedFrom(&_IEigen.TransactOpts, from, isAllowedFrom) +} + +// SetAllowedFrom is a paid mutator transaction binding the contract method 0x1ffacdef. +// +// Solidity: function setAllowedFrom(address from, bool isAllowedFrom) returns() +func (_IEigen *IEigenTransactorSession) SetAllowedFrom(from common.Address, isAllowedFrom bool) (*types.Transaction, error) { + return _IEigen.Contract.SetAllowedFrom(&_IEigen.TransactOpts, from, isAllowedFrom) +} + +// SetAllowedTo is a paid mutator transaction binding the contract method 0xb8c25594. +// +// Solidity: function setAllowedTo(address to, bool isAllowedTo) returns() +func (_IEigen *IEigenTransactor) SetAllowedTo(opts *bind.TransactOpts, to common.Address, isAllowedTo bool) (*types.Transaction, error) { + return _IEigen.contract.Transact(opts, "setAllowedTo", to, isAllowedTo) +} + +// SetAllowedTo is a paid mutator transaction binding the contract method 0xb8c25594. +// +// Solidity: function setAllowedTo(address to, bool isAllowedTo) returns() +func (_IEigen *IEigenSession) SetAllowedTo(to common.Address, isAllowedTo bool) (*types.Transaction, error) { + return _IEigen.Contract.SetAllowedTo(&_IEigen.TransactOpts, to, isAllowedTo) +} + +// SetAllowedTo is a paid mutator transaction binding the contract method 0xb8c25594. +// +// Solidity: function setAllowedTo(address to, bool isAllowedTo) returns() +func (_IEigen *IEigenTransactorSession) SetAllowedTo(to common.Address, isAllowedTo bool) (*types.Transaction, error) { + return _IEigen.Contract.SetAllowedTo(&_IEigen.TransactOpts, to, isAllowedTo) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_IEigen *IEigenTransactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IEigen.contract.Transact(opts, "transfer", to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_IEigen *IEigenSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IEigen.Contract.Transfer(&_IEigen.TransactOpts, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_IEigen *IEigenTransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IEigen.Contract.Transfer(&_IEigen.TransactOpts, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_IEigen *IEigenTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IEigen.contract.Transact(opts, "transferFrom", from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_IEigen *IEigenSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IEigen.Contract.TransferFrom(&_IEigen.TransactOpts, from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_IEigen *IEigenTransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IEigen.Contract.TransferFrom(&_IEigen.TransactOpts, from, to, amount) +} + +// Unwrap is a paid mutator transaction binding the contract method 0xde0e9a3e. +// +// Solidity: function unwrap(uint256 amount) returns() +func (_IEigen *IEigenTransactor) Unwrap(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _IEigen.contract.Transact(opts, "unwrap", amount) +} + +// Unwrap is a paid mutator transaction binding the contract method 0xde0e9a3e. +// +// Solidity: function unwrap(uint256 amount) returns() +func (_IEigen *IEigenSession) Unwrap(amount *big.Int) (*types.Transaction, error) { + return _IEigen.Contract.Unwrap(&_IEigen.TransactOpts, amount) +} + +// Unwrap is a paid mutator transaction binding the contract method 0xde0e9a3e. +// +// Solidity: function unwrap(uint256 amount) returns() +func (_IEigen *IEigenTransactorSession) Unwrap(amount *big.Int) (*types.Transaction, error) { + return _IEigen.Contract.Unwrap(&_IEigen.TransactOpts, amount) +} + +// Wrap is a paid mutator transaction binding the contract method 0xea598cb0. +// +// Solidity: function wrap(uint256 amount) returns() +func (_IEigen *IEigenTransactor) Wrap(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _IEigen.contract.Transact(opts, "wrap", amount) +} + +// Wrap is a paid mutator transaction binding the contract method 0xea598cb0. +// +// Solidity: function wrap(uint256 amount) returns() +func (_IEigen *IEigenSession) Wrap(amount *big.Int) (*types.Transaction, error) { + return _IEigen.Contract.Wrap(&_IEigen.TransactOpts, amount) +} + +// Wrap is a paid mutator transaction binding the contract method 0xea598cb0. +// +// Solidity: function wrap(uint256 amount) returns() +func (_IEigen *IEigenTransactorSession) Wrap(amount *big.Int) (*types.Transaction, error) { + return _IEigen.Contract.Wrap(&_IEigen.TransactOpts, amount) +} + +// IEigenApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the IEigen contract. +type IEigenApprovalIterator struct { + Event *IEigenApproval // 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 *IEigenApprovalIterator) 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(IEigenApproval) + 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(IEigenApproval) + 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 *IEigenApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenApproval represents a Approval event raised by the IEigen contract. +type IEigenApproval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_IEigen *IEigenFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*IEigenApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _IEigen.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &IEigenApprovalIterator{contract: _IEigen.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_IEigen *IEigenFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IEigenApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _IEigen.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + 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(IEigenApproval) + if err := _IEigen.contract.UnpackLog(event, "Approval", 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 +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_IEigen *IEigenFilterer) ParseApproval(log types.Log) (*IEigenApproval, error) { + event := new(IEigenApproval) + if err := _IEigen.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the IEigen contract. +type IEigenTransferIterator struct { + Event *IEigenTransfer // 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 *IEigenTransferIterator) 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(IEigenTransfer) + 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(IEigenTransfer) + 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 *IEigenTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenTransfer represents a Transfer event raised by the IEigen contract. +type IEigenTransfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_IEigen *IEigenFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*IEigenTransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IEigen.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &IEigenTransferIterator{contract: _IEigen.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_IEigen *IEigenFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IEigenTransfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IEigen.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + 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(IEigenTransfer) + if err := _IEigen.contract.UnpackLog(event, "Transfer", 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 +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_IEigen *IEigenFilterer) ParseTransfer(log types.Log) (*IEigenTransfer, error) { + event := new(IEigenTransfer) + if err := _IEigen.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IEigen/tmp.abi b/pkg/bindings/IEigen/tmp.abi new file mode 100644 index 000000000..61ce9f1a2 --- /dev/null +++ b/pkg/bindings/IEigen/tmp.abi @@ -0,0 +1,287 @@ +[ + { + "type": "function", + "name": "CLOCK_MODE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "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": "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": "clock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "disableTransferRestrictions", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mint", + "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": "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": "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": "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 + } +] diff --git a/pkg/bindings/IEigen/tmp.bin b/pkg/bindings/IEigen/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IEigen/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/IEigenPod/binding.go b/pkg/bindings/IEigenPod/binding.go new file mode 100644 index 000000000..d99c5eae3 --- /dev/null +++ b/pkg/bindings/IEigenPod/binding.go @@ -0,0 +1,2059 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IEigenPod + +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 +) + +// BeaconChainProofsStateRootProof is an auto generated low-level Go binding around an user-defined struct. +type BeaconChainProofsStateRootProof struct { + BeaconStateRoot [32]byte + Proof []byte +} + +// BeaconChainProofsWithdrawalProof is an auto generated low-level Go binding around an user-defined struct. +type BeaconChainProofsWithdrawalProof struct { + WithdrawalProof []byte + SlotProof []byte + ExecutionPayloadProof []byte + TimestampProof []byte + HistoricalSummaryBlockRootProof []byte + BlockRootIndex uint64 + HistoricalSummaryIndex uint64 + WithdrawalIndex uint64 + BlockRoot [32]byte + SlotRoot [32]byte + TimestampRoot [32]byte + ExecutionPayloadRoot [32]byte +} + +// IEigenPodValidatorInfo is an auto generated low-level Go binding around an user-defined struct. +type IEigenPodValidatorInfo struct { + ValidatorIndex uint64 + RestakedBalanceGwei uint64 + MostRecentBalanceUpdateTimestamp uint64 + Status uint8 +} + +// IEigenPodMetaData contains all meta data concerning the IEigenPod contract. +var IEigenPodMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activateRestaking\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasRestaked\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"mostRecentWithdrawalTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nonBeaconChainETHBalanceWei\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"provenWithdrawal\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"slot\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"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\":\"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\":\"mostRecentBalanceUpdateTimestamp\",\"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\":\"mostRecentBalanceUpdateTimestamp\",\"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\":\"verifyAndProcessWithdrawals\",\"inputs\":[{\"name\":\"oracleTimestamp\",\"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\":\"withdrawalProofs\",\"type\":\"tuple[]\",\"internalType\":\"structBeaconChainProofs.WithdrawalProof[]\",\"components\":[{\"name\":\"withdrawalProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"slotProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"executionPayloadProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"timestampProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"historicalSummaryBlockRootProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blockRootIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"historicalSummaryIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"withdrawalIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"slotRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"timestampRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"executionPayloadRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"validatorFields\",\"type\":\"bytes32[][]\",\"internalType\":\"bytes32[][]\"},{\"name\":\"withdrawalFields\",\"type\":\"bytes32[][]\",\"internalType\":\"bytes32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyBalanceUpdates\",\"inputs\":[{\"name\":\"oracleTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"validatorIndices\",\"type\":\"uint40[]\",\"internalType\":\"uint40[]\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"validatorFields\",\"type\":\"bytes32[][]\",\"internalType\":\"bytes32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyWithdrawalCredentials\",\"inputs\":[{\"name\":\"oracleTimestamp\",\"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\":\"withdrawalCredentialProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"validatorFields\",\"type\":\"bytes32[][]\",\"internalType\":\"bytes32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawBeforeRestaking\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawNonBeaconChainETHBalanceWei\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amountToWithdraw\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FullWithdrawalRedeemed\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"name\":\"withdrawalTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"withdrawalAmountGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NonBeaconChainETHReceived\",\"inputs\":[{\"name\":\"amountReceived\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NonBeaconChainETHWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amountWithdrawn\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PartialWithdrawalRedeemed\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"name\":\"withdrawalTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"partialWithdrawalAmountGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"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\":\"RestakingActivated\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"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\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false}]", +} + +// IEigenPodABI is the input ABI used to generate the binding from. +// Deprecated: Use IEigenPodMetaData.ABI instead. +var IEigenPodABI = IEigenPodMetaData.ABI + +// IEigenPod is an auto generated Go binding around an Ethereum contract. +type IEigenPod struct { + IEigenPodCaller // Read-only binding to the contract + IEigenPodTransactor // Write-only binding to the contract + IEigenPodFilterer // Log filterer for contract events +} + +// IEigenPodCaller is an auto generated read-only Go binding around an Ethereum contract. +type IEigenPodCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IEigenPodTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IEigenPodTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IEigenPodFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IEigenPodFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IEigenPodSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IEigenPodSession struct { + Contract *IEigenPod // 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 +} + +// IEigenPodCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IEigenPodCallerSession struct { + Contract *IEigenPodCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IEigenPodTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IEigenPodTransactorSession struct { + Contract *IEigenPodTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IEigenPodRaw is an auto generated low-level Go binding around an Ethereum contract. +type IEigenPodRaw struct { + Contract *IEigenPod // Generic contract binding to access the raw methods on +} + +// IEigenPodCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IEigenPodCallerRaw struct { + Contract *IEigenPodCaller // Generic read-only contract binding to access the raw methods on +} + +// IEigenPodTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IEigenPodTransactorRaw struct { + Contract *IEigenPodTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIEigenPod creates a new instance of IEigenPod, bound to a specific deployed contract. +func NewIEigenPod(address common.Address, backend bind.ContractBackend) (*IEigenPod, error) { + contract, err := bindIEigenPod(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IEigenPod{IEigenPodCaller: IEigenPodCaller{contract: contract}, IEigenPodTransactor: IEigenPodTransactor{contract: contract}, IEigenPodFilterer: IEigenPodFilterer{contract: contract}}, nil +} + +// NewIEigenPodCaller creates a new read-only instance of IEigenPod, bound to a specific deployed contract. +func NewIEigenPodCaller(address common.Address, caller bind.ContractCaller) (*IEigenPodCaller, error) { + contract, err := bindIEigenPod(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IEigenPodCaller{contract: contract}, nil +} + +// NewIEigenPodTransactor creates a new write-only instance of IEigenPod, bound to a specific deployed contract. +func NewIEigenPodTransactor(address common.Address, transactor bind.ContractTransactor) (*IEigenPodTransactor, error) { + contract, err := bindIEigenPod(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IEigenPodTransactor{contract: contract}, nil +} + +// NewIEigenPodFilterer creates a new log filterer instance of IEigenPod, bound to a specific deployed contract. +func NewIEigenPodFilterer(address common.Address, filterer bind.ContractFilterer) (*IEigenPodFilterer, error) { + contract, err := bindIEigenPod(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IEigenPodFilterer{contract: contract}, nil +} + +// bindIEigenPod binds a generic wrapper to an already deployed contract. +func bindIEigenPod(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IEigenPodMetaData.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 (_IEigenPod *IEigenPodRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IEigenPod.Contract.IEigenPodCaller.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 (_IEigenPod *IEigenPodRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IEigenPod.Contract.IEigenPodTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IEigenPod *IEigenPodRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IEigenPod.Contract.IEigenPodTransactor.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 (_IEigenPod *IEigenPodCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IEigenPod.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 (_IEigenPod *IEigenPodTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IEigenPod.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IEigenPod *IEigenPodTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IEigenPod.Contract.contract.Transact(opts, method, params...) +} + +// MAXRESTAKEDBALANCEGWEIPERVALIDATOR is a free data retrieval call binding the contract method 0x1d905d5c. +// +// Solidity: function MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR() view returns(uint64) +func (_IEigenPod *IEigenPodCaller) MAXRESTAKEDBALANCEGWEIPERVALIDATOR(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _IEigenPod.contract.Call(opts, &out, "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MAXRESTAKEDBALANCEGWEIPERVALIDATOR is a free data retrieval call binding the contract method 0x1d905d5c. +// +// Solidity: function MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR() view returns(uint64) +func (_IEigenPod *IEigenPodSession) MAXRESTAKEDBALANCEGWEIPERVALIDATOR() (uint64, error) { + return _IEigenPod.Contract.MAXRESTAKEDBALANCEGWEIPERVALIDATOR(&_IEigenPod.CallOpts) +} + +// MAXRESTAKEDBALANCEGWEIPERVALIDATOR is a free data retrieval call binding the contract method 0x1d905d5c. +// +// Solidity: function MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR() view returns(uint64) +func (_IEigenPod *IEigenPodCallerSession) MAXRESTAKEDBALANCEGWEIPERVALIDATOR() (uint64, error) { + return _IEigenPod.Contract.MAXRESTAKEDBALANCEGWEIPERVALIDATOR(&_IEigenPod.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_IEigenPod *IEigenPodCaller) EigenPodManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IEigenPod.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 (_IEigenPod *IEigenPodSession) EigenPodManager() (common.Address, error) { + return _IEigenPod.Contract.EigenPodManager(&_IEigenPod.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_IEigenPod *IEigenPodCallerSession) EigenPodManager() (common.Address, error) { + return _IEigenPod.Contract.EigenPodManager(&_IEigenPod.CallOpts) +} + +// HasRestaked is a free data retrieval call binding the contract method 0x3106ab53. +// +// Solidity: function hasRestaked() view returns(bool) +func (_IEigenPod *IEigenPodCaller) HasRestaked(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _IEigenPod.contract.Call(opts, &out, "hasRestaked") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRestaked is a free data retrieval call binding the contract method 0x3106ab53. +// +// Solidity: function hasRestaked() view returns(bool) +func (_IEigenPod *IEigenPodSession) HasRestaked() (bool, error) { + return _IEigenPod.Contract.HasRestaked(&_IEigenPod.CallOpts) +} + +// HasRestaked is a free data retrieval call binding the contract method 0x3106ab53. +// +// Solidity: function hasRestaked() view returns(bool) +func (_IEigenPod *IEigenPodCallerSession) HasRestaked() (bool, error) { + return _IEigenPod.Contract.HasRestaked(&_IEigenPod.CallOpts) +} + +// MostRecentWithdrawalTimestamp is a free data retrieval call binding the contract method 0x87e0d289. +// +// Solidity: function mostRecentWithdrawalTimestamp() view returns(uint64) +func (_IEigenPod *IEigenPodCaller) MostRecentWithdrawalTimestamp(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _IEigenPod.contract.Call(opts, &out, "mostRecentWithdrawalTimestamp") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MostRecentWithdrawalTimestamp is a free data retrieval call binding the contract method 0x87e0d289. +// +// Solidity: function mostRecentWithdrawalTimestamp() view returns(uint64) +func (_IEigenPod *IEigenPodSession) MostRecentWithdrawalTimestamp() (uint64, error) { + return _IEigenPod.Contract.MostRecentWithdrawalTimestamp(&_IEigenPod.CallOpts) +} + +// MostRecentWithdrawalTimestamp is a free data retrieval call binding the contract method 0x87e0d289. +// +// Solidity: function mostRecentWithdrawalTimestamp() view returns(uint64) +func (_IEigenPod *IEigenPodCallerSession) MostRecentWithdrawalTimestamp() (uint64, error) { + return _IEigenPod.Contract.MostRecentWithdrawalTimestamp(&_IEigenPod.CallOpts) +} + +// NonBeaconChainETHBalanceWei is a free data retrieval call binding the contract method 0xfe80b087. +// +// Solidity: function nonBeaconChainETHBalanceWei() view returns(uint256) +func (_IEigenPod *IEigenPodCaller) NonBeaconChainETHBalanceWei(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IEigenPod.contract.Call(opts, &out, "nonBeaconChainETHBalanceWei") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NonBeaconChainETHBalanceWei is a free data retrieval call binding the contract method 0xfe80b087. +// +// Solidity: function nonBeaconChainETHBalanceWei() view returns(uint256) +func (_IEigenPod *IEigenPodSession) NonBeaconChainETHBalanceWei() (*big.Int, error) { + return _IEigenPod.Contract.NonBeaconChainETHBalanceWei(&_IEigenPod.CallOpts) +} + +// NonBeaconChainETHBalanceWei is a free data retrieval call binding the contract method 0xfe80b087. +// +// Solidity: function nonBeaconChainETHBalanceWei() view returns(uint256) +func (_IEigenPod *IEigenPodCallerSession) NonBeaconChainETHBalanceWei() (*big.Int, error) { + return _IEigenPod.Contract.NonBeaconChainETHBalanceWei(&_IEigenPod.CallOpts) +} + +// PodOwner is a free data retrieval call binding the contract method 0x0b18ff66. +// +// Solidity: function podOwner() view returns(address) +func (_IEigenPod *IEigenPodCaller) PodOwner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IEigenPod.contract.Call(opts, &out, "podOwner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PodOwner is a free data retrieval call binding the contract method 0x0b18ff66. +// +// Solidity: function podOwner() view returns(address) +func (_IEigenPod *IEigenPodSession) PodOwner() (common.Address, error) { + return _IEigenPod.Contract.PodOwner(&_IEigenPod.CallOpts) +} + +// PodOwner is a free data retrieval call binding the contract method 0x0b18ff66. +// +// Solidity: function podOwner() view returns(address) +func (_IEigenPod *IEigenPodCallerSession) PodOwner() (common.Address, error) { + return _IEigenPod.Contract.PodOwner(&_IEigenPod.CallOpts) +} + +// ProvenWithdrawal is a free data retrieval call binding the contract method 0x34bea20a. +// +// Solidity: function provenWithdrawal(bytes32 validatorPubkeyHash, uint64 slot) view returns(bool) +func (_IEigenPod *IEigenPodCaller) ProvenWithdrawal(opts *bind.CallOpts, validatorPubkeyHash [32]byte, slot uint64) (bool, error) { + var out []interface{} + err := _IEigenPod.contract.Call(opts, &out, "provenWithdrawal", validatorPubkeyHash, slot) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// ProvenWithdrawal is a free data retrieval call binding the contract method 0x34bea20a. +// +// Solidity: function provenWithdrawal(bytes32 validatorPubkeyHash, uint64 slot) view returns(bool) +func (_IEigenPod *IEigenPodSession) ProvenWithdrawal(validatorPubkeyHash [32]byte, slot uint64) (bool, error) { + return _IEigenPod.Contract.ProvenWithdrawal(&_IEigenPod.CallOpts, validatorPubkeyHash, slot) +} + +// ProvenWithdrawal is a free data retrieval call binding the contract method 0x34bea20a. +// +// Solidity: function provenWithdrawal(bytes32 validatorPubkeyHash, uint64 slot) view returns(bool) +func (_IEigenPod *IEigenPodCallerSession) ProvenWithdrawal(validatorPubkeyHash [32]byte, slot uint64) (bool, error) { + return _IEigenPod.Contract.ProvenWithdrawal(&_IEigenPod.CallOpts, validatorPubkeyHash, slot) +} + +// ValidatorPubkeyHashToInfo is a free data retrieval call binding the contract method 0x6fcd0e53. +// +// Solidity: function validatorPubkeyHashToInfo(bytes32 validatorPubkeyHash) view returns((uint64,uint64,uint64,uint8)) +func (_IEigenPod *IEigenPodCaller) ValidatorPubkeyHashToInfo(opts *bind.CallOpts, validatorPubkeyHash [32]byte) (IEigenPodValidatorInfo, error) { + var out []interface{} + err := _IEigenPod.contract.Call(opts, &out, "validatorPubkeyHashToInfo", validatorPubkeyHash) + + if err != nil { + return *new(IEigenPodValidatorInfo), err + } + + out0 := *abi.ConvertType(out[0], new(IEigenPodValidatorInfo)).(*IEigenPodValidatorInfo) + + return out0, err + +} + +// ValidatorPubkeyHashToInfo is a free data retrieval call binding the contract method 0x6fcd0e53. +// +// Solidity: function validatorPubkeyHashToInfo(bytes32 validatorPubkeyHash) view returns((uint64,uint64,uint64,uint8)) +func (_IEigenPod *IEigenPodSession) ValidatorPubkeyHashToInfo(validatorPubkeyHash [32]byte) (IEigenPodValidatorInfo, error) { + return _IEigenPod.Contract.ValidatorPubkeyHashToInfo(&_IEigenPod.CallOpts, validatorPubkeyHash) +} + +// ValidatorPubkeyHashToInfo is a free data retrieval call binding the contract method 0x6fcd0e53. +// +// Solidity: function validatorPubkeyHashToInfo(bytes32 validatorPubkeyHash) view returns((uint64,uint64,uint64,uint8)) +func (_IEigenPod *IEigenPodCallerSession) ValidatorPubkeyHashToInfo(validatorPubkeyHash [32]byte) (IEigenPodValidatorInfo, error) { + return _IEigenPod.Contract.ValidatorPubkeyHashToInfo(&_IEigenPod.CallOpts, validatorPubkeyHash) +} + +// ValidatorPubkeyToInfo is a free data retrieval call binding the contract method 0xb522538a. +// +// Solidity: function validatorPubkeyToInfo(bytes validatorPubkey) view returns((uint64,uint64,uint64,uint8)) +func (_IEigenPod *IEigenPodCaller) ValidatorPubkeyToInfo(opts *bind.CallOpts, validatorPubkey []byte) (IEigenPodValidatorInfo, error) { + var out []interface{} + err := _IEigenPod.contract.Call(opts, &out, "validatorPubkeyToInfo", validatorPubkey) + + if err != nil { + return *new(IEigenPodValidatorInfo), err + } + + out0 := *abi.ConvertType(out[0], new(IEigenPodValidatorInfo)).(*IEigenPodValidatorInfo) + + return out0, err + +} + +// ValidatorPubkeyToInfo is a free data retrieval call binding the contract method 0xb522538a. +// +// Solidity: function validatorPubkeyToInfo(bytes validatorPubkey) view returns((uint64,uint64,uint64,uint8)) +func (_IEigenPod *IEigenPodSession) ValidatorPubkeyToInfo(validatorPubkey []byte) (IEigenPodValidatorInfo, error) { + return _IEigenPod.Contract.ValidatorPubkeyToInfo(&_IEigenPod.CallOpts, validatorPubkey) +} + +// ValidatorPubkeyToInfo is a free data retrieval call binding the contract method 0xb522538a. +// +// Solidity: function validatorPubkeyToInfo(bytes validatorPubkey) view returns((uint64,uint64,uint64,uint8)) +func (_IEigenPod *IEigenPodCallerSession) ValidatorPubkeyToInfo(validatorPubkey []byte) (IEigenPodValidatorInfo, error) { + return _IEigenPod.Contract.ValidatorPubkeyToInfo(&_IEigenPod.CallOpts, validatorPubkey) +} + +// ValidatorStatus is a free data retrieval call binding the contract method 0x58eaee79. +// +// Solidity: function validatorStatus(bytes validatorPubkey) view returns(uint8) +func (_IEigenPod *IEigenPodCaller) ValidatorStatus(opts *bind.CallOpts, validatorPubkey []byte) (uint8, error) { + var out []interface{} + err := _IEigenPod.contract.Call(opts, &out, "validatorStatus", validatorPubkey) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// ValidatorStatus is a free data retrieval call binding the contract method 0x58eaee79. +// +// Solidity: function validatorStatus(bytes validatorPubkey) view returns(uint8) +func (_IEigenPod *IEigenPodSession) ValidatorStatus(validatorPubkey []byte) (uint8, error) { + return _IEigenPod.Contract.ValidatorStatus(&_IEigenPod.CallOpts, validatorPubkey) +} + +// ValidatorStatus is a free data retrieval call binding the contract method 0x58eaee79. +// +// Solidity: function validatorStatus(bytes validatorPubkey) view returns(uint8) +func (_IEigenPod *IEigenPodCallerSession) ValidatorStatus(validatorPubkey []byte) (uint8, error) { + return _IEigenPod.Contract.ValidatorStatus(&_IEigenPod.CallOpts, validatorPubkey) +} + +// ValidatorStatus0 is a free data retrieval call binding the contract method 0x7439841f. +// +// Solidity: function validatorStatus(bytes32 pubkeyHash) view returns(uint8) +func (_IEigenPod *IEigenPodCaller) ValidatorStatus0(opts *bind.CallOpts, pubkeyHash [32]byte) (uint8, error) { + var out []interface{} + err := _IEigenPod.contract.Call(opts, &out, "validatorStatus0", pubkeyHash) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// ValidatorStatus0 is a free data retrieval call binding the contract method 0x7439841f. +// +// Solidity: function validatorStatus(bytes32 pubkeyHash) view returns(uint8) +func (_IEigenPod *IEigenPodSession) ValidatorStatus0(pubkeyHash [32]byte) (uint8, error) { + return _IEigenPod.Contract.ValidatorStatus0(&_IEigenPod.CallOpts, pubkeyHash) +} + +// ValidatorStatus0 is a free data retrieval call binding the contract method 0x7439841f. +// +// Solidity: function validatorStatus(bytes32 pubkeyHash) view returns(uint8) +func (_IEigenPod *IEigenPodCallerSession) ValidatorStatus0(pubkeyHash [32]byte) (uint8, error) { + return _IEigenPod.Contract.ValidatorStatus0(&_IEigenPod.CallOpts, pubkeyHash) +} + +// WithdrawableRestakedExecutionLayerGwei is a free data retrieval call binding the contract method 0x3474aa16. +// +// Solidity: function withdrawableRestakedExecutionLayerGwei() view returns(uint64) +func (_IEigenPod *IEigenPodCaller) WithdrawableRestakedExecutionLayerGwei(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _IEigenPod.contract.Call(opts, &out, "withdrawableRestakedExecutionLayerGwei") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// WithdrawableRestakedExecutionLayerGwei is a free data retrieval call binding the contract method 0x3474aa16. +// +// Solidity: function withdrawableRestakedExecutionLayerGwei() view returns(uint64) +func (_IEigenPod *IEigenPodSession) WithdrawableRestakedExecutionLayerGwei() (uint64, error) { + return _IEigenPod.Contract.WithdrawableRestakedExecutionLayerGwei(&_IEigenPod.CallOpts) +} + +// WithdrawableRestakedExecutionLayerGwei is a free data retrieval call binding the contract method 0x3474aa16. +// +// Solidity: function withdrawableRestakedExecutionLayerGwei() view returns(uint64) +func (_IEigenPod *IEigenPodCallerSession) WithdrawableRestakedExecutionLayerGwei() (uint64, error) { + return _IEigenPod.Contract.WithdrawableRestakedExecutionLayerGwei(&_IEigenPod.CallOpts) +} + +// ActivateRestaking is a paid mutator transaction binding the contract method 0x0cd4649e. +// +// Solidity: function activateRestaking() returns() +func (_IEigenPod *IEigenPodTransactor) ActivateRestaking(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IEigenPod.contract.Transact(opts, "activateRestaking") +} + +// ActivateRestaking is a paid mutator transaction binding the contract method 0x0cd4649e. +// +// Solidity: function activateRestaking() returns() +func (_IEigenPod *IEigenPodSession) ActivateRestaking() (*types.Transaction, error) { + return _IEigenPod.Contract.ActivateRestaking(&_IEigenPod.TransactOpts) +} + +// ActivateRestaking is a paid mutator transaction binding the contract method 0x0cd4649e. +// +// Solidity: function activateRestaking() returns() +func (_IEigenPod *IEigenPodTransactorSession) ActivateRestaking() (*types.Transaction, error) { + return _IEigenPod.Contract.ActivateRestaking(&_IEigenPod.TransactOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address owner) returns() +func (_IEigenPod *IEigenPodTransactor) Initialize(opts *bind.TransactOpts, owner common.Address) (*types.Transaction, error) { + return _IEigenPod.contract.Transact(opts, "initialize", owner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address owner) returns() +func (_IEigenPod *IEigenPodSession) Initialize(owner common.Address) (*types.Transaction, error) { + return _IEigenPod.Contract.Initialize(&_IEigenPod.TransactOpts, owner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address owner) returns() +func (_IEigenPod *IEigenPodTransactorSession) Initialize(owner common.Address) (*types.Transaction, error) { + return _IEigenPod.Contract.Initialize(&_IEigenPod.TransactOpts, owner) +} + +// RecoverTokens is a paid mutator transaction binding the contract method 0xdda3346c. +// +// Solidity: function recoverTokens(address[] tokenList, uint256[] amountsToWithdraw, address recipient) returns() +func (_IEigenPod *IEigenPodTransactor) RecoverTokens(opts *bind.TransactOpts, tokenList []common.Address, amountsToWithdraw []*big.Int, recipient common.Address) (*types.Transaction, error) { + return _IEigenPod.contract.Transact(opts, "recoverTokens", tokenList, amountsToWithdraw, recipient) +} + +// RecoverTokens is a paid mutator transaction binding the contract method 0xdda3346c. +// +// Solidity: function recoverTokens(address[] tokenList, uint256[] amountsToWithdraw, address recipient) returns() +func (_IEigenPod *IEigenPodSession) RecoverTokens(tokenList []common.Address, amountsToWithdraw []*big.Int, recipient common.Address) (*types.Transaction, error) { + return _IEigenPod.Contract.RecoverTokens(&_IEigenPod.TransactOpts, tokenList, amountsToWithdraw, recipient) +} + +// RecoverTokens is a paid mutator transaction binding the contract method 0xdda3346c. +// +// Solidity: function recoverTokens(address[] tokenList, uint256[] amountsToWithdraw, address recipient) returns() +func (_IEigenPod *IEigenPodTransactorSession) RecoverTokens(tokenList []common.Address, amountsToWithdraw []*big.Int, recipient common.Address) (*types.Transaction, error) { + return _IEigenPod.Contract.RecoverTokens(&_IEigenPod.TransactOpts, tokenList, amountsToWithdraw, recipient) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_IEigenPod *IEigenPodTransactor) Stake(opts *bind.TransactOpts, pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _IEigenPod.contract.Transact(opts, "stake", pubkey, signature, depositDataRoot) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_IEigenPod *IEigenPodSession) Stake(pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _IEigenPod.Contract.Stake(&_IEigenPod.TransactOpts, pubkey, signature, depositDataRoot) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_IEigenPod *IEigenPodTransactorSession) Stake(pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _IEigenPod.Contract.Stake(&_IEigenPod.TransactOpts, pubkey, signature, depositDataRoot) +} + +// VerifyAndProcessWithdrawals is a paid mutator transaction binding the contract method 0xe251ef52. +// +// Solidity: function verifyAndProcessWithdrawals(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes,bytes,bytes,uint64,uint64,uint64,bytes32,bytes32,bytes32,bytes32)[] withdrawalProofs, bytes[] validatorFieldsProofs, bytes32[][] validatorFields, bytes32[][] withdrawalFields) returns() +func (_IEigenPod *IEigenPodTransactor) VerifyAndProcessWithdrawals(opts *bind.TransactOpts, oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, withdrawalProofs []BeaconChainProofsWithdrawalProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte, withdrawalFields [][][32]byte) (*types.Transaction, error) { + return _IEigenPod.contract.Transact(opts, "verifyAndProcessWithdrawals", oracleTimestamp, stateRootProof, withdrawalProofs, validatorFieldsProofs, validatorFields, withdrawalFields) +} + +// VerifyAndProcessWithdrawals is a paid mutator transaction binding the contract method 0xe251ef52. +// +// Solidity: function verifyAndProcessWithdrawals(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes,bytes,bytes,uint64,uint64,uint64,bytes32,bytes32,bytes32,bytes32)[] withdrawalProofs, bytes[] validatorFieldsProofs, bytes32[][] validatorFields, bytes32[][] withdrawalFields) returns() +func (_IEigenPod *IEigenPodSession) VerifyAndProcessWithdrawals(oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, withdrawalProofs []BeaconChainProofsWithdrawalProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte, withdrawalFields [][][32]byte) (*types.Transaction, error) { + return _IEigenPod.Contract.VerifyAndProcessWithdrawals(&_IEigenPod.TransactOpts, oracleTimestamp, stateRootProof, withdrawalProofs, validatorFieldsProofs, validatorFields, withdrawalFields) +} + +// VerifyAndProcessWithdrawals is a paid mutator transaction binding the contract method 0xe251ef52. +// +// Solidity: function verifyAndProcessWithdrawals(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes,bytes,bytes,uint64,uint64,uint64,bytes32,bytes32,bytes32,bytes32)[] withdrawalProofs, bytes[] validatorFieldsProofs, bytes32[][] validatorFields, bytes32[][] withdrawalFields) returns() +func (_IEigenPod *IEigenPodTransactorSession) VerifyAndProcessWithdrawals(oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, withdrawalProofs []BeaconChainProofsWithdrawalProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte, withdrawalFields [][][32]byte) (*types.Transaction, error) { + return _IEigenPod.Contract.VerifyAndProcessWithdrawals(&_IEigenPod.TransactOpts, oracleTimestamp, stateRootProof, withdrawalProofs, validatorFieldsProofs, validatorFields, withdrawalFields) +} + +// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xa50600f4. +// +// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_IEigenPod *IEigenPodTransactor) VerifyBalanceUpdates(opts *bind.TransactOpts, oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _IEigenPod.contract.Transact(opts, "verifyBalanceUpdates", oracleTimestamp, validatorIndices, stateRootProof, validatorFieldsProofs, validatorFields) +} + +// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xa50600f4. +// +// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_IEigenPod *IEigenPodSession) VerifyBalanceUpdates(oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _IEigenPod.Contract.VerifyBalanceUpdates(&_IEigenPod.TransactOpts, oracleTimestamp, validatorIndices, stateRootProof, validatorFieldsProofs, validatorFields) +} + +// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xa50600f4. +// +// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_IEigenPod *IEigenPodTransactorSession) VerifyBalanceUpdates(oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _IEigenPod.Contract.VerifyBalanceUpdates(&_IEigenPod.TransactOpts, oracleTimestamp, validatorIndices, stateRootProof, validatorFieldsProofs, validatorFields) +} + +// VerifyWithdrawalCredentials is a paid mutator transaction binding the contract method 0x3f65cf19. +// +// Solidity: function verifyWithdrawalCredentials(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, uint40[] validatorIndices, bytes[] withdrawalCredentialProofs, bytes32[][] validatorFields) returns() +func (_IEigenPod *IEigenPodTransactor) VerifyWithdrawalCredentials(opts *bind.TransactOpts, oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, validatorIndices []*big.Int, withdrawalCredentialProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _IEigenPod.contract.Transact(opts, "verifyWithdrawalCredentials", oracleTimestamp, stateRootProof, validatorIndices, withdrawalCredentialProofs, validatorFields) +} + +// VerifyWithdrawalCredentials is a paid mutator transaction binding the contract method 0x3f65cf19. +// +// Solidity: function verifyWithdrawalCredentials(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, uint40[] validatorIndices, bytes[] withdrawalCredentialProofs, bytes32[][] validatorFields) returns() +func (_IEigenPod *IEigenPodSession) VerifyWithdrawalCredentials(oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, validatorIndices []*big.Int, withdrawalCredentialProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _IEigenPod.Contract.VerifyWithdrawalCredentials(&_IEigenPod.TransactOpts, oracleTimestamp, stateRootProof, validatorIndices, withdrawalCredentialProofs, validatorFields) +} + +// VerifyWithdrawalCredentials is a paid mutator transaction binding the contract method 0x3f65cf19. +// +// Solidity: function verifyWithdrawalCredentials(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, uint40[] validatorIndices, bytes[] withdrawalCredentialProofs, bytes32[][] validatorFields) returns() +func (_IEigenPod *IEigenPodTransactorSession) VerifyWithdrawalCredentials(oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, validatorIndices []*big.Int, withdrawalCredentialProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _IEigenPod.Contract.VerifyWithdrawalCredentials(&_IEigenPod.TransactOpts, oracleTimestamp, stateRootProof, validatorIndices, withdrawalCredentialProofs, validatorFields) +} + +// WithdrawBeforeRestaking is a paid mutator transaction binding the contract method 0xbaa7145a. +// +// Solidity: function withdrawBeforeRestaking() returns() +func (_IEigenPod *IEigenPodTransactor) WithdrawBeforeRestaking(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IEigenPod.contract.Transact(opts, "withdrawBeforeRestaking") +} + +// WithdrawBeforeRestaking is a paid mutator transaction binding the contract method 0xbaa7145a. +// +// Solidity: function withdrawBeforeRestaking() returns() +func (_IEigenPod *IEigenPodSession) WithdrawBeforeRestaking() (*types.Transaction, error) { + return _IEigenPod.Contract.WithdrawBeforeRestaking(&_IEigenPod.TransactOpts) +} + +// WithdrawBeforeRestaking is a paid mutator transaction binding the contract method 0xbaa7145a. +// +// Solidity: function withdrawBeforeRestaking() returns() +func (_IEigenPod *IEigenPodTransactorSession) WithdrawBeforeRestaking() (*types.Transaction, error) { + return _IEigenPod.Contract.WithdrawBeforeRestaking(&_IEigenPod.TransactOpts) +} + +// WithdrawNonBeaconChainETHBalanceWei is a paid mutator transaction binding the contract method 0xe2c83445. +// +// Solidity: function withdrawNonBeaconChainETHBalanceWei(address recipient, uint256 amountToWithdraw) returns() +func (_IEigenPod *IEigenPodTransactor) WithdrawNonBeaconChainETHBalanceWei(opts *bind.TransactOpts, recipient common.Address, amountToWithdraw *big.Int) (*types.Transaction, error) { + return _IEigenPod.contract.Transact(opts, "withdrawNonBeaconChainETHBalanceWei", recipient, amountToWithdraw) +} + +// WithdrawNonBeaconChainETHBalanceWei is a paid mutator transaction binding the contract method 0xe2c83445. +// +// Solidity: function withdrawNonBeaconChainETHBalanceWei(address recipient, uint256 amountToWithdraw) returns() +func (_IEigenPod *IEigenPodSession) WithdrawNonBeaconChainETHBalanceWei(recipient common.Address, amountToWithdraw *big.Int) (*types.Transaction, error) { + return _IEigenPod.Contract.WithdrawNonBeaconChainETHBalanceWei(&_IEigenPod.TransactOpts, recipient, amountToWithdraw) +} + +// WithdrawNonBeaconChainETHBalanceWei is a paid mutator transaction binding the contract method 0xe2c83445. +// +// Solidity: function withdrawNonBeaconChainETHBalanceWei(address recipient, uint256 amountToWithdraw) returns() +func (_IEigenPod *IEigenPodTransactorSession) WithdrawNonBeaconChainETHBalanceWei(recipient common.Address, amountToWithdraw *big.Int) (*types.Transaction, error) { + return _IEigenPod.Contract.WithdrawNonBeaconChainETHBalanceWei(&_IEigenPod.TransactOpts, recipient, amountToWithdraw) +} + +// WithdrawRestakedBeaconChainETH is a paid mutator transaction binding the contract method 0xc4907442. +// +// Solidity: function withdrawRestakedBeaconChainETH(address recipient, uint256 amount) returns() +func (_IEigenPod *IEigenPodTransactor) WithdrawRestakedBeaconChainETH(opts *bind.TransactOpts, recipient common.Address, amount *big.Int) (*types.Transaction, error) { + return _IEigenPod.contract.Transact(opts, "withdrawRestakedBeaconChainETH", recipient, amount) +} + +// WithdrawRestakedBeaconChainETH is a paid mutator transaction binding the contract method 0xc4907442. +// +// Solidity: function withdrawRestakedBeaconChainETH(address recipient, uint256 amount) returns() +func (_IEigenPod *IEigenPodSession) WithdrawRestakedBeaconChainETH(recipient common.Address, amount *big.Int) (*types.Transaction, error) { + return _IEigenPod.Contract.WithdrawRestakedBeaconChainETH(&_IEigenPod.TransactOpts, recipient, amount) +} + +// WithdrawRestakedBeaconChainETH is a paid mutator transaction binding the contract method 0xc4907442. +// +// Solidity: function withdrawRestakedBeaconChainETH(address recipient, uint256 amount) returns() +func (_IEigenPod *IEigenPodTransactorSession) WithdrawRestakedBeaconChainETH(recipient common.Address, amount *big.Int) (*types.Transaction, error) { + return _IEigenPod.Contract.WithdrawRestakedBeaconChainETH(&_IEigenPod.TransactOpts, recipient, amount) +} + +// IEigenPodEigenPodStakedIterator is returned from FilterEigenPodStaked and is used to iterate over the raw logs and unpacked data for EigenPodStaked events raised by the IEigenPod contract. +type IEigenPodEigenPodStakedIterator struct { + Event *IEigenPodEigenPodStaked // 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 *IEigenPodEigenPodStakedIterator) 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(IEigenPodEigenPodStaked) + 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(IEigenPodEigenPodStaked) + 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 *IEigenPodEigenPodStakedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodEigenPodStakedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodEigenPodStaked represents a EigenPodStaked event raised by the IEigenPod contract. +type IEigenPodEigenPodStaked struct { + Pubkey []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterEigenPodStaked is a free log retrieval operation binding the contract event 0x606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e23. +// +// Solidity: event EigenPodStaked(bytes pubkey) +func (_IEigenPod *IEigenPodFilterer) FilterEigenPodStaked(opts *bind.FilterOpts) (*IEigenPodEigenPodStakedIterator, error) { + + logs, sub, err := _IEigenPod.contract.FilterLogs(opts, "EigenPodStaked") + if err != nil { + return nil, err + } + return &IEigenPodEigenPodStakedIterator{contract: _IEigenPod.contract, event: "EigenPodStaked", logs: logs, sub: sub}, nil +} + +// WatchEigenPodStaked is a free log subscription operation binding the contract event 0x606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e23. +// +// Solidity: event EigenPodStaked(bytes pubkey) +func (_IEigenPod *IEigenPodFilterer) WatchEigenPodStaked(opts *bind.WatchOpts, sink chan<- *IEigenPodEigenPodStaked) (event.Subscription, error) { + + logs, sub, err := _IEigenPod.contract.WatchLogs(opts, "EigenPodStaked") + 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(IEigenPodEigenPodStaked) + if err := _IEigenPod.contract.UnpackLog(event, "EigenPodStaked", 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 +} + +// ParseEigenPodStaked is a log parse operation binding the contract event 0x606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e23. +// +// Solidity: event EigenPodStaked(bytes pubkey) +func (_IEigenPod *IEigenPodFilterer) ParseEigenPodStaked(log types.Log) (*IEigenPodEigenPodStaked, error) { + event := new(IEigenPodEigenPodStaked) + if err := _IEigenPod.contract.UnpackLog(event, "EigenPodStaked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodFullWithdrawalRedeemedIterator is returned from FilterFullWithdrawalRedeemed and is used to iterate over the raw logs and unpacked data for FullWithdrawalRedeemed events raised by the IEigenPod contract. +type IEigenPodFullWithdrawalRedeemedIterator struct { + Event *IEigenPodFullWithdrawalRedeemed // 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 *IEigenPodFullWithdrawalRedeemedIterator) 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(IEigenPodFullWithdrawalRedeemed) + 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(IEigenPodFullWithdrawalRedeemed) + 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 *IEigenPodFullWithdrawalRedeemedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodFullWithdrawalRedeemedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodFullWithdrawalRedeemed represents a FullWithdrawalRedeemed event raised by the IEigenPod contract. +type IEigenPodFullWithdrawalRedeemed struct { + ValidatorIndex *big.Int + WithdrawalTimestamp uint64 + Recipient common.Address + WithdrawalAmountGwei uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFullWithdrawalRedeemed is a free log retrieval operation binding the contract event 0xb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a0963. +// +// Solidity: event FullWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 withdrawalAmountGwei) +func (_IEigenPod *IEigenPodFilterer) FilterFullWithdrawalRedeemed(opts *bind.FilterOpts, recipient []common.Address) (*IEigenPodFullWithdrawalRedeemedIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _IEigenPod.contract.FilterLogs(opts, "FullWithdrawalRedeemed", recipientRule) + if err != nil { + return nil, err + } + return &IEigenPodFullWithdrawalRedeemedIterator{contract: _IEigenPod.contract, event: "FullWithdrawalRedeemed", logs: logs, sub: sub}, nil +} + +// WatchFullWithdrawalRedeemed is a free log subscription operation binding the contract event 0xb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a0963. +// +// Solidity: event FullWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 withdrawalAmountGwei) +func (_IEigenPod *IEigenPodFilterer) WatchFullWithdrawalRedeemed(opts *bind.WatchOpts, sink chan<- *IEigenPodFullWithdrawalRedeemed, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _IEigenPod.contract.WatchLogs(opts, "FullWithdrawalRedeemed", recipientRule) + 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(IEigenPodFullWithdrawalRedeemed) + if err := _IEigenPod.contract.UnpackLog(event, "FullWithdrawalRedeemed", 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 +} + +// ParseFullWithdrawalRedeemed is a log parse operation binding the contract event 0xb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a0963. +// +// Solidity: event FullWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 withdrawalAmountGwei) +func (_IEigenPod *IEigenPodFilterer) ParseFullWithdrawalRedeemed(log types.Log) (*IEigenPodFullWithdrawalRedeemed, error) { + event := new(IEigenPodFullWithdrawalRedeemed) + if err := _IEigenPod.contract.UnpackLog(event, "FullWithdrawalRedeemed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodNonBeaconChainETHReceivedIterator is returned from FilterNonBeaconChainETHReceived and is used to iterate over the raw logs and unpacked data for NonBeaconChainETHReceived events raised by the IEigenPod contract. +type IEigenPodNonBeaconChainETHReceivedIterator struct { + Event *IEigenPodNonBeaconChainETHReceived // 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 *IEigenPodNonBeaconChainETHReceivedIterator) 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(IEigenPodNonBeaconChainETHReceived) + 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(IEigenPodNonBeaconChainETHReceived) + 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 *IEigenPodNonBeaconChainETHReceivedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodNonBeaconChainETHReceivedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodNonBeaconChainETHReceived represents a NonBeaconChainETHReceived event raised by the IEigenPod contract. +type IEigenPodNonBeaconChainETHReceived struct { + AmountReceived *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNonBeaconChainETHReceived is a free log retrieval operation binding the contract event 0x6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf49. +// +// Solidity: event NonBeaconChainETHReceived(uint256 amountReceived) +func (_IEigenPod *IEigenPodFilterer) FilterNonBeaconChainETHReceived(opts *bind.FilterOpts) (*IEigenPodNonBeaconChainETHReceivedIterator, error) { + + logs, sub, err := _IEigenPod.contract.FilterLogs(opts, "NonBeaconChainETHReceived") + if err != nil { + return nil, err + } + return &IEigenPodNonBeaconChainETHReceivedIterator{contract: _IEigenPod.contract, event: "NonBeaconChainETHReceived", logs: logs, sub: sub}, nil +} + +// WatchNonBeaconChainETHReceived is a free log subscription operation binding the contract event 0x6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf49. +// +// Solidity: event NonBeaconChainETHReceived(uint256 amountReceived) +func (_IEigenPod *IEigenPodFilterer) WatchNonBeaconChainETHReceived(opts *bind.WatchOpts, sink chan<- *IEigenPodNonBeaconChainETHReceived) (event.Subscription, error) { + + logs, sub, err := _IEigenPod.contract.WatchLogs(opts, "NonBeaconChainETHReceived") + 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(IEigenPodNonBeaconChainETHReceived) + if err := _IEigenPod.contract.UnpackLog(event, "NonBeaconChainETHReceived", 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 +} + +// ParseNonBeaconChainETHReceived is a log parse operation binding the contract event 0x6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf49. +// +// Solidity: event NonBeaconChainETHReceived(uint256 amountReceived) +func (_IEigenPod *IEigenPodFilterer) ParseNonBeaconChainETHReceived(log types.Log) (*IEigenPodNonBeaconChainETHReceived, error) { + event := new(IEigenPodNonBeaconChainETHReceived) + if err := _IEigenPod.contract.UnpackLog(event, "NonBeaconChainETHReceived", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodNonBeaconChainETHWithdrawnIterator is returned from FilterNonBeaconChainETHWithdrawn and is used to iterate over the raw logs and unpacked data for NonBeaconChainETHWithdrawn events raised by the IEigenPod contract. +type IEigenPodNonBeaconChainETHWithdrawnIterator struct { + Event *IEigenPodNonBeaconChainETHWithdrawn // 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 *IEigenPodNonBeaconChainETHWithdrawnIterator) 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(IEigenPodNonBeaconChainETHWithdrawn) + 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(IEigenPodNonBeaconChainETHWithdrawn) + 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 *IEigenPodNonBeaconChainETHWithdrawnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodNonBeaconChainETHWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodNonBeaconChainETHWithdrawn represents a NonBeaconChainETHWithdrawn event raised by the IEigenPod contract. +type IEigenPodNonBeaconChainETHWithdrawn struct { + Recipient common.Address + AmountWithdrawn *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNonBeaconChainETHWithdrawn is a free log retrieval operation binding the contract event 0x30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f53096. +// +// Solidity: event NonBeaconChainETHWithdrawn(address indexed recipient, uint256 amountWithdrawn) +func (_IEigenPod *IEigenPodFilterer) FilterNonBeaconChainETHWithdrawn(opts *bind.FilterOpts, recipient []common.Address) (*IEigenPodNonBeaconChainETHWithdrawnIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _IEigenPod.contract.FilterLogs(opts, "NonBeaconChainETHWithdrawn", recipientRule) + if err != nil { + return nil, err + } + return &IEigenPodNonBeaconChainETHWithdrawnIterator{contract: _IEigenPod.contract, event: "NonBeaconChainETHWithdrawn", logs: logs, sub: sub}, nil +} + +// WatchNonBeaconChainETHWithdrawn is a free log subscription operation binding the contract event 0x30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f53096. +// +// Solidity: event NonBeaconChainETHWithdrawn(address indexed recipient, uint256 amountWithdrawn) +func (_IEigenPod *IEigenPodFilterer) WatchNonBeaconChainETHWithdrawn(opts *bind.WatchOpts, sink chan<- *IEigenPodNonBeaconChainETHWithdrawn, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _IEigenPod.contract.WatchLogs(opts, "NonBeaconChainETHWithdrawn", recipientRule) + 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(IEigenPodNonBeaconChainETHWithdrawn) + if err := _IEigenPod.contract.UnpackLog(event, "NonBeaconChainETHWithdrawn", 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 +} + +// ParseNonBeaconChainETHWithdrawn is a log parse operation binding the contract event 0x30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f53096. +// +// Solidity: event NonBeaconChainETHWithdrawn(address indexed recipient, uint256 amountWithdrawn) +func (_IEigenPod *IEigenPodFilterer) ParseNonBeaconChainETHWithdrawn(log types.Log) (*IEigenPodNonBeaconChainETHWithdrawn, error) { + event := new(IEigenPodNonBeaconChainETHWithdrawn) + if err := _IEigenPod.contract.UnpackLog(event, "NonBeaconChainETHWithdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodPartialWithdrawalRedeemedIterator is returned from FilterPartialWithdrawalRedeemed and is used to iterate over the raw logs and unpacked data for PartialWithdrawalRedeemed events raised by the IEigenPod contract. +type IEigenPodPartialWithdrawalRedeemedIterator struct { + Event *IEigenPodPartialWithdrawalRedeemed // 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 *IEigenPodPartialWithdrawalRedeemedIterator) 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(IEigenPodPartialWithdrawalRedeemed) + 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(IEigenPodPartialWithdrawalRedeemed) + 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 *IEigenPodPartialWithdrawalRedeemedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodPartialWithdrawalRedeemedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodPartialWithdrawalRedeemed represents a PartialWithdrawalRedeemed event raised by the IEigenPod contract. +type IEigenPodPartialWithdrawalRedeemed struct { + ValidatorIndex *big.Int + WithdrawalTimestamp uint64 + Recipient common.Address + PartialWithdrawalAmountGwei uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPartialWithdrawalRedeemed is a free log retrieval operation binding the contract event 0x8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e. +// +// Solidity: event PartialWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 partialWithdrawalAmountGwei) +func (_IEigenPod *IEigenPodFilterer) FilterPartialWithdrawalRedeemed(opts *bind.FilterOpts, recipient []common.Address) (*IEigenPodPartialWithdrawalRedeemedIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _IEigenPod.contract.FilterLogs(opts, "PartialWithdrawalRedeemed", recipientRule) + if err != nil { + return nil, err + } + return &IEigenPodPartialWithdrawalRedeemedIterator{contract: _IEigenPod.contract, event: "PartialWithdrawalRedeemed", logs: logs, sub: sub}, nil +} + +// WatchPartialWithdrawalRedeemed is a free log subscription operation binding the contract event 0x8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e. +// +// Solidity: event PartialWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 partialWithdrawalAmountGwei) +func (_IEigenPod *IEigenPodFilterer) WatchPartialWithdrawalRedeemed(opts *bind.WatchOpts, sink chan<- *IEigenPodPartialWithdrawalRedeemed, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _IEigenPod.contract.WatchLogs(opts, "PartialWithdrawalRedeemed", recipientRule) + 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(IEigenPodPartialWithdrawalRedeemed) + if err := _IEigenPod.contract.UnpackLog(event, "PartialWithdrawalRedeemed", 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 +} + +// ParsePartialWithdrawalRedeemed is a log parse operation binding the contract event 0x8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e. +// +// Solidity: event PartialWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 partialWithdrawalAmountGwei) +func (_IEigenPod *IEigenPodFilterer) ParsePartialWithdrawalRedeemed(log types.Log) (*IEigenPodPartialWithdrawalRedeemed, error) { + event := new(IEigenPodPartialWithdrawalRedeemed) + if err := _IEigenPod.contract.UnpackLog(event, "PartialWithdrawalRedeemed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodRestakedBeaconChainETHWithdrawnIterator is returned from FilterRestakedBeaconChainETHWithdrawn and is used to iterate over the raw logs and unpacked data for RestakedBeaconChainETHWithdrawn events raised by the IEigenPod contract. +type IEigenPodRestakedBeaconChainETHWithdrawnIterator struct { + Event *IEigenPodRestakedBeaconChainETHWithdrawn // 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 *IEigenPodRestakedBeaconChainETHWithdrawnIterator) 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(IEigenPodRestakedBeaconChainETHWithdrawn) + 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(IEigenPodRestakedBeaconChainETHWithdrawn) + 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 *IEigenPodRestakedBeaconChainETHWithdrawnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodRestakedBeaconChainETHWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodRestakedBeaconChainETHWithdrawn represents a RestakedBeaconChainETHWithdrawn event raised by the IEigenPod contract. +type IEigenPodRestakedBeaconChainETHWithdrawn struct { + Recipient common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRestakedBeaconChainETHWithdrawn is a free log retrieval operation binding the contract event 0x8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e. +// +// Solidity: event RestakedBeaconChainETHWithdrawn(address indexed recipient, uint256 amount) +func (_IEigenPod *IEigenPodFilterer) FilterRestakedBeaconChainETHWithdrawn(opts *bind.FilterOpts, recipient []common.Address) (*IEigenPodRestakedBeaconChainETHWithdrawnIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _IEigenPod.contract.FilterLogs(opts, "RestakedBeaconChainETHWithdrawn", recipientRule) + if err != nil { + return nil, err + } + return &IEigenPodRestakedBeaconChainETHWithdrawnIterator{contract: _IEigenPod.contract, event: "RestakedBeaconChainETHWithdrawn", logs: logs, sub: sub}, nil +} + +// WatchRestakedBeaconChainETHWithdrawn is a free log subscription operation binding the contract event 0x8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e. +// +// Solidity: event RestakedBeaconChainETHWithdrawn(address indexed recipient, uint256 amount) +func (_IEigenPod *IEigenPodFilterer) WatchRestakedBeaconChainETHWithdrawn(opts *bind.WatchOpts, sink chan<- *IEigenPodRestakedBeaconChainETHWithdrawn, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _IEigenPod.contract.WatchLogs(opts, "RestakedBeaconChainETHWithdrawn", recipientRule) + 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(IEigenPodRestakedBeaconChainETHWithdrawn) + if err := _IEigenPod.contract.UnpackLog(event, "RestakedBeaconChainETHWithdrawn", 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 +} + +// ParseRestakedBeaconChainETHWithdrawn is a log parse operation binding the contract event 0x8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e. +// +// Solidity: event RestakedBeaconChainETHWithdrawn(address indexed recipient, uint256 amount) +func (_IEigenPod *IEigenPodFilterer) ParseRestakedBeaconChainETHWithdrawn(log types.Log) (*IEigenPodRestakedBeaconChainETHWithdrawn, error) { + event := new(IEigenPodRestakedBeaconChainETHWithdrawn) + if err := _IEigenPod.contract.UnpackLog(event, "RestakedBeaconChainETHWithdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodRestakingActivatedIterator is returned from FilterRestakingActivated and is used to iterate over the raw logs and unpacked data for RestakingActivated events raised by the IEigenPod contract. +type IEigenPodRestakingActivatedIterator struct { + Event *IEigenPodRestakingActivated // 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 *IEigenPodRestakingActivatedIterator) 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(IEigenPodRestakingActivated) + 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(IEigenPodRestakingActivated) + 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 *IEigenPodRestakingActivatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodRestakingActivatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodRestakingActivated represents a RestakingActivated event raised by the IEigenPod contract. +type IEigenPodRestakingActivated struct { + PodOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRestakingActivated is a free log retrieval operation binding the contract event 0xca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd. +// +// Solidity: event RestakingActivated(address indexed podOwner) +func (_IEigenPod *IEigenPodFilterer) FilterRestakingActivated(opts *bind.FilterOpts, podOwner []common.Address) (*IEigenPodRestakingActivatedIterator, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _IEigenPod.contract.FilterLogs(opts, "RestakingActivated", podOwnerRule) + if err != nil { + return nil, err + } + return &IEigenPodRestakingActivatedIterator{contract: _IEigenPod.contract, event: "RestakingActivated", logs: logs, sub: sub}, nil +} + +// WatchRestakingActivated is a free log subscription operation binding the contract event 0xca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd. +// +// Solidity: event RestakingActivated(address indexed podOwner) +func (_IEigenPod *IEigenPodFilterer) WatchRestakingActivated(opts *bind.WatchOpts, sink chan<- *IEigenPodRestakingActivated, podOwner []common.Address) (event.Subscription, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _IEigenPod.contract.WatchLogs(opts, "RestakingActivated", podOwnerRule) + 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(IEigenPodRestakingActivated) + if err := _IEigenPod.contract.UnpackLog(event, "RestakingActivated", 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 +} + +// ParseRestakingActivated is a log parse operation binding the contract event 0xca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd. +// +// Solidity: event RestakingActivated(address indexed podOwner) +func (_IEigenPod *IEigenPodFilterer) ParseRestakingActivated(log types.Log) (*IEigenPodRestakingActivated, error) { + event := new(IEigenPodRestakingActivated) + if err := _IEigenPod.contract.UnpackLog(event, "RestakingActivated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodValidatorBalanceUpdatedIterator is returned from FilterValidatorBalanceUpdated and is used to iterate over the raw logs and unpacked data for ValidatorBalanceUpdated events raised by the IEigenPod contract. +type IEigenPodValidatorBalanceUpdatedIterator struct { + Event *IEigenPodValidatorBalanceUpdated // 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 *IEigenPodValidatorBalanceUpdatedIterator) 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(IEigenPodValidatorBalanceUpdated) + 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(IEigenPodValidatorBalanceUpdated) + 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 *IEigenPodValidatorBalanceUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodValidatorBalanceUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodValidatorBalanceUpdated represents a ValidatorBalanceUpdated event raised by the IEigenPod contract. +type IEigenPodValidatorBalanceUpdated struct { + ValidatorIndex *big.Int + BalanceTimestamp uint64 + NewValidatorBalanceGwei uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorBalanceUpdated is a free log retrieval operation binding the contract event 0x0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df. +// +// Solidity: event ValidatorBalanceUpdated(uint40 validatorIndex, uint64 balanceTimestamp, uint64 newValidatorBalanceGwei) +func (_IEigenPod *IEigenPodFilterer) FilterValidatorBalanceUpdated(opts *bind.FilterOpts) (*IEigenPodValidatorBalanceUpdatedIterator, error) { + + logs, sub, err := _IEigenPod.contract.FilterLogs(opts, "ValidatorBalanceUpdated") + if err != nil { + return nil, err + } + return &IEigenPodValidatorBalanceUpdatedIterator{contract: _IEigenPod.contract, event: "ValidatorBalanceUpdated", logs: logs, sub: sub}, nil +} + +// WatchValidatorBalanceUpdated is a free log subscription operation binding the contract event 0x0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df. +// +// Solidity: event ValidatorBalanceUpdated(uint40 validatorIndex, uint64 balanceTimestamp, uint64 newValidatorBalanceGwei) +func (_IEigenPod *IEigenPodFilterer) WatchValidatorBalanceUpdated(opts *bind.WatchOpts, sink chan<- *IEigenPodValidatorBalanceUpdated) (event.Subscription, error) { + + logs, sub, err := _IEigenPod.contract.WatchLogs(opts, "ValidatorBalanceUpdated") + 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(IEigenPodValidatorBalanceUpdated) + if err := _IEigenPod.contract.UnpackLog(event, "ValidatorBalanceUpdated", 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 +} + +// ParseValidatorBalanceUpdated is a log parse operation binding the contract event 0x0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df. +// +// Solidity: event ValidatorBalanceUpdated(uint40 validatorIndex, uint64 balanceTimestamp, uint64 newValidatorBalanceGwei) +func (_IEigenPod *IEigenPodFilterer) ParseValidatorBalanceUpdated(log types.Log) (*IEigenPodValidatorBalanceUpdated, error) { + event := new(IEigenPodValidatorBalanceUpdated) + if err := _IEigenPod.contract.UnpackLog(event, "ValidatorBalanceUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodValidatorRestakedIterator is returned from FilterValidatorRestaked and is used to iterate over the raw logs and unpacked data for ValidatorRestaked events raised by the IEigenPod contract. +type IEigenPodValidatorRestakedIterator struct { + Event *IEigenPodValidatorRestaked // 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 *IEigenPodValidatorRestakedIterator) 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(IEigenPodValidatorRestaked) + 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(IEigenPodValidatorRestaked) + 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 *IEigenPodValidatorRestakedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodValidatorRestakedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodValidatorRestaked represents a ValidatorRestaked event raised by the IEigenPod contract. +type IEigenPodValidatorRestaked struct { + ValidatorIndex *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorRestaked is a free log retrieval operation binding the contract event 0x2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449. +// +// Solidity: event ValidatorRestaked(uint40 validatorIndex) +func (_IEigenPod *IEigenPodFilterer) FilterValidatorRestaked(opts *bind.FilterOpts) (*IEigenPodValidatorRestakedIterator, error) { + + logs, sub, err := _IEigenPod.contract.FilterLogs(opts, "ValidatorRestaked") + if err != nil { + return nil, err + } + return &IEigenPodValidatorRestakedIterator{contract: _IEigenPod.contract, event: "ValidatorRestaked", logs: logs, sub: sub}, nil +} + +// WatchValidatorRestaked is a free log subscription operation binding the contract event 0x2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449. +// +// Solidity: event ValidatorRestaked(uint40 validatorIndex) +func (_IEigenPod *IEigenPodFilterer) WatchValidatorRestaked(opts *bind.WatchOpts, sink chan<- *IEigenPodValidatorRestaked) (event.Subscription, error) { + + logs, sub, err := _IEigenPod.contract.WatchLogs(opts, "ValidatorRestaked") + 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(IEigenPodValidatorRestaked) + if err := _IEigenPod.contract.UnpackLog(event, "ValidatorRestaked", 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 +} + +// ParseValidatorRestaked is a log parse operation binding the contract event 0x2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449. +// +// Solidity: event ValidatorRestaked(uint40 validatorIndex) +func (_IEigenPod *IEigenPodFilterer) ParseValidatorRestaked(log types.Log) (*IEigenPodValidatorRestaked, error) { + event := new(IEigenPodValidatorRestaked) + if err := _IEigenPod.contract.UnpackLog(event, "ValidatorRestaked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IEigenPod/tmp.abi b/pkg/bindings/IEigenPod/tmp.abi new file mode 100644 index 000000000..dfe621e28 --- /dev/null +++ b/pkg/bindings/IEigenPod/tmp.abi @@ -0,0 +1,725 @@ +[ + { + "type": "function", + "name": "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "activateRestaking", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "eigenPodManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IEigenPodManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hasRestaked", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mostRecentWithdrawalTimestamp", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "nonBeaconChainETHBalanceWei", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "podOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "provenWithdrawal", + "inputs": [ + { + "name": "validatorPubkeyHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "slot", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "recoverTokens", + "inputs": [ + { + "name": "tokenList", + "type": "address[]", + "internalType": "contract IERC20[]" + }, + { + "name": "amountsToWithdraw", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "recipient", + "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": "validatorPubkeyHashToInfo", + "inputs": [ + { + "name": "validatorPubkeyHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IEigenPod.ValidatorInfo", + "components": [ + { + "name": "validatorIndex", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "restakedBalanceGwei", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "mostRecentBalanceUpdateTimestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum IEigenPod.VALIDATOR_STATUS" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validatorPubkeyToInfo", + "inputs": [ + { + "name": "validatorPubkey", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IEigenPod.ValidatorInfo", + "components": [ + { + "name": "validatorIndex", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "restakedBalanceGwei", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "mostRecentBalanceUpdateTimestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum IEigenPod.VALIDATOR_STATUS" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validatorStatus", + "inputs": [ + { + "name": "validatorPubkey", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum IEigenPod.VALIDATOR_STATUS" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validatorStatus", + "inputs": [ + { + "name": "pubkeyHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum IEigenPod.VALIDATOR_STATUS" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "verifyAndProcessWithdrawals", + "inputs": [ + { + "name": "oracleTimestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "stateRootProof", + "type": "tuple", + "internalType": "struct BeaconChainProofs.StateRootProof", + "components": [ + { + "name": "beaconStateRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "proof", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "withdrawalProofs", + "type": "tuple[]", + "internalType": "struct BeaconChainProofs.WithdrawalProof[]", + "components": [ + { + "name": "withdrawalProof", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "slotProof", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "executionPayloadProof", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "timestampProof", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "historicalSummaryBlockRootProof", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "blockRootIndex", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "historicalSummaryIndex", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "withdrawalIndex", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "blockRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "slotRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "timestampRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "executionPayloadRoot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "name": "validatorFieldsProofs", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "validatorFields", + "type": "bytes32[][]", + "internalType": "bytes32[][]" + }, + { + "name": "withdrawalFields", + "type": "bytes32[][]", + "internalType": "bytes32[][]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "verifyBalanceUpdates", + "inputs": [ + { + "name": "oracleTimestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "validatorIndices", + "type": "uint40[]", + "internalType": "uint40[]" + }, + { + "name": "stateRootProof", + "type": "tuple", + "internalType": "struct BeaconChainProofs.StateRootProof", + "components": [ + { + "name": "beaconStateRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "proof", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "validatorFieldsProofs", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "validatorFields", + "type": "bytes32[][]", + "internalType": "bytes32[][]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "verifyWithdrawalCredentials", + "inputs": [ + { + "name": "oracleTimestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "stateRootProof", + "type": "tuple", + "internalType": "struct BeaconChainProofs.StateRootProof", + "components": [ + { + "name": "beaconStateRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "proof", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "validatorIndices", + "type": "uint40[]", + "internalType": "uint40[]" + }, + { + "name": "withdrawalCredentialProofs", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "validatorFields", + "type": "bytes32[][]", + "internalType": "bytes32[][]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "withdrawBeforeRestaking", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "withdrawNonBeaconChainETHBalanceWei", + "inputs": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "amountToWithdraw", + "type": "uint256", + "internalType": "uint256" + } + ], + "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": "EigenPodStaked", + "inputs": [ + { + "name": "pubkey", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "FullWithdrawalRedeemed", + "inputs": [ + { + "name": "validatorIndex", + "type": "uint40", + "indexed": false, + "internalType": "uint40" + }, + { + "name": "withdrawalTimestamp", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "withdrawalAmountGwei", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NonBeaconChainETHReceived", + "inputs": [ + { + "name": "amountReceived", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NonBeaconChainETHWithdrawn", + "inputs": [ + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amountWithdrawn", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PartialWithdrawalRedeemed", + "inputs": [ + { + "name": "validatorIndex", + "type": "uint40", + "indexed": false, + "internalType": "uint40" + }, + { + "name": "withdrawalTimestamp", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "partialWithdrawalAmountGwei", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "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": "RestakingActivated", + "inputs": [ + { + "name": "podOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "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": "ValidatorRestaked", + "inputs": [ + { + "name": "validatorIndex", + "type": "uint40", + "indexed": false, + "internalType": "uint40" + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/IEigenPod/tmp.bin b/pkg/bindings/IEigenPod/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IEigenPod/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/IEigenPodManager/binding.go b/pkg/bindings/IEigenPodManager/binding.go new file mode 100644 index 000000000..e4e8150ef --- /dev/null +++ b/pkg/bindings/IEigenPodManager/binding.go @@ -0,0 +1,2224 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IEigenPodManager + +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 +) + +// 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\":\"beaconChainOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeaconChainOracle\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createPod\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"denebForkTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"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\":\"getBlockRootAtTimestamp\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"setDenebForkTimestamp\",\"inputs\":[{\"name\":\"newDenebForkTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"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\":\"updateBeaconChainOracle\",\"inputs\":[{\"name\":\"newBeaconChainOracle\",\"type\":\"address\",\"internalType\":\"contractIBeaconChainOracle\"}],\"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\":\"BeaconOracleUpdated\",\"inputs\":[{\"name\":\"newOracleAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DenebForkTimestampUpdated\",\"inputs\":[{\"name\":\"newValue\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"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}]", +} + +// IEigenPodManagerABI is the input ABI used to generate the binding from. +// Deprecated: Use IEigenPodManagerMetaData.ABI instead. +var IEigenPodManagerABI = IEigenPodManagerMetaData.ABI + +// IEigenPodManager is an auto generated Go binding around an Ethereum contract. +type IEigenPodManager struct { + IEigenPodManagerCaller // Read-only binding to the contract + IEigenPodManagerTransactor // Write-only binding to the contract + IEigenPodManagerFilterer // Log filterer for contract events +} + +// IEigenPodManagerCaller is an auto generated read-only Go binding around an Ethereum contract. +type IEigenPodManagerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IEigenPodManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IEigenPodManagerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IEigenPodManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IEigenPodManagerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IEigenPodManagerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IEigenPodManagerSession struct { + Contract *IEigenPodManager // 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 +} + +// IEigenPodManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IEigenPodManagerCallerSession struct { + Contract *IEigenPodManagerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IEigenPodManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IEigenPodManagerTransactorSession struct { + Contract *IEigenPodManagerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IEigenPodManagerRaw is an auto generated low-level Go binding around an Ethereum contract. +type IEigenPodManagerRaw struct { + Contract *IEigenPodManager // Generic contract binding to access the raw methods on +} + +// IEigenPodManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IEigenPodManagerCallerRaw struct { + Contract *IEigenPodManagerCaller // Generic read-only contract binding to access the raw methods on +} + +// IEigenPodManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IEigenPodManagerTransactorRaw struct { + Contract *IEigenPodManagerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIEigenPodManager creates a new instance of IEigenPodManager, bound to a specific deployed contract. +func NewIEigenPodManager(address common.Address, backend bind.ContractBackend) (*IEigenPodManager, error) { + contract, err := bindIEigenPodManager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IEigenPodManager{IEigenPodManagerCaller: IEigenPodManagerCaller{contract: contract}, IEigenPodManagerTransactor: IEigenPodManagerTransactor{contract: contract}, IEigenPodManagerFilterer: IEigenPodManagerFilterer{contract: contract}}, nil +} + +// NewIEigenPodManagerCaller creates a new read-only instance of IEigenPodManager, bound to a specific deployed contract. +func NewIEigenPodManagerCaller(address common.Address, caller bind.ContractCaller) (*IEigenPodManagerCaller, error) { + contract, err := bindIEigenPodManager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IEigenPodManagerCaller{contract: contract}, nil +} + +// NewIEigenPodManagerTransactor creates a new write-only instance of IEigenPodManager, bound to a specific deployed contract. +func NewIEigenPodManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*IEigenPodManagerTransactor, error) { + contract, err := bindIEigenPodManager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IEigenPodManagerTransactor{contract: contract}, nil +} + +// NewIEigenPodManagerFilterer creates a new log filterer instance of IEigenPodManager, bound to a specific deployed contract. +func NewIEigenPodManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*IEigenPodManagerFilterer, error) { + contract, err := bindIEigenPodManager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IEigenPodManagerFilterer{contract: contract}, nil +} + +// bindIEigenPodManager binds a generic wrapper to an already deployed contract. +func bindIEigenPodManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IEigenPodManagerMetaData.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 (_IEigenPodManager *IEigenPodManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IEigenPodManager.Contract.IEigenPodManagerCaller.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 (_IEigenPodManager *IEigenPodManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IEigenPodManager.Contract.IEigenPodManagerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IEigenPodManager *IEigenPodManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IEigenPodManager.Contract.IEigenPodManagerTransactor.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 (_IEigenPodManager *IEigenPodManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IEigenPodManager.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 (_IEigenPodManager *IEigenPodManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IEigenPodManager.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IEigenPodManager *IEigenPodManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IEigenPodManager.Contract.contract.Transact(opts, method, params...) +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_IEigenPodManager *IEigenPodManagerCaller) BeaconChainETHStrategy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IEigenPodManager.contract.Call(opts, &out, "beaconChainETHStrategy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_IEigenPodManager *IEigenPodManagerSession) BeaconChainETHStrategy() (common.Address, error) { + return _IEigenPodManager.Contract.BeaconChainETHStrategy(&_IEigenPodManager.CallOpts) +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_IEigenPodManager *IEigenPodManagerCallerSession) BeaconChainETHStrategy() (common.Address, error) { + return _IEigenPodManager.Contract.BeaconChainETHStrategy(&_IEigenPodManager.CallOpts) +} + +// BeaconChainOracle is a free data retrieval call binding the contract method 0xc052bd61. +// +// Solidity: function beaconChainOracle() view returns(address) +func (_IEigenPodManager *IEigenPodManagerCaller) BeaconChainOracle(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IEigenPodManager.contract.Call(opts, &out, "beaconChainOracle") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BeaconChainOracle is a free data retrieval call binding the contract method 0xc052bd61. +// +// Solidity: function beaconChainOracle() view returns(address) +func (_IEigenPodManager *IEigenPodManagerSession) BeaconChainOracle() (common.Address, error) { + return _IEigenPodManager.Contract.BeaconChainOracle(&_IEigenPodManager.CallOpts) +} + +// BeaconChainOracle is a free data retrieval call binding the contract method 0xc052bd61. +// +// Solidity: function beaconChainOracle() view returns(address) +func (_IEigenPodManager *IEigenPodManagerCallerSession) BeaconChainOracle() (common.Address, error) { + return _IEigenPodManager.Contract.BeaconChainOracle(&_IEigenPodManager.CallOpts) +} + +// DenebForkTimestamp is a free data retrieval call binding the contract method 0x44e71c80. +// +// Solidity: function denebForkTimestamp() view returns(uint64) +func (_IEigenPodManager *IEigenPodManagerCaller) DenebForkTimestamp(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _IEigenPodManager.contract.Call(opts, &out, "denebForkTimestamp") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// DenebForkTimestamp is a free data retrieval call binding the contract method 0x44e71c80. +// +// Solidity: function denebForkTimestamp() view returns(uint64) +func (_IEigenPodManager *IEigenPodManagerSession) DenebForkTimestamp() (uint64, error) { + return _IEigenPodManager.Contract.DenebForkTimestamp(&_IEigenPodManager.CallOpts) +} + +// DenebForkTimestamp is a free data retrieval call binding the contract method 0x44e71c80. +// +// Solidity: function denebForkTimestamp() view returns(uint64) +func (_IEigenPodManager *IEigenPodManagerCallerSession) DenebForkTimestamp() (uint64, error) { + return _IEigenPodManager.Contract.DenebForkTimestamp(&_IEigenPodManager.CallOpts) +} + +// EigenPodBeacon is a free data retrieval call binding the contract method 0x292b7b2b. +// +// Solidity: function eigenPodBeacon() view returns(address) +func (_IEigenPodManager *IEigenPodManagerCaller) EigenPodBeacon(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IEigenPodManager.contract.Call(opts, &out, "eigenPodBeacon") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EigenPodBeacon is a free data retrieval call binding the contract method 0x292b7b2b. +// +// Solidity: function eigenPodBeacon() view returns(address) +func (_IEigenPodManager *IEigenPodManagerSession) EigenPodBeacon() (common.Address, error) { + return _IEigenPodManager.Contract.EigenPodBeacon(&_IEigenPodManager.CallOpts) +} + +// EigenPodBeacon is a free data retrieval call binding the contract method 0x292b7b2b. +// +// Solidity: function eigenPodBeacon() view returns(address) +func (_IEigenPodManager *IEigenPodManagerCallerSession) EigenPodBeacon() (common.Address, error) { + return _IEigenPodManager.Contract.EigenPodBeacon(&_IEigenPodManager.CallOpts) +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_IEigenPodManager *IEigenPodManagerCaller) EthPOS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IEigenPodManager.contract.Call(opts, &out, "ethPOS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_IEigenPodManager *IEigenPodManagerSession) EthPOS() (common.Address, error) { + return _IEigenPodManager.Contract.EthPOS(&_IEigenPodManager.CallOpts) +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_IEigenPodManager *IEigenPodManagerCallerSession) EthPOS() (common.Address, error) { + return _IEigenPodManager.Contract.EthPOS(&_IEigenPodManager.CallOpts) +} + +// GetBlockRootAtTimestamp is a free data retrieval call binding the contract method 0xd1c64cc9. +// +// Solidity: function getBlockRootAtTimestamp(uint64 timestamp) view returns(bytes32) +func (_IEigenPodManager *IEigenPodManagerCaller) GetBlockRootAtTimestamp(opts *bind.CallOpts, timestamp uint64) ([32]byte, error) { + var out []interface{} + err := _IEigenPodManager.contract.Call(opts, &out, "getBlockRootAtTimestamp", timestamp) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetBlockRootAtTimestamp is a free data retrieval call binding the contract method 0xd1c64cc9. +// +// Solidity: function getBlockRootAtTimestamp(uint64 timestamp) view returns(bytes32) +func (_IEigenPodManager *IEigenPodManagerSession) GetBlockRootAtTimestamp(timestamp uint64) ([32]byte, error) { + return _IEigenPodManager.Contract.GetBlockRootAtTimestamp(&_IEigenPodManager.CallOpts, timestamp) +} + +// GetBlockRootAtTimestamp is a free data retrieval call binding the contract method 0xd1c64cc9. +// +// Solidity: function getBlockRootAtTimestamp(uint64 timestamp) view returns(bytes32) +func (_IEigenPodManager *IEigenPodManagerCallerSession) GetBlockRootAtTimestamp(timestamp uint64) ([32]byte, error) { + return _IEigenPodManager.Contract.GetBlockRootAtTimestamp(&_IEigenPodManager.CallOpts, timestamp) +} + +// GetPod is a free data retrieval call binding the contract method 0xa38406a3. +// +// Solidity: function getPod(address podOwner) view returns(address) +func (_IEigenPodManager *IEigenPodManagerCaller) GetPod(opts *bind.CallOpts, podOwner common.Address) (common.Address, error) { + var out []interface{} + err := _IEigenPodManager.contract.Call(opts, &out, "getPod", podOwner) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPod is a free data retrieval call binding the contract method 0xa38406a3. +// +// Solidity: function getPod(address podOwner) view returns(address) +func (_IEigenPodManager *IEigenPodManagerSession) GetPod(podOwner common.Address) (common.Address, error) { + return _IEigenPodManager.Contract.GetPod(&_IEigenPodManager.CallOpts, podOwner) +} + +// GetPod is a free data retrieval call binding the contract method 0xa38406a3. +// +// Solidity: function getPod(address podOwner) view returns(address) +func (_IEigenPodManager *IEigenPodManagerCallerSession) GetPod(podOwner common.Address) (common.Address, error) { + return _IEigenPodManager.Contract.GetPod(&_IEigenPodManager.CallOpts, podOwner) +} + +// HasPod is a free data retrieval call binding the contract method 0xf6848d24. +// +// Solidity: function hasPod(address podOwner) view returns(bool) +func (_IEigenPodManager *IEigenPodManagerCaller) HasPod(opts *bind.CallOpts, podOwner common.Address) (bool, error) { + var out []interface{} + err := _IEigenPodManager.contract.Call(opts, &out, "hasPod", podOwner) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasPod is a free data retrieval call binding the contract method 0xf6848d24. +// +// Solidity: function hasPod(address podOwner) view returns(bool) +func (_IEigenPodManager *IEigenPodManagerSession) HasPod(podOwner common.Address) (bool, error) { + return _IEigenPodManager.Contract.HasPod(&_IEigenPodManager.CallOpts, podOwner) +} + +// HasPod is a free data retrieval call binding the contract method 0xf6848d24. +// +// Solidity: function hasPod(address podOwner) view returns(bool) +func (_IEigenPodManager *IEigenPodManagerCallerSession) HasPod(podOwner common.Address) (bool, error) { + return _IEigenPodManager.Contract.HasPod(&_IEigenPodManager.CallOpts, podOwner) +} + +// NumPods is a free data retrieval call binding the contract method 0xa6a509be. +// +// Solidity: function numPods() view returns(uint256) +func (_IEigenPodManager *IEigenPodManagerCaller) NumPods(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IEigenPodManager.contract.Call(opts, &out, "numPods") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NumPods is a free data retrieval call binding the contract method 0xa6a509be. +// +// Solidity: function numPods() view returns(uint256) +func (_IEigenPodManager *IEigenPodManagerSession) NumPods() (*big.Int, error) { + return _IEigenPodManager.Contract.NumPods(&_IEigenPodManager.CallOpts) +} + +// NumPods is a free data retrieval call binding the contract method 0xa6a509be. +// +// Solidity: function numPods() view returns(uint256) +func (_IEigenPodManager *IEigenPodManagerCallerSession) NumPods() (*big.Int, error) { + return _IEigenPodManager.Contract.NumPods(&_IEigenPodManager.CallOpts) +} + +// OwnerToPod is a free data retrieval call binding the contract method 0x9ba06275. +// +// Solidity: function ownerToPod(address podOwner) view returns(address) +func (_IEigenPodManager *IEigenPodManagerCaller) OwnerToPod(opts *bind.CallOpts, podOwner common.Address) (common.Address, error) { + var out []interface{} + err := _IEigenPodManager.contract.Call(opts, &out, "ownerToPod", podOwner) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OwnerToPod is a free data retrieval call binding the contract method 0x9ba06275. +// +// Solidity: function ownerToPod(address podOwner) view returns(address) +func (_IEigenPodManager *IEigenPodManagerSession) OwnerToPod(podOwner common.Address) (common.Address, error) { + return _IEigenPodManager.Contract.OwnerToPod(&_IEigenPodManager.CallOpts, podOwner) +} + +// OwnerToPod is a free data retrieval call binding the contract method 0x9ba06275. +// +// Solidity: function ownerToPod(address podOwner) view returns(address) +func (_IEigenPodManager *IEigenPodManagerCallerSession) OwnerToPod(podOwner common.Address) (common.Address, error) { + return _IEigenPodManager.Contract.OwnerToPod(&_IEigenPodManager.CallOpts, podOwner) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_IEigenPodManager *IEigenPodManagerCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _IEigenPodManager.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 (_IEigenPodManager *IEigenPodManagerSession) Paused(index uint8) (bool, error) { + return _IEigenPodManager.Contract.Paused(&_IEigenPodManager.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_IEigenPodManager *IEigenPodManagerCallerSession) Paused(index uint8) (bool, error) { + return _IEigenPodManager.Contract.Paused(&_IEigenPodManager.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_IEigenPodManager *IEigenPodManagerCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IEigenPodManager.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 (_IEigenPodManager *IEigenPodManagerSession) Paused0() (*big.Int, error) { + return _IEigenPodManager.Contract.Paused0(&_IEigenPodManager.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_IEigenPodManager *IEigenPodManagerCallerSession) Paused0() (*big.Int, error) { + return _IEigenPodManager.Contract.Paused0(&_IEigenPodManager.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_IEigenPodManager *IEigenPodManagerCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IEigenPodManager.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 (_IEigenPodManager *IEigenPodManagerSession) PauserRegistry() (common.Address, error) { + return _IEigenPodManager.Contract.PauserRegistry(&_IEigenPodManager.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_IEigenPodManager *IEigenPodManagerCallerSession) PauserRegistry() (common.Address, error) { + return _IEigenPodManager.Contract.PauserRegistry(&_IEigenPodManager.CallOpts) +} + +// PodOwnerShares is a free data retrieval call binding the contract method 0x60f4062b. +// +// Solidity: function podOwnerShares(address podOwner) view returns(int256) +func (_IEigenPodManager *IEigenPodManagerCaller) PodOwnerShares(opts *bind.CallOpts, podOwner common.Address) (*big.Int, error) { + var out []interface{} + err := _IEigenPodManager.contract.Call(opts, &out, "podOwnerShares", podOwner) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// PodOwnerShares is a free data retrieval call binding the contract method 0x60f4062b. +// +// Solidity: function podOwnerShares(address podOwner) view returns(int256) +func (_IEigenPodManager *IEigenPodManagerSession) PodOwnerShares(podOwner common.Address) (*big.Int, error) { + return _IEigenPodManager.Contract.PodOwnerShares(&_IEigenPodManager.CallOpts, podOwner) +} + +// PodOwnerShares is a free data retrieval call binding the contract method 0x60f4062b. +// +// Solidity: function podOwnerShares(address podOwner) view returns(int256) +func (_IEigenPodManager *IEigenPodManagerCallerSession) PodOwnerShares(podOwner common.Address) (*big.Int, error) { + return _IEigenPodManager.Contract.PodOwnerShares(&_IEigenPodManager.CallOpts, podOwner) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_IEigenPodManager *IEigenPodManagerCaller) Slasher(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IEigenPodManager.contract.Call(opts, &out, "slasher") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_IEigenPodManager *IEigenPodManagerSession) Slasher() (common.Address, error) { + return _IEigenPodManager.Contract.Slasher(&_IEigenPodManager.CallOpts) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_IEigenPodManager *IEigenPodManagerCallerSession) Slasher() (common.Address, error) { + return _IEigenPodManager.Contract.Slasher(&_IEigenPodManager.CallOpts) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_IEigenPodManager *IEigenPodManagerCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IEigenPodManager.contract.Call(opts, &out, "strategyManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_IEigenPodManager *IEigenPodManagerSession) StrategyManager() (common.Address, error) { + return _IEigenPodManager.Contract.StrategyManager(&_IEigenPodManager.CallOpts) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_IEigenPodManager *IEigenPodManagerCallerSession) StrategyManager() (common.Address, error) { + return _IEigenPodManager.Contract.StrategyManager(&_IEigenPodManager.CallOpts) +} + +// AddShares is a paid mutator transaction binding the contract method 0x0e81073c. +// +// 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) +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) +func (_IEigenPodManager *IEigenPodManagerTransactorSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.Contract.AddShares(&_IEigenPodManager.TransactOpts, podOwner, shares) +} + +// CreatePod is a paid mutator transaction binding the contract method 0x84d81062. +// +// Solidity: function createPod() returns(address) +func (_IEigenPodManager *IEigenPodManagerTransactor) CreatePod(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IEigenPodManager.contract.Transact(opts, "createPod") +} + +// CreatePod is a paid mutator transaction binding the contract method 0x84d81062. +// +// Solidity: function createPod() returns(address) +func (_IEigenPodManager *IEigenPodManagerSession) CreatePod() (*types.Transaction, error) { + return _IEigenPodManager.Contract.CreatePod(&_IEigenPodManager.TransactOpts) +} + +// CreatePod is a paid mutator transaction binding the contract method 0x84d81062. +// +// Solidity: function createPod() returns(address) +func (_IEigenPodManager *IEigenPodManagerTransactorSession) CreatePod() (*types.Transaction, error) { + return _IEigenPodManager.Contract.CreatePod(&_IEigenPodManager.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_IEigenPodManager *IEigenPodManagerTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_IEigenPodManager *IEigenPodManagerSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.Contract.Pause(&_IEigenPodManager.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_IEigenPodManager *IEigenPodManagerTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.Contract.Pause(&_IEigenPodManager.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_IEigenPodManager *IEigenPodManagerTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IEigenPodManager.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_IEigenPodManager *IEigenPodManagerSession) PauseAll() (*types.Transaction, error) { + return _IEigenPodManager.Contract.PauseAll(&_IEigenPodManager.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_IEigenPodManager *IEigenPodManagerTransactorSession) PauseAll() (*types.Transaction, error) { + return _IEigenPodManager.Contract.PauseAll(&_IEigenPodManager.TransactOpts) +} + +// RecordBeaconChainETHBalanceUpdate is a paid mutator transaction binding the contract method 0xc2c51c40. +// +// Solidity: function recordBeaconChainETHBalanceUpdate(address podOwner, int256 sharesDelta) returns() +func (_IEigenPodManager *IEigenPodManagerTransactor) RecordBeaconChainETHBalanceUpdate(opts *bind.TransactOpts, podOwner common.Address, sharesDelta *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.contract.Transact(opts, "recordBeaconChainETHBalanceUpdate", podOwner, sharesDelta) +} + +// RecordBeaconChainETHBalanceUpdate is a paid mutator transaction binding the contract method 0xc2c51c40. +// +// Solidity: function recordBeaconChainETHBalanceUpdate(address podOwner, int256 sharesDelta) returns() +func (_IEigenPodManager *IEigenPodManagerSession) RecordBeaconChainETHBalanceUpdate(podOwner common.Address, sharesDelta *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.Contract.RecordBeaconChainETHBalanceUpdate(&_IEigenPodManager.TransactOpts, podOwner, sharesDelta) +} + +// RecordBeaconChainETHBalanceUpdate is a paid mutator transaction binding the contract method 0xc2c51c40. +// +// Solidity: function recordBeaconChainETHBalanceUpdate(address podOwner, int256 sharesDelta) returns() +func (_IEigenPodManager *IEigenPodManagerTransactorSession) RecordBeaconChainETHBalanceUpdate(podOwner common.Address, sharesDelta *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.Contract.RecordBeaconChainETHBalanceUpdate(&_IEigenPodManager.TransactOpts, podOwner, sharesDelta) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0xbeffbb89. +// +// Solidity: function removeShares(address podOwner, uint256 shares) returns() +func (_IEigenPodManager *IEigenPodManagerTransactor) RemoveShares(opts *bind.TransactOpts, podOwner common.Address, shares *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.contract.Transact(opts, "removeShares", podOwner, shares) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0xbeffbb89. +// +// Solidity: function removeShares(address podOwner, uint256 shares) returns() +func (_IEigenPodManager *IEigenPodManagerSession) RemoveShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.Contract.RemoveShares(&_IEigenPodManager.TransactOpts, podOwner, shares) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0xbeffbb89. +// +// Solidity: function removeShares(address podOwner, uint256 shares) returns() +func (_IEigenPodManager *IEigenPodManagerTransactorSession) RemoveShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.Contract.RemoveShares(&_IEigenPodManager.TransactOpts, podOwner, shares) +} + +// SetDenebForkTimestamp is a paid mutator transaction binding the contract method 0x463db038. +// +// Solidity: function setDenebForkTimestamp(uint64 newDenebForkTimestamp) returns() +func (_IEigenPodManager *IEigenPodManagerTransactor) SetDenebForkTimestamp(opts *bind.TransactOpts, newDenebForkTimestamp uint64) (*types.Transaction, error) { + return _IEigenPodManager.contract.Transact(opts, "setDenebForkTimestamp", newDenebForkTimestamp) +} + +// SetDenebForkTimestamp is a paid mutator transaction binding the contract method 0x463db038. +// +// Solidity: function setDenebForkTimestamp(uint64 newDenebForkTimestamp) returns() +func (_IEigenPodManager *IEigenPodManagerSession) SetDenebForkTimestamp(newDenebForkTimestamp uint64) (*types.Transaction, error) { + return _IEigenPodManager.Contract.SetDenebForkTimestamp(&_IEigenPodManager.TransactOpts, newDenebForkTimestamp) +} + +// SetDenebForkTimestamp is a paid mutator transaction binding the contract method 0x463db038. +// +// Solidity: function setDenebForkTimestamp(uint64 newDenebForkTimestamp) returns() +func (_IEigenPodManager *IEigenPodManagerTransactorSession) SetDenebForkTimestamp(newDenebForkTimestamp uint64) (*types.Transaction, error) { + return _IEigenPodManager.Contract.SetDenebForkTimestamp(&_IEigenPodManager.TransactOpts, newDenebForkTimestamp) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_IEigenPodManager *IEigenPodManagerTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _IEigenPodManager.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_IEigenPodManager *IEigenPodManagerSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _IEigenPodManager.Contract.SetPauserRegistry(&_IEigenPodManager.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_IEigenPodManager *IEigenPodManagerTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _IEigenPodManager.Contract.SetPauserRegistry(&_IEigenPodManager.TransactOpts, newPauserRegistry) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_IEigenPodManager *IEigenPodManagerTransactor) Stake(opts *bind.TransactOpts, pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _IEigenPodManager.contract.Transact(opts, "stake", pubkey, signature, depositDataRoot) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_IEigenPodManager *IEigenPodManagerSession) Stake(pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _IEigenPodManager.Contract.Stake(&_IEigenPodManager.TransactOpts, pubkey, signature, depositDataRoot) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_IEigenPodManager *IEigenPodManagerTransactorSession) Stake(pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _IEigenPodManager.Contract.Stake(&_IEigenPodManager.TransactOpts, pubkey, signature, depositDataRoot) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_IEigenPodManager *IEigenPodManagerTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_IEigenPodManager *IEigenPodManagerSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.Contract.Unpause(&_IEigenPodManager.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_IEigenPodManager *IEigenPodManagerTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.Contract.Unpause(&_IEigenPodManager.TransactOpts, newPausedStatus) +} + +// UpdateBeaconChainOracle is a paid mutator transaction binding the contract method 0xc1de3aef. +// +// Solidity: function updateBeaconChainOracle(address newBeaconChainOracle) returns() +func (_IEigenPodManager *IEigenPodManagerTransactor) UpdateBeaconChainOracle(opts *bind.TransactOpts, newBeaconChainOracle common.Address) (*types.Transaction, error) { + return _IEigenPodManager.contract.Transact(opts, "updateBeaconChainOracle", newBeaconChainOracle) +} + +// UpdateBeaconChainOracle is a paid mutator transaction binding the contract method 0xc1de3aef. +// +// Solidity: function updateBeaconChainOracle(address newBeaconChainOracle) returns() +func (_IEigenPodManager *IEigenPodManagerSession) UpdateBeaconChainOracle(newBeaconChainOracle common.Address) (*types.Transaction, error) { + return _IEigenPodManager.Contract.UpdateBeaconChainOracle(&_IEigenPodManager.TransactOpts, newBeaconChainOracle) +} + +// UpdateBeaconChainOracle is a paid mutator transaction binding the contract method 0xc1de3aef. +// +// Solidity: function updateBeaconChainOracle(address newBeaconChainOracle) returns() +func (_IEigenPodManager *IEigenPodManagerTransactorSession) UpdateBeaconChainOracle(newBeaconChainOracle common.Address) (*types.Transaction, error) { + return _IEigenPodManager.Contract.UpdateBeaconChainOracle(&_IEigenPodManager.TransactOpts, newBeaconChainOracle) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0x387b1300. +// +// Solidity: function withdrawSharesAsTokens(address podOwner, address destination, uint256 shares) returns() +func (_IEigenPodManager *IEigenPodManagerTransactor) WithdrawSharesAsTokens(opts *bind.TransactOpts, podOwner common.Address, destination common.Address, shares *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.contract.Transact(opts, "withdrawSharesAsTokens", podOwner, destination, shares) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0x387b1300. +// +// Solidity: function withdrawSharesAsTokens(address podOwner, address destination, uint256 shares) returns() +func (_IEigenPodManager *IEigenPodManagerSession) WithdrawSharesAsTokens(podOwner common.Address, destination common.Address, shares *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.Contract.WithdrawSharesAsTokens(&_IEigenPodManager.TransactOpts, podOwner, destination, shares) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0x387b1300. +// +// Solidity: function withdrawSharesAsTokens(address podOwner, address destination, uint256 shares) returns() +func (_IEigenPodManager *IEigenPodManagerTransactorSession) WithdrawSharesAsTokens(podOwner common.Address, destination common.Address, shares *big.Int) (*types.Transaction, error) { + return _IEigenPodManager.Contract.WithdrawSharesAsTokens(&_IEigenPodManager.TransactOpts, podOwner, destination, shares) +} + +// IEigenPodManagerBeaconChainETHDepositedIterator is returned from FilterBeaconChainETHDeposited and is used to iterate over the raw logs and unpacked data for BeaconChainETHDeposited events raised by the IEigenPodManager contract. +type IEigenPodManagerBeaconChainETHDepositedIterator struct { + Event *IEigenPodManagerBeaconChainETHDeposited // 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 *IEigenPodManagerBeaconChainETHDepositedIterator) 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(IEigenPodManagerBeaconChainETHDeposited) + 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(IEigenPodManagerBeaconChainETHDeposited) + 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 *IEigenPodManagerBeaconChainETHDepositedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodManagerBeaconChainETHDepositedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodManagerBeaconChainETHDeposited represents a BeaconChainETHDeposited event raised by the IEigenPodManager contract. +type IEigenPodManagerBeaconChainETHDeposited struct { + PodOwner common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBeaconChainETHDeposited is a free log retrieval operation binding the contract event 0x35a85cabc603f48abb2b71d9fbd8adea7c449d7f0be900ae7a2986ea369c3d0d. +// +// Solidity: event BeaconChainETHDeposited(address indexed podOwner, uint256 amount) +func (_IEigenPodManager *IEigenPodManagerFilterer) FilterBeaconChainETHDeposited(opts *bind.FilterOpts, podOwner []common.Address) (*IEigenPodManagerBeaconChainETHDepositedIterator, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _IEigenPodManager.contract.FilterLogs(opts, "BeaconChainETHDeposited", podOwnerRule) + if err != nil { + return nil, err + } + return &IEigenPodManagerBeaconChainETHDepositedIterator{contract: _IEigenPodManager.contract, event: "BeaconChainETHDeposited", logs: logs, sub: sub}, nil +} + +// WatchBeaconChainETHDeposited is a free log subscription operation binding the contract event 0x35a85cabc603f48abb2b71d9fbd8adea7c449d7f0be900ae7a2986ea369c3d0d. +// +// Solidity: event BeaconChainETHDeposited(address indexed podOwner, uint256 amount) +func (_IEigenPodManager *IEigenPodManagerFilterer) WatchBeaconChainETHDeposited(opts *bind.WatchOpts, sink chan<- *IEigenPodManagerBeaconChainETHDeposited, podOwner []common.Address) (event.Subscription, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _IEigenPodManager.contract.WatchLogs(opts, "BeaconChainETHDeposited", podOwnerRule) + 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(IEigenPodManagerBeaconChainETHDeposited) + if err := _IEigenPodManager.contract.UnpackLog(event, "BeaconChainETHDeposited", 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 +} + +// ParseBeaconChainETHDeposited is a log parse operation binding the contract event 0x35a85cabc603f48abb2b71d9fbd8adea7c449d7f0be900ae7a2986ea369c3d0d. +// +// Solidity: event BeaconChainETHDeposited(address indexed podOwner, uint256 amount) +func (_IEigenPodManager *IEigenPodManagerFilterer) ParseBeaconChainETHDeposited(log types.Log) (*IEigenPodManagerBeaconChainETHDeposited, error) { + event := new(IEigenPodManagerBeaconChainETHDeposited) + if err := _IEigenPodManager.contract.UnpackLog(event, "BeaconChainETHDeposited", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodManagerBeaconChainETHWithdrawalCompletedIterator is returned from FilterBeaconChainETHWithdrawalCompleted and is used to iterate over the raw logs and unpacked data for BeaconChainETHWithdrawalCompleted events raised by the IEigenPodManager contract. +type IEigenPodManagerBeaconChainETHWithdrawalCompletedIterator struct { + Event *IEigenPodManagerBeaconChainETHWithdrawalCompleted // 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 *IEigenPodManagerBeaconChainETHWithdrawalCompletedIterator) 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(IEigenPodManagerBeaconChainETHWithdrawalCompleted) + 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(IEigenPodManagerBeaconChainETHWithdrawalCompleted) + 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 *IEigenPodManagerBeaconChainETHWithdrawalCompletedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodManagerBeaconChainETHWithdrawalCompletedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodManagerBeaconChainETHWithdrawalCompleted represents a BeaconChainETHWithdrawalCompleted event raised by the IEigenPodManager contract. +type IEigenPodManagerBeaconChainETHWithdrawalCompleted struct { + PodOwner common.Address + Shares *big.Int + Nonce *big.Int + DelegatedAddress common.Address + Withdrawer common.Address + WithdrawalRoot [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBeaconChainETHWithdrawalCompleted is a free log retrieval operation binding the contract event 0xa6bab1d55a361fcea2eee2bc9491e4f01e6cf333df03c9c4f2c144466429f7d6. +// +// Solidity: event BeaconChainETHWithdrawalCompleted(address indexed podOwner, uint256 shares, uint96 nonce, address delegatedAddress, address withdrawer, bytes32 withdrawalRoot) +func (_IEigenPodManager *IEigenPodManagerFilterer) FilterBeaconChainETHWithdrawalCompleted(opts *bind.FilterOpts, podOwner []common.Address) (*IEigenPodManagerBeaconChainETHWithdrawalCompletedIterator, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _IEigenPodManager.contract.FilterLogs(opts, "BeaconChainETHWithdrawalCompleted", podOwnerRule) + if err != nil { + return nil, err + } + return &IEigenPodManagerBeaconChainETHWithdrawalCompletedIterator{contract: _IEigenPodManager.contract, event: "BeaconChainETHWithdrawalCompleted", logs: logs, sub: sub}, nil +} + +// WatchBeaconChainETHWithdrawalCompleted is a free log subscription operation binding the contract event 0xa6bab1d55a361fcea2eee2bc9491e4f01e6cf333df03c9c4f2c144466429f7d6. +// +// Solidity: event BeaconChainETHWithdrawalCompleted(address indexed podOwner, uint256 shares, uint96 nonce, address delegatedAddress, address withdrawer, bytes32 withdrawalRoot) +func (_IEigenPodManager *IEigenPodManagerFilterer) WatchBeaconChainETHWithdrawalCompleted(opts *bind.WatchOpts, sink chan<- *IEigenPodManagerBeaconChainETHWithdrawalCompleted, podOwner []common.Address) (event.Subscription, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _IEigenPodManager.contract.WatchLogs(opts, "BeaconChainETHWithdrawalCompleted", podOwnerRule) + 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(IEigenPodManagerBeaconChainETHWithdrawalCompleted) + if err := _IEigenPodManager.contract.UnpackLog(event, "BeaconChainETHWithdrawalCompleted", 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 +} + +// ParseBeaconChainETHWithdrawalCompleted is a log parse operation binding the contract event 0xa6bab1d55a361fcea2eee2bc9491e4f01e6cf333df03c9c4f2c144466429f7d6. +// +// Solidity: event BeaconChainETHWithdrawalCompleted(address indexed podOwner, uint256 shares, uint96 nonce, address delegatedAddress, address withdrawer, bytes32 withdrawalRoot) +func (_IEigenPodManager *IEigenPodManagerFilterer) ParseBeaconChainETHWithdrawalCompleted(log types.Log) (*IEigenPodManagerBeaconChainETHWithdrawalCompleted, error) { + event := new(IEigenPodManagerBeaconChainETHWithdrawalCompleted) + if err := _IEigenPodManager.contract.UnpackLog(event, "BeaconChainETHWithdrawalCompleted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodManagerBeaconOracleUpdatedIterator is returned from FilterBeaconOracleUpdated and is used to iterate over the raw logs and unpacked data for BeaconOracleUpdated events raised by the IEigenPodManager contract. +type IEigenPodManagerBeaconOracleUpdatedIterator struct { + Event *IEigenPodManagerBeaconOracleUpdated // 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 *IEigenPodManagerBeaconOracleUpdatedIterator) 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(IEigenPodManagerBeaconOracleUpdated) + 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(IEigenPodManagerBeaconOracleUpdated) + 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 *IEigenPodManagerBeaconOracleUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodManagerBeaconOracleUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodManagerBeaconOracleUpdated represents a BeaconOracleUpdated event raised by the IEigenPodManager contract. +type IEigenPodManagerBeaconOracleUpdated struct { + NewOracleAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBeaconOracleUpdated is a free log retrieval operation binding the contract event 0x08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f6. +// +// Solidity: event BeaconOracleUpdated(address indexed newOracleAddress) +func (_IEigenPodManager *IEigenPodManagerFilterer) FilterBeaconOracleUpdated(opts *bind.FilterOpts, newOracleAddress []common.Address) (*IEigenPodManagerBeaconOracleUpdatedIterator, error) { + + var newOracleAddressRule []interface{} + for _, newOracleAddressItem := range newOracleAddress { + newOracleAddressRule = append(newOracleAddressRule, newOracleAddressItem) + } + + logs, sub, err := _IEigenPodManager.contract.FilterLogs(opts, "BeaconOracleUpdated", newOracleAddressRule) + if err != nil { + return nil, err + } + return &IEigenPodManagerBeaconOracleUpdatedIterator{contract: _IEigenPodManager.contract, event: "BeaconOracleUpdated", logs: logs, sub: sub}, nil +} + +// WatchBeaconOracleUpdated is a free log subscription operation binding the contract event 0x08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f6. +// +// Solidity: event BeaconOracleUpdated(address indexed newOracleAddress) +func (_IEigenPodManager *IEigenPodManagerFilterer) WatchBeaconOracleUpdated(opts *bind.WatchOpts, sink chan<- *IEigenPodManagerBeaconOracleUpdated, newOracleAddress []common.Address) (event.Subscription, error) { + + var newOracleAddressRule []interface{} + for _, newOracleAddressItem := range newOracleAddress { + newOracleAddressRule = append(newOracleAddressRule, newOracleAddressItem) + } + + logs, sub, err := _IEigenPodManager.contract.WatchLogs(opts, "BeaconOracleUpdated", newOracleAddressRule) + 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(IEigenPodManagerBeaconOracleUpdated) + if err := _IEigenPodManager.contract.UnpackLog(event, "BeaconOracleUpdated", 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 +} + +// ParseBeaconOracleUpdated is a log parse operation binding the contract event 0x08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f6. +// +// Solidity: event BeaconOracleUpdated(address indexed newOracleAddress) +func (_IEigenPodManager *IEigenPodManagerFilterer) ParseBeaconOracleUpdated(log types.Log) (*IEigenPodManagerBeaconOracleUpdated, error) { + event := new(IEigenPodManagerBeaconOracleUpdated) + if err := _IEigenPodManager.contract.UnpackLog(event, "BeaconOracleUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodManagerDenebForkTimestampUpdatedIterator is returned from FilterDenebForkTimestampUpdated and is used to iterate over the raw logs and unpacked data for DenebForkTimestampUpdated events raised by the IEigenPodManager contract. +type IEigenPodManagerDenebForkTimestampUpdatedIterator struct { + Event *IEigenPodManagerDenebForkTimestampUpdated // 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 *IEigenPodManagerDenebForkTimestampUpdatedIterator) 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(IEigenPodManagerDenebForkTimestampUpdated) + 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(IEigenPodManagerDenebForkTimestampUpdated) + 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 *IEigenPodManagerDenebForkTimestampUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodManagerDenebForkTimestampUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodManagerDenebForkTimestampUpdated represents a DenebForkTimestampUpdated event raised by the IEigenPodManager contract. +type IEigenPodManagerDenebForkTimestampUpdated struct { + NewValue uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDenebForkTimestampUpdated is a free log retrieval operation binding the contract event 0x19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db. +// +// Solidity: event DenebForkTimestampUpdated(uint64 newValue) +func (_IEigenPodManager *IEigenPodManagerFilterer) FilterDenebForkTimestampUpdated(opts *bind.FilterOpts) (*IEigenPodManagerDenebForkTimestampUpdatedIterator, error) { + + logs, sub, err := _IEigenPodManager.contract.FilterLogs(opts, "DenebForkTimestampUpdated") + if err != nil { + return nil, err + } + return &IEigenPodManagerDenebForkTimestampUpdatedIterator{contract: _IEigenPodManager.contract, event: "DenebForkTimestampUpdated", logs: logs, sub: sub}, nil +} + +// WatchDenebForkTimestampUpdated is a free log subscription operation binding the contract event 0x19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db. +// +// Solidity: event DenebForkTimestampUpdated(uint64 newValue) +func (_IEigenPodManager *IEigenPodManagerFilterer) WatchDenebForkTimestampUpdated(opts *bind.WatchOpts, sink chan<- *IEigenPodManagerDenebForkTimestampUpdated) (event.Subscription, error) { + + logs, sub, err := _IEigenPodManager.contract.WatchLogs(opts, "DenebForkTimestampUpdated") + 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(IEigenPodManagerDenebForkTimestampUpdated) + if err := _IEigenPodManager.contract.UnpackLog(event, "DenebForkTimestampUpdated", 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 +} + +// ParseDenebForkTimestampUpdated is a log parse operation binding the contract event 0x19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db. +// +// Solidity: event DenebForkTimestampUpdated(uint64 newValue) +func (_IEigenPodManager *IEigenPodManagerFilterer) ParseDenebForkTimestampUpdated(log types.Log) (*IEigenPodManagerDenebForkTimestampUpdated, error) { + event := new(IEigenPodManagerDenebForkTimestampUpdated) + if err := _IEigenPodManager.contract.UnpackLog(event, "DenebForkTimestampUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodManagerPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the IEigenPodManager contract. +type IEigenPodManagerPausedIterator struct { + Event *IEigenPodManagerPaused // 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 *IEigenPodManagerPausedIterator) 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(IEigenPodManagerPaused) + 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(IEigenPodManagerPaused) + 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 *IEigenPodManagerPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodManagerPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodManagerPaused represents a Paused event raised by the IEigenPodManager contract. +type IEigenPodManagerPaused 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 (_IEigenPodManager *IEigenPodManagerFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*IEigenPodManagerPausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _IEigenPodManager.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &IEigenPodManagerPausedIterator{contract: _IEigenPodManager.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 (_IEigenPodManager *IEigenPodManagerFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *IEigenPodManagerPaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _IEigenPodManager.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(IEigenPodManagerPaused) + if err := _IEigenPodManager.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 (_IEigenPodManager *IEigenPodManagerFilterer) ParsePaused(log types.Log) (*IEigenPodManagerPaused, error) { + event := new(IEigenPodManagerPaused) + if err := _IEigenPodManager.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodManagerPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the IEigenPodManager contract. +type IEigenPodManagerPauserRegistrySetIterator struct { + Event *IEigenPodManagerPauserRegistrySet // 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 *IEigenPodManagerPauserRegistrySetIterator) 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(IEigenPodManagerPauserRegistrySet) + 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(IEigenPodManagerPauserRegistrySet) + 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 *IEigenPodManagerPauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodManagerPauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodManagerPauserRegistrySet represents a PauserRegistrySet event raised by the IEigenPodManager contract. +type IEigenPodManagerPauserRegistrySet 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 (_IEigenPodManager *IEigenPodManagerFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*IEigenPodManagerPauserRegistrySetIterator, error) { + + logs, sub, err := _IEigenPodManager.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &IEigenPodManagerPauserRegistrySetIterator{contract: _IEigenPodManager.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 (_IEigenPodManager *IEigenPodManagerFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *IEigenPodManagerPauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _IEigenPodManager.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(IEigenPodManagerPauserRegistrySet) + if err := _IEigenPodManager.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 (_IEigenPodManager *IEigenPodManagerFilterer) ParsePauserRegistrySet(log types.Log) (*IEigenPodManagerPauserRegistrySet, error) { + event := new(IEigenPodManagerPauserRegistrySet) + if err := _IEigenPodManager.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodManagerPodDeployedIterator is returned from FilterPodDeployed and is used to iterate over the raw logs and unpacked data for PodDeployed events raised by the IEigenPodManager contract. +type IEigenPodManagerPodDeployedIterator struct { + Event *IEigenPodManagerPodDeployed // 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 *IEigenPodManagerPodDeployedIterator) 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(IEigenPodManagerPodDeployed) + 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(IEigenPodManagerPodDeployed) + 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 *IEigenPodManagerPodDeployedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodManagerPodDeployedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodManagerPodDeployed represents a PodDeployed event raised by the IEigenPodManager contract. +type IEigenPodManagerPodDeployed struct { + EigenPod common.Address + PodOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPodDeployed is a free log retrieval operation binding the contract event 0x21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a. +// +// Solidity: event PodDeployed(address indexed eigenPod, address indexed podOwner) +func (_IEigenPodManager *IEigenPodManagerFilterer) FilterPodDeployed(opts *bind.FilterOpts, eigenPod []common.Address, podOwner []common.Address) (*IEigenPodManagerPodDeployedIterator, error) { + + var eigenPodRule []interface{} + for _, eigenPodItem := range eigenPod { + eigenPodRule = append(eigenPodRule, eigenPodItem) + } + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _IEigenPodManager.contract.FilterLogs(opts, "PodDeployed", eigenPodRule, podOwnerRule) + if err != nil { + return nil, err + } + return &IEigenPodManagerPodDeployedIterator{contract: _IEigenPodManager.contract, event: "PodDeployed", logs: logs, sub: sub}, nil +} + +// WatchPodDeployed is a free log subscription operation binding the contract event 0x21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a. +// +// Solidity: event PodDeployed(address indexed eigenPod, address indexed podOwner) +func (_IEigenPodManager *IEigenPodManagerFilterer) WatchPodDeployed(opts *bind.WatchOpts, sink chan<- *IEigenPodManagerPodDeployed, eigenPod []common.Address, podOwner []common.Address) (event.Subscription, error) { + + var eigenPodRule []interface{} + for _, eigenPodItem := range eigenPod { + eigenPodRule = append(eigenPodRule, eigenPodItem) + } + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _IEigenPodManager.contract.WatchLogs(opts, "PodDeployed", eigenPodRule, podOwnerRule) + 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(IEigenPodManagerPodDeployed) + if err := _IEigenPodManager.contract.UnpackLog(event, "PodDeployed", 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 +} + +// ParsePodDeployed is a log parse operation binding the contract event 0x21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a. +// +// Solidity: event PodDeployed(address indexed eigenPod, address indexed podOwner) +func (_IEigenPodManager *IEigenPodManagerFilterer) ParsePodDeployed(log types.Log) (*IEigenPodManagerPodDeployed, error) { + event := new(IEigenPodManagerPodDeployed) + if err := _IEigenPodManager.contract.UnpackLog(event, "PodDeployed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodManagerPodSharesUpdatedIterator is returned from FilterPodSharesUpdated and is used to iterate over the raw logs and unpacked data for PodSharesUpdated events raised by the IEigenPodManager contract. +type IEigenPodManagerPodSharesUpdatedIterator struct { + Event *IEigenPodManagerPodSharesUpdated // 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 *IEigenPodManagerPodSharesUpdatedIterator) 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(IEigenPodManagerPodSharesUpdated) + 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(IEigenPodManagerPodSharesUpdated) + 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 *IEigenPodManagerPodSharesUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodManagerPodSharesUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodManagerPodSharesUpdated represents a PodSharesUpdated event raised by the IEigenPodManager contract. +type IEigenPodManagerPodSharesUpdated struct { + PodOwner common.Address + SharesDelta *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPodSharesUpdated is a free log retrieval operation binding the contract event 0x4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193. +// +// Solidity: event PodSharesUpdated(address indexed podOwner, int256 sharesDelta) +func (_IEigenPodManager *IEigenPodManagerFilterer) FilterPodSharesUpdated(opts *bind.FilterOpts, podOwner []common.Address) (*IEigenPodManagerPodSharesUpdatedIterator, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _IEigenPodManager.contract.FilterLogs(opts, "PodSharesUpdated", podOwnerRule) + if err != nil { + return nil, err + } + return &IEigenPodManagerPodSharesUpdatedIterator{contract: _IEigenPodManager.contract, event: "PodSharesUpdated", logs: logs, sub: sub}, nil +} + +// WatchPodSharesUpdated is a free log subscription operation binding the contract event 0x4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193. +// +// Solidity: event PodSharesUpdated(address indexed podOwner, int256 sharesDelta) +func (_IEigenPodManager *IEigenPodManagerFilterer) WatchPodSharesUpdated(opts *bind.WatchOpts, sink chan<- *IEigenPodManagerPodSharesUpdated, podOwner []common.Address) (event.Subscription, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _IEigenPodManager.contract.WatchLogs(opts, "PodSharesUpdated", podOwnerRule) + 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(IEigenPodManagerPodSharesUpdated) + if err := _IEigenPodManager.contract.UnpackLog(event, "PodSharesUpdated", 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 +} + +// ParsePodSharesUpdated is a log parse operation binding the contract event 0x4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193. +// +// Solidity: event PodSharesUpdated(address indexed podOwner, int256 sharesDelta) +func (_IEigenPodManager *IEigenPodManagerFilterer) ParsePodSharesUpdated(log types.Log) (*IEigenPodManagerPodSharesUpdated, error) { + event := new(IEigenPodManagerPodSharesUpdated) + if err := _IEigenPodManager.contract.UnpackLog(event, "PodSharesUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEigenPodManagerUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the IEigenPodManager contract. +type IEigenPodManagerUnpausedIterator struct { + Event *IEigenPodManagerUnpaused // 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 *IEigenPodManagerUnpausedIterator) 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(IEigenPodManagerUnpaused) + 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(IEigenPodManagerUnpaused) + 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 *IEigenPodManagerUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEigenPodManagerUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEigenPodManagerUnpaused represents a Unpaused event raised by the IEigenPodManager contract. +type IEigenPodManagerUnpaused 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 (_IEigenPodManager *IEigenPodManagerFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*IEigenPodManagerUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _IEigenPodManager.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &IEigenPodManagerUnpausedIterator{contract: _IEigenPodManager.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 (_IEigenPodManager *IEigenPodManagerFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *IEigenPodManagerUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _IEigenPodManager.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(IEigenPodManagerUnpaused) + if err := _IEigenPodManager.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 (_IEigenPodManager *IEigenPodManagerFilterer) ParseUnpaused(log types.Log) (*IEigenPodManagerUnpaused, error) { + event := new(IEigenPodManagerUnpaused) + if err := _IEigenPodManager.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IEigenPodManager/tmp.abi b/pkg/bindings/IEigenPodManager/tmp.abi new file mode 100644 index 000000000..362b3591f --- /dev/null +++ b/pkg/bindings/IEigenPodManager/tmp.abi @@ -0,0 +1,620 @@ +[ + { + "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": "contract IStrategy" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "beaconChainOracle", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IBeaconChainOracle" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createPod", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "denebForkTimestamp", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eigenPodBeacon", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IBeacon" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ethPOS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IETHPOSDeposit" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBlockRootAtTimestamp", + "inputs": [ + { + "name": "timestamp", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPod", + "inputs": [ + { + "name": "podOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IEigenPod" + } + ], + "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": "contract IEigenPod" + } + ], + "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": "contract IPauserRegistry" + } + ], + "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": "setDenebForkTimestamp", + "inputs": [ + { + "name": "newDenebForkTimestamp", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPauserRegistry", + "inputs": [ + { + "name": "newPauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "slasher", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ISlasher" + } + ], + "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": "contract IStrategyManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "unpause", + "inputs": [ + { + "name": "newPausedStatus", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateBeaconChainOracle", + "inputs": [ + { + "name": "newBeaconChainOracle", + "type": "address", + "internalType": "contract IBeaconChainOracle" + } + ], + "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": "BeaconOracleUpdated", + "inputs": [ + { + "name": "newOracleAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DenebForkTimestampUpdated", + "inputs": [ + { + "name": "newValue", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "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": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "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 + } +] diff --git a/pkg/bindings/IEigenPodManager/tmp.bin b/pkg/bindings/IEigenPodManager/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IEigenPodManager/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/IPausable/binding.go b/pkg/bindings/IPausable/binding.go new file mode 100644 index 000000000..4cef4b112 --- /dev/null +++ b/pkg/bindings/IPausable/binding.go @@ -0,0 +1,783 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IPausable + +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 +) + +// 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}]", +} + +// IPausableABI is the input ABI used to generate the binding from. +// Deprecated: Use IPausableMetaData.ABI instead. +var IPausableABI = IPausableMetaData.ABI + +// IPausable is an auto generated Go binding around an Ethereum contract. +type IPausable struct { + IPausableCaller // Read-only binding to the contract + IPausableTransactor // Write-only binding to the contract + IPausableFilterer // Log filterer for contract events +} + +// IPausableCaller is an auto generated read-only Go binding around an Ethereum contract. +type IPausableCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IPausableTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IPausableTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IPausableFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IPausableFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IPausableSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IPausableSession struct { + Contract *IPausable // 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 +} + +// IPausableCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IPausableCallerSession struct { + Contract *IPausableCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IPausableTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IPausableTransactorSession struct { + Contract *IPausableTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IPausableRaw is an auto generated low-level Go binding around an Ethereum contract. +type IPausableRaw struct { + Contract *IPausable // Generic contract binding to access the raw methods on +} + +// IPausableCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IPausableCallerRaw struct { + Contract *IPausableCaller // Generic read-only contract binding to access the raw methods on +} + +// IPausableTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IPausableTransactorRaw struct { + Contract *IPausableTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIPausable creates a new instance of IPausable, bound to a specific deployed contract. +func NewIPausable(address common.Address, backend bind.ContractBackend) (*IPausable, error) { + contract, err := bindIPausable(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IPausable{IPausableCaller: IPausableCaller{contract: contract}, IPausableTransactor: IPausableTransactor{contract: contract}, IPausableFilterer: IPausableFilterer{contract: contract}}, nil +} + +// NewIPausableCaller creates a new read-only instance of IPausable, bound to a specific deployed contract. +func NewIPausableCaller(address common.Address, caller bind.ContractCaller) (*IPausableCaller, error) { + contract, err := bindIPausable(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IPausableCaller{contract: contract}, nil +} + +// NewIPausableTransactor creates a new write-only instance of IPausable, bound to a specific deployed contract. +func NewIPausableTransactor(address common.Address, transactor bind.ContractTransactor) (*IPausableTransactor, error) { + contract, err := bindIPausable(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IPausableTransactor{contract: contract}, nil +} + +// NewIPausableFilterer creates a new log filterer instance of IPausable, bound to a specific deployed contract. +func NewIPausableFilterer(address common.Address, filterer bind.ContractFilterer) (*IPausableFilterer, error) { + contract, err := bindIPausable(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IPausableFilterer{contract: contract}, nil +} + +// bindIPausable binds a generic wrapper to an already deployed contract. +func bindIPausable(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IPausableMetaData.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 (_IPausable *IPausableRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IPausable.Contract.IPausableCaller.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 (_IPausable *IPausableRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IPausable.Contract.IPausableTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IPausable *IPausableRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IPausable.Contract.IPausableTransactor.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 (_IPausable *IPausableCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IPausable.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 (_IPausable *IPausableTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IPausable.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IPausable *IPausableTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IPausable.Contract.contract.Transact(opts, method, params...) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_IPausable *IPausableCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _IPausable.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 (_IPausable *IPausableSession) Paused(index uint8) (bool, error) { + return _IPausable.Contract.Paused(&_IPausable.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_IPausable *IPausableCallerSession) Paused(index uint8) (bool, error) { + return _IPausable.Contract.Paused(&_IPausable.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_IPausable *IPausableCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IPausable.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 (_IPausable *IPausableSession) Paused0() (*big.Int, error) { + return _IPausable.Contract.Paused0(&_IPausable.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_IPausable *IPausableCallerSession) Paused0() (*big.Int, error) { + return _IPausable.Contract.Paused0(&_IPausable.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_IPausable *IPausableCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IPausable.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 (_IPausable *IPausableSession) PauserRegistry() (common.Address, error) { + return _IPausable.Contract.PauserRegistry(&_IPausable.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_IPausable *IPausableCallerSession) PauserRegistry() (common.Address, error) { + return _IPausable.Contract.PauserRegistry(&_IPausable.CallOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_IPausable *IPausableTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _IPausable.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_IPausable *IPausableSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _IPausable.Contract.Pause(&_IPausable.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_IPausable *IPausableTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _IPausable.Contract.Pause(&_IPausable.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_IPausable *IPausableTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IPausable.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_IPausable *IPausableSession) PauseAll() (*types.Transaction, error) { + return _IPausable.Contract.PauseAll(&_IPausable.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_IPausable *IPausableTransactorSession) PauseAll() (*types.Transaction, error) { + return _IPausable.Contract.PauseAll(&_IPausable.TransactOpts) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_IPausable *IPausableTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _IPausable.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_IPausable *IPausableSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _IPausable.Contract.SetPauserRegistry(&_IPausable.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_IPausable *IPausableTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _IPausable.Contract.SetPauserRegistry(&_IPausable.TransactOpts, newPauserRegistry) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_IPausable *IPausableTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _IPausable.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_IPausable *IPausableSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _IPausable.Contract.Unpause(&_IPausable.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_IPausable *IPausableTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _IPausable.Contract.Unpause(&_IPausable.TransactOpts, newPausedStatus) +} + +// IPausablePausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the IPausable contract. +type IPausablePausedIterator struct { + Event *IPausablePaused // 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 *IPausablePausedIterator) 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(IPausablePaused) + 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(IPausablePaused) + 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 *IPausablePausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IPausablePausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IPausablePaused represents a Paused event raised by the IPausable contract. +type IPausablePaused 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 (_IPausable *IPausableFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*IPausablePausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _IPausable.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &IPausablePausedIterator{contract: _IPausable.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 (_IPausable *IPausableFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *IPausablePaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _IPausable.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(IPausablePaused) + if err := _IPausable.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 (_IPausable *IPausableFilterer) ParsePaused(log types.Log) (*IPausablePaused, error) { + event := new(IPausablePaused) + if err := _IPausable.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IPausablePauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the IPausable contract. +type IPausablePauserRegistrySetIterator struct { + Event *IPausablePauserRegistrySet // 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 *IPausablePauserRegistrySetIterator) 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(IPausablePauserRegistrySet) + 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(IPausablePauserRegistrySet) + 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 *IPausablePauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IPausablePauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IPausablePauserRegistrySet represents a PauserRegistrySet event raised by the IPausable contract. +type IPausablePauserRegistrySet 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 (_IPausable *IPausableFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*IPausablePauserRegistrySetIterator, error) { + + logs, sub, err := _IPausable.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &IPausablePauserRegistrySetIterator{contract: _IPausable.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 (_IPausable *IPausableFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *IPausablePauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _IPausable.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(IPausablePauserRegistrySet) + if err := _IPausable.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 (_IPausable *IPausableFilterer) ParsePauserRegistrySet(log types.Log) (*IPausablePauserRegistrySet, error) { + event := new(IPausablePauserRegistrySet) + if err := _IPausable.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IPausableUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the IPausable contract. +type IPausableUnpausedIterator struct { + Event *IPausableUnpaused // 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 *IPausableUnpausedIterator) 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(IPausableUnpaused) + 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(IPausableUnpaused) + 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 *IPausableUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IPausableUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IPausableUnpaused represents a Unpaused event raised by the IPausable contract. +type IPausableUnpaused 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 (_IPausable *IPausableFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*IPausableUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _IPausable.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &IPausableUnpausedIterator{contract: _IPausable.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 (_IPausable *IPausableFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *IPausableUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _IPausable.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(IPausableUnpaused) + if err := _IPausable.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 (_IPausable *IPausableFilterer) ParseUnpaused(log types.Log) (*IPausableUnpaused, error) { + event := new(IPausableUnpaused) + if err := _IPausable.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IPausable/tmp.abi b/pkg/bindings/IPausable/tmp.abi new file mode 100644 index 000000000..cb2146604 --- /dev/null +++ b/pkg/bindings/IPausable/tmp.abi @@ -0,0 +1,150 @@ +[ + { + "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": "contract IPauserRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setPauserRegistry", + "inputs": [ + { + "name": "newPauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "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": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "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 + } +] diff --git a/pkg/bindings/IPausable/tmp.bin b/pkg/bindings/IPausable/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IPausable/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/IPauserRegistry/binding.go b/pkg/bindings/IPauserRegistry/binding.go new file mode 100644 index 000000000..59678ea9e --- /dev/null +++ b/pkg/bindings/IPauserRegistry/binding.go @@ -0,0 +1,513 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IPauserRegistry + +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 +) + +// 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}]", +} + +// IPauserRegistryABI is the input ABI used to generate the binding from. +// Deprecated: Use IPauserRegistryMetaData.ABI instead. +var IPauserRegistryABI = IPauserRegistryMetaData.ABI + +// IPauserRegistry is an auto generated Go binding around an Ethereum contract. +type IPauserRegistry struct { + IPauserRegistryCaller // Read-only binding to the contract + IPauserRegistryTransactor // Write-only binding to the contract + IPauserRegistryFilterer // Log filterer for contract events +} + +// IPauserRegistryCaller is an auto generated read-only Go binding around an Ethereum contract. +type IPauserRegistryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IPauserRegistryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IPauserRegistryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IPauserRegistryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IPauserRegistryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IPauserRegistrySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IPauserRegistrySession struct { + Contract *IPauserRegistry // 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 +} + +// IPauserRegistryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IPauserRegistryCallerSession struct { + Contract *IPauserRegistryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IPauserRegistryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IPauserRegistryTransactorSession struct { + Contract *IPauserRegistryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IPauserRegistryRaw is an auto generated low-level Go binding around an Ethereum contract. +type IPauserRegistryRaw struct { + Contract *IPauserRegistry // Generic contract binding to access the raw methods on +} + +// IPauserRegistryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IPauserRegistryCallerRaw struct { + Contract *IPauserRegistryCaller // Generic read-only contract binding to access the raw methods on +} + +// IPauserRegistryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IPauserRegistryTransactorRaw struct { + Contract *IPauserRegistryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIPauserRegistry creates a new instance of IPauserRegistry, bound to a specific deployed contract. +func NewIPauserRegistry(address common.Address, backend bind.ContractBackend) (*IPauserRegistry, error) { + contract, err := bindIPauserRegistry(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IPauserRegistry{IPauserRegistryCaller: IPauserRegistryCaller{contract: contract}, IPauserRegistryTransactor: IPauserRegistryTransactor{contract: contract}, IPauserRegistryFilterer: IPauserRegistryFilterer{contract: contract}}, nil +} + +// NewIPauserRegistryCaller creates a new read-only instance of IPauserRegistry, bound to a specific deployed contract. +func NewIPauserRegistryCaller(address common.Address, caller bind.ContractCaller) (*IPauserRegistryCaller, error) { + contract, err := bindIPauserRegistry(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IPauserRegistryCaller{contract: contract}, nil +} + +// NewIPauserRegistryTransactor creates a new write-only instance of IPauserRegistry, bound to a specific deployed contract. +func NewIPauserRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*IPauserRegistryTransactor, error) { + contract, err := bindIPauserRegistry(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IPauserRegistryTransactor{contract: contract}, nil +} + +// NewIPauserRegistryFilterer creates a new log filterer instance of IPauserRegistry, bound to a specific deployed contract. +func NewIPauserRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*IPauserRegistryFilterer, error) { + contract, err := bindIPauserRegistry(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IPauserRegistryFilterer{contract: contract}, nil +} + +// bindIPauserRegistry binds a generic wrapper to an already deployed contract. +func bindIPauserRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IPauserRegistryMetaData.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 (_IPauserRegistry *IPauserRegistryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IPauserRegistry.Contract.IPauserRegistryCaller.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 (_IPauserRegistry *IPauserRegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IPauserRegistry.Contract.IPauserRegistryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IPauserRegistry *IPauserRegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IPauserRegistry.Contract.IPauserRegistryTransactor.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 (_IPauserRegistry *IPauserRegistryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IPauserRegistry.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 (_IPauserRegistry *IPauserRegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IPauserRegistry.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IPauserRegistry *IPauserRegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IPauserRegistry.Contract.contract.Transact(opts, method, params...) +} + +// IsPauser is a free data retrieval call binding the contract method 0x46fbf68e. +// +// Solidity: function isPauser(address pauser) view returns(bool) +func (_IPauserRegistry *IPauserRegistryCaller) IsPauser(opts *bind.CallOpts, pauser common.Address) (bool, error) { + var out []interface{} + err := _IPauserRegistry.contract.Call(opts, &out, "isPauser", pauser) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsPauser is a free data retrieval call binding the contract method 0x46fbf68e. +// +// Solidity: function isPauser(address pauser) view returns(bool) +func (_IPauserRegistry *IPauserRegistrySession) IsPauser(pauser common.Address) (bool, error) { + return _IPauserRegistry.Contract.IsPauser(&_IPauserRegistry.CallOpts, pauser) +} + +// IsPauser is a free data retrieval call binding the contract method 0x46fbf68e. +// +// Solidity: function isPauser(address pauser) view returns(bool) +func (_IPauserRegistry *IPauserRegistryCallerSession) IsPauser(pauser common.Address) (bool, error) { + return _IPauserRegistry.Contract.IsPauser(&_IPauserRegistry.CallOpts, pauser) +} + +// Unpauser is a free data retrieval call binding the contract method 0xeab66d7a. +// +// Solidity: function unpauser() view returns(address) +func (_IPauserRegistry *IPauserRegistryCaller) Unpauser(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IPauserRegistry.contract.Call(opts, &out, "unpauser") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Unpauser is a free data retrieval call binding the contract method 0xeab66d7a. +// +// Solidity: function unpauser() view returns(address) +func (_IPauserRegistry *IPauserRegistrySession) Unpauser() (common.Address, error) { + return _IPauserRegistry.Contract.Unpauser(&_IPauserRegistry.CallOpts) +} + +// Unpauser is a free data retrieval call binding the contract method 0xeab66d7a. +// +// Solidity: function unpauser() view returns(address) +func (_IPauserRegistry *IPauserRegistryCallerSession) Unpauser() (common.Address, error) { + return _IPauserRegistry.Contract.Unpauser(&_IPauserRegistry.CallOpts) +} + +// IPauserRegistryPauserStatusChangedIterator is returned from FilterPauserStatusChanged and is used to iterate over the raw logs and unpacked data for PauserStatusChanged events raised by the IPauserRegistry contract. +type IPauserRegistryPauserStatusChangedIterator struct { + Event *IPauserRegistryPauserStatusChanged // 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 *IPauserRegistryPauserStatusChangedIterator) 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(IPauserRegistryPauserStatusChanged) + 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(IPauserRegistryPauserStatusChanged) + 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 *IPauserRegistryPauserStatusChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IPauserRegistryPauserStatusChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IPauserRegistryPauserStatusChanged represents a PauserStatusChanged event raised by the IPauserRegistry contract. +type IPauserRegistryPauserStatusChanged struct { + Pauser common.Address + CanPause bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPauserStatusChanged is a free log retrieval operation binding the contract event 0x65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152. +// +// Solidity: event PauserStatusChanged(address pauser, bool canPause) +func (_IPauserRegistry *IPauserRegistryFilterer) FilterPauserStatusChanged(opts *bind.FilterOpts) (*IPauserRegistryPauserStatusChangedIterator, error) { + + logs, sub, err := _IPauserRegistry.contract.FilterLogs(opts, "PauserStatusChanged") + if err != nil { + return nil, err + } + return &IPauserRegistryPauserStatusChangedIterator{contract: _IPauserRegistry.contract, event: "PauserStatusChanged", logs: logs, sub: sub}, nil +} + +// WatchPauserStatusChanged is a free log subscription operation binding the contract event 0x65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152. +// +// Solidity: event PauserStatusChanged(address pauser, bool canPause) +func (_IPauserRegistry *IPauserRegistryFilterer) WatchPauserStatusChanged(opts *bind.WatchOpts, sink chan<- *IPauserRegistryPauserStatusChanged) (event.Subscription, error) { + + logs, sub, err := _IPauserRegistry.contract.WatchLogs(opts, "PauserStatusChanged") + 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(IPauserRegistryPauserStatusChanged) + if err := _IPauserRegistry.contract.UnpackLog(event, "PauserStatusChanged", 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 +} + +// ParsePauserStatusChanged is a log parse operation binding the contract event 0x65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152. +// +// Solidity: event PauserStatusChanged(address pauser, bool canPause) +func (_IPauserRegistry *IPauserRegistryFilterer) ParsePauserStatusChanged(log types.Log) (*IPauserRegistryPauserStatusChanged, error) { + event := new(IPauserRegistryPauserStatusChanged) + if err := _IPauserRegistry.contract.UnpackLog(event, "PauserStatusChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IPauserRegistryUnpauserChangedIterator is returned from FilterUnpauserChanged and is used to iterate over the raw logs and unpacked data for UnpauserChanged events raised by the IPauserRegistry contract. +type IPauserRegistryUnpauserChangedIterator struct { + Event *IPauserRegistryUnpauserChanged // 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 *IPauserRegistryUnpauserChangedIterator) 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(IPauserRegistryUnpauserChanged) + 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(IPauserRegistryUnpauserChanged) + 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 *IPauserRegistryUnpauserChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IPauserRegistryUnpauserChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IPauserRegistryUnpauserChanged represents a UnpauserChanged event raised by the IPauserRegistry contract. +type IPauserRegistryUnpauserChanged struct { + PreviousUnpauser common.Address + NewUnpauser common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpauserChanged is a free log retrieval operation binding the contract event 0x06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892. +// +// Solidity: event UnpauserChanged(address previousUnpauser, address newUnpauser) +func (_IPauserRegistry *IPauserRegistryFilterer) FilterUnpauserChanged(opts *bind.FilterOpts) (*IPauserRegistryUnpauserChangedIterator, error) { + + logs, sub, err := _IPauserRegistry.contract.FilterLogs(opts, "UnpauserChanged") + if err != nil { + return nil, err + } + return &IPauserRegistryUnpauserChangedIterator{contract: _IPauserRegistry.contract, event: "UnpauserChanged", logs: logs, sub: sub}, nil +} + +// WatchUnpauserChanged is a free log subscription operation binding the contract event 0x06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892. +// +// Solidity: event UnpauserChanged(address previousUnpauser, address newUnpauser) +func (_IPauserRegistry *IPauserRegistryFilterer) WatchUnpauserChanged(opts *bind.WatchOpts, sink chan<- *IPauserRegistryUnpauserChanged) (event.Subscription, error) { + + logs, sub, err := _IPauserRegistry.contract.WatchLogs(opts, "UnpauserChanged") + 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(IPauserRegistryUnpauserChanged) + if err := _IPauserRegistry.contract.UnpackLog(event, "UnpauserChanged", 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 +} + +// ParseUnpauserChanged is a log parse operation binding the contract event 0x06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892. +// +// Solidity: event UnpauserChanged(address previousUnpauser, address newUnpauser) +func (_IPauserRegistry *IPauserRegistryFilterer) ParseUnpauserChanged(log types.Log) (*IPauserRegistryUnpauserChanged, error) { + event := new(IPauserRegistryUnpauserChanged) + if err := _IPauserRegistry.contract.UnpackLog(event, "UnpauserChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IPauserRegistry/tmp.abi b/pkg/bindings/IPauserRegistry/tmp.abi new file mode 100644 index 000000000..9a689d12e --- /dev/null +++ b/pkg/bindings/IPauserRegistry/tmp.abi @@ -0,0 +1,72 @@ +[ + { + "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 + } +] diff --git a/pkg/bindings/IPauserRegistry/tmp.bin b/pkg/bindings/IPauserRegistry/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IPauserRegistry/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/ISignatureUtils/binding.go b/pkg/bindings/ISignatureUtils/binding.go new file mode 100644 index 000000000..b462b4e5f --- /dev/null +++ b/pkg/bindings/ISignatureUtils/binding.go @@ -0,0 +1,181 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ISignatureUtils + +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 +) + +// ISignatureUtilsMetaData contains all meta data concerning the ISignatureUtils contract. +var ISignatureUtilsMetaData = &bind.MetaData{ + ABI: "[]", +} + +// ISignatureUtilsABI is the input ABI used to generate the binding from. +// Deprecated: Use ISignatureUtilsMetaData.ABI instead. +var ISignatureUtilsABI = ISignatureUtilsMetaData.ABI + +// ISignatureUtils is an auto generated Go binding around an Ethereum contract. +type ISignatureUtils struct { + ISignatureUtilsCaller // Read-only binding to the contract + ISignatureUtilsTransactor // Write-only binding to the contract + ISignatureUtilsFilterer // Log filterer for contract events +} + +// ISignatureUtilsCaller is an auto generated read-only Go binding around an Ethereum contract. +type ISignatureUtilsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ISignatureUtilsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ISignatureUtilsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ISignatureUtilsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ISignatureUtilsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ISignatureUtilsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ISignatureUtilsSession struct { + Contract *ISignatureUtils // 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 +} + +// ISignatureUtilsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ISignatureUtilsCallerSession struct { + Contract *ISignatureUtilsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ISignatureUtilsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ISignatureUtilsTransactorSession struct { + Contract *ISignatureUtilsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ISignatureUtilsRaw is an auto generated low-level Go binding around an Ethereum contract. +type ISignatureUtilsRaw struct { + Contract *ISignatureUtils // Generic contract binding to access the raw methods on +} + +// ISignatureUtilsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ISignatureUtilsCallerRaw struct { + Contract *ISignatureUtilsCaller // Generic read-only contract binding to access the raw methods on +} + +// ISignatureUtilsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ISignatureUtilsTransactorRaw struct { + Contract *ISignatureUtilsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewISignatureUtils creates a new instance of ISignatureUtils, bound to a specific deployed contract. +func NewISignatureUtils(address common.Address, backend bind.ContractBackend) (*ISignatureUtils, error) { + contract, err := bindISignatureUtils(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ISignatureUtils{ISignatureUtilsCaller: ISignatureUtilsCaller{contract: contract}, ISignatureUtilsTransactor: ISignatureUtilsTransactor{contract: contract}, ISignatureUtilsFilterer: ISignatureUtilsFilterer{contract: contract}}, nil +} + +// NewISignatureUtilsCaller creates a new read-only instance of ISignatureUtils, bound to a specific deployed contract. +func NewISignatureUtilsCaller(address common.Address, caller bind.ContractCaller) (*ISignatureUtilsCaller, error) { + contract, err := bindISignatureUtils(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ISignatureUtilsCaller{contract: contract}, nil +} + +// NewISignatureUtilsTransactor creates a new write-only instance of ISignatureUtils, bound to a specific deployed contract. +func NewISignatureUtilsTransactor(address common.Address, transactor bind.ContractTransactor) (*ISignatureUtilsTransactor, error) { + contract, err := bindISignatureUtils(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ISignatureUtilsTransactor{contract: contract}, nil +} + +// NewISignatureUtilsFilterer creates a new log filterer instance of ISignatureUtils, bound to a specific deployed contract. +func NewISignatureUtilsFilterer(address common.Address, filterer bind.ContractFilterer) (*ISignatureUtilsFilterer, error) { + contract, err := bindISignatureUtils(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ISignatureUtilsFilterer{contract: contract}, nil +} + +// bindISignatureUtils binds a generic wrapper to an already deployed contract. +func bindISignatureUtils(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ISignatureUtilsMetaData.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 (_ISignatureUtils *ISignatureUtilsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ISignatureUtils.Contract.ISignatureUtilsCaller.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 (_ISignatureUtils *ISignatureUtilsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ISignatureUtils.Contract.ISignatureUtilsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ISignatureUtils *ISignatureUtilsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ISignatureUtils.Contract.ISignatureUtilsTransactor.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 (_ISignatureUtils *ISignatureUtilsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ISignatureUtils.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 (_ISignatureUtils *ISignatureUtilsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ISignatureUtils.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ISignatureUtils *ISignatureUtilsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ISignatureUtils.Contract.contract.Transact(opts, method, params...) +} diff --git a/pkg/bindings/ISignatureUtils/tmp.abi b/pkg/bindings/ISignatureUtils/tmp.abi new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/pkg/bindings/ISignatureUtils/tmp.abi @@ -0,0 +1 @@ +[] diff --git a/pkg/bindings/ISignatureUtils/tmp.bin b/pkg/bindings/ISignatureUtils/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/ISignatureUtils/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/ISlasher/binding.go b/pkg/bindings/ISlasher/binding.go new file mode 100644 index 000000000..70f600220 --- /dev/null +++ b/pkg/bindings/ISlasher/binding.go @@ -0,0 +1,1480 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ISlasher + +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 +) + +// ISlasherMiddlewareTimes is an auto generated low-level Go binding around an user-defined struct. +type ISlasherMiddlewareTimes struct { + StalestUpdateBlock uint32 + LatestServeUntilBlock uint32 +} + +// ISlasherMetaData contains all meta data concerning the ISlasher contract. +var ISlasherMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"canSlash\",\"inputs\":[{\"name\":\"toBeSlashed\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"slashingContract\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"canWithdraw\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"contractCanSlashOperatorUntilBlock\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"serviceContract\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"freezeOperator\",\"inputs\":[{\"name\":\"toBeFrozen\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCorrectValueForInsertAfter\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"updateBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMiddlewareTimesIndexServeUntilBlock\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMiddlewareTimesIndexStalestUpdateBlock\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isFrozen\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestUpdateBlock\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"serviceContract\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"middlewareTimesLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorToMiddlewareTimes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"arrayIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structISlasher.MiddlewareTimes\",\"components\":[{\"name\":\"stalestUpdateBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"latestServeUntilBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorWhitelistedContractsLinkedListEntry\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"node\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorWhitelistedContractsLinkedListSize\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optIntoSlashing\",\"inputs\":[{\"name\":\"contractAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"recordFirstStakeUpdate\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"serveUntilBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"recordLastStakeUpdateAndRevokeSlashingAbility\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"serveUntilBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"recordStakeUpdate\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"updateBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"serveUntilBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"insertAfter\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resetFrozenStatus\",\"inputs\":[{\"name\":\"frozenAddresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FrozenStatusReset\",\"inputs\":[{\"name\":\"previouslySlashedAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MiddlewareTimesAdded\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"stalestUpdateBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"latestServeUntilBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorFrozen\",\"inputs\":[{\"name\":\"slashedOperator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"slashingContract\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OptedIntoSlashing\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"contractAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlashingAbilityRevoked\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"contractAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"contractCanSlashOperatorUntilBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false}]", +} + +// ISlasherABI is the input ABI used to generate the binding from. +// Deprecated: Use ISlasherMetaData.ABI instead. +var ISlasherABI = ISlasherMetaData.ABI + +// ISlasher is an auto generated Go binding around an Ethereum contract. +type ISlasher struct { + ISlasherCaller // Read-only binding to the contract + ISlasherTransactor // Write-only binding to the contract + ISlasherFilterer // Log filterer for contract events +} + +// ISlasherCaller is an auto generated read-only Go binding around an Ethereum contract. +type ISlasherCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ISlasherTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ISlasherTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ISlasherFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ISlasherFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ISlasherSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ISlasherSession struct { + Contract *ISlasher // 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 +} + +// ISlasherCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ISlasherCallerSession struct { + Contract *ISlasherCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ISlasherTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ISlasherTransactorSession struct { + Contract *ISlasherTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ISlasherRaw is an auto generated low-level Go binding around an Ethereum contract. +type ISlasherRaw struct { + Contract *ISlasher // Generic contract binding to access the raw methods on +} + +// ISlasherCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ISlasherCallerRaw struct { + Contract *ISlasherCaller // Generic read-only contract binding to access the raw methods on +} + +// ISlasherTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ISlasherTransactorRaw struct { + Contract *ISlasherTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewISlasher creates a new instance of ISlasher, bound to a specific deployed contract. +func NewISlasher(address common.Address, backend bind.ContractBackend) (*ISlasher, error) { + contract, err := bindISlasher(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ISlasher{ISlasherCaller: ISlasherCaller{contract: contract}, ISlasherTransactor: ISlasherTransactor{contract: contract}, ISlasherFilterer: ISlasherFilterer{contract: contract}}, nil +} + +// NewISlasherCaller creates a new read-only instance of ISlasher, bound to a specific deployed contract. +func NewISlasherCaller(address common.Address, caller bind.ContractCaller) (*ISlasherCaller, error) { + contract, err := bindISlasher(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ISlasherCaller{contract: contract}, nil +} + +// NewISlasherTransactor creates a new write-only instance of ISlasher, bound to a specific deployed contract. +func NewISlasherTransactor(address common.Address, transactor bind.ContractTransactor) (*ISlasherTransactor, error) { + contract, err := bindISlasher(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ISlasherTransactor{contract: contract}, nil +} + +// NewISlasherFilterer creates a new log filterer instance of ISlasher, bound to a specific deployed contract. +func NewISlasherFilterer(address common.Address, filterer bind.ContractFilterer) (*ISlasherFilterer, error) { + contract, err := bindISlasher(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ISlasherFilterer{contract: contract}, nil +} + +// bindISlasher binds a generic wrapper to an already deployed contract. +func bindISlasher(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ISlasherMetaData.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 (_ISlasher *ISlasherRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ISlasher.Contract.ISlasherCaller.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 (_ISlasher *ISlasherRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ISlasher.Contract.ISlasherTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ISlasher *ISlasherRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ISlasher.Contract.ISlasherTransactor.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 (_ISlasher *ISlasherCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ISlasher.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 (_ISlasher *ISlasherTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ISlasher.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ISlasher *ISlasherTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ISlasher.Contract.contract.Transact(opts, method, params...) +} + +// CanSlash is a free data retrieval call binding the contract method 0xd98128c0. +// +// Solidity: function canSlash(address toBeSlashed, address slashingContract) view returns(bool) +func (_ISlasher *ISlasherCaller) CanSlash(opts *bind.CallOpts, toBeSlashed common.Address, slashingContract common.Address) (bool, error) { + var out []interface{} + err := _ISlasher.contract.Call(opts, &out, "canSlash", toBeSlashed, slashingContract) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// CanSlash is a free data retrieval call binding the contract method 0xd98128c0. +// +// Solidity: function canSlash(address toBeSlashed, address slashingContract) view returns(bool) +func (_ISlasher *ISlasherSession) CanSlash(toBeSlashed common.Address, slashingContract common.Address) (bool, error) { + return _ISlasher.Contract.CanSlash(&_ISlasher.CallOpts, toBeSlashed, slashingContract) +} + +// CanSlash is a free data retrieval call binding the contract method 0xd98128c0. +// +// Solidity: function canSlash(address toBeSlashed, address slashingContract) view returns(bool) +func (_ISlasher *ISlasherCallerSession) CanSlash(toBeSlashed common.Address, slashingContract common.Address) (bool, error) { + return _ISlasher.Contract.CanSlash(&_ISlasher.CallOpts, toBeSlashed, slashingContract) +} + +// ContractCanSlashOperatorUntilBlock is a free data retrieval call binding the contract method 0x6f0c2f74. +// +// Solidity: function contractCanSlashOperatorUntilBlock(address operator, address serviceContract) view returns(uint32) +func (_ISlasher *ISlasherCaller) ContractCanSlashOperatorUntilBlock(opts *bind.CallOpts, operator common.Address, serviceContract common.Address) (uint32, error) { + var out []interface{} + err := _ISlasher.contract.Call(opts, &out, "contractCanSlashOperatorUntilBlock", operator, serviceContract) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// ContractCanSlashOperatorUntilBlock is a free data retrieval call binding the contract method 0x6f0c2f74. +// +// Solidity: function contractCanSlashOperatorUntilBlock(address operator, address serviceContract) view returns(uint32) +func (_ISlasher *ISlasherSession) ContractCanSlashOperatorUntilBlock(operator common.Address, serviceContract common.Address) (uint32, error) { + return _ISlasher.Contract.ContractCanSlashOperatorUntilBlock(&_ISlasher.CallOpts, operator, serviceContract) +} + +// ContractCanSlashOperatorUntilBlock is a free data retrieval call binding the contract method 0x6f0c2f74. +// +// Solidity: function contractCanSlashOperatorUntilBlock(address operator, address serviceContract) view returns(uint32) +func (_ISlasher *ISlasherCallerSession) ContractCanSlashOperatorUntilBlock(operator common.Address, serviceContract common.Address) (uint32, error) { + return _ISlasher.Contract.ContractCanSlashOperatorUntilBlock(&_ISlasher.CallOpts, operator, serviceContract) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_ISlasher *ISlasherCaller) Delegation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ISlasher.contract.Call(opts, &out, "delegation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_ISlasher *ISlasherSession) Delegation() (common.Address, error) { + return _ISlasher.Contract.Delegation(&_ISlasher.CallOpts) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_ISlasher *ISlasherCallerSession) Delegation() (common.Address, error) { + return _ISlasher.Contract.Delegation(&_ISlasher.CallOpts) +} + +// GetCorrectValueForInsertAfter is a free data retrieval call binding the contract method 0x723e59c7. +// +// Solidity: function getCorrectValueForInsertAfter(address operator, uint32 updateBlock) view returns(uint256) +func (_ISlasher *ISlasherCaller) GetCorrectValueForInsertAfter(opts *bind.CallOpts, operator common.Address, updateBlock uint32) (*big.Int, error) { + var out []interface{} + err := _ISlasher.contract.Call(opts, &out, "getCorrectValueForInsertAfter", operator, updateBlock) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetCorrectValueForInsertAfter is a free data retrieval call binding the contract method 0x723e59c7. +// +// Solidity: function getCorrectValueForInsertAfter(address operator, uint32 updateBlock) view returns(uint256) +func (_ISlasher *ISlasherSession) GetCorrectValueForInsertAfter(operator common.Address, updateBlock uint32) (*big.Int, error) { + return _ISlasher.Contract.GetCorrectValueForInsertAfter(&_ISlasher.CallOpts, operator, updateBlock) +} + +// GetCorrectValueForInsertAfter is a free data retrieval call binding the contract method 0x723e59c7. +// +// Solidity: function getCorrectValueForInsertAfter(address operator, uint32 updateBlock) view returns(uint256) +func (_ISlasher *ISlasherCallerSession) GetCorrectValueForInsertAfter(operator common.Address, updateBlock uint32) (*big.Int, error) { + return _ISlasher.Contract.GetCorrectValueForInsertAfter(&_ISlasher.CallOpts, operator, updateBlock) +} + +// GetMiddlewareTimesIndexServeUntilBlock is a free data retrieval call binding the contract method 0x7259a45c. +// +// Solidity: function getMiddlewareTimesIndexServeUntilBlock(address operator, uint32 index) view returns(uint32) +func (_ISlasher *ISlasherCaller) GetMiddlewareTimesIndexServeUntilBlock(opts *bind.CallOpts, operator common.Address, index uint32) (uint32, error) { + var out []interface{} + err := _ISlasher.contract.Call(opts, &out, "getMiddlewareTimesIndexServeUntilBlock", operator, index) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GetMiddlewareTimesIndexServeUntilBlock is a free data retrieval call binding the contract method 0x7259a45c. +// +// Solidity: function getMiddlewareTimesIndexServeUntilBlock(address operator, uint32 index) view returns(uint32) +func (_ISlasher *ISlasherSession) GetMiddlewareTimesIndexServeUntilBlock(operator common.Address, index uint32) (uint32, error) { + return _ISlasher.Contract.GetMiddlewareTimesIndexServeUntilBlock(&_ISlasher.CallOpts, operator, index) +} + +// GetMiddlewareTimesIndexServeUntilBlock is a free data retrieval call binding the contract method 0x7259a45c. +// +// Solidity: function getMiddlewareTimesIndexServeUntilBlock(address operator, uint32 index) view returns(uint32) +func (_ISlasher *ISlasherCallerSession) GetMiddlewareTimesIndexServeUntilBlock(operator common.Address, index uint32) (uint32, error) { + return _ISlasher.Contract.GetMiddlewareTimesIndexServeUntilBlock(&_ISlasher.CallOpts, operator, index) +} + +// GetMiddlewareTimesIndexStalestUpdateBlock is a free data retrieval call binding the contract method 0x1874e5ae. +// +// Solidity: function getMiddlewareTimesIndexStalestUpdateBlock(address operator, uint32 index) view returns(uint32) +func (_ISlasher *ISlasherCaller) GetMiddlewareTimesIndexStalestUpdateBlock(opts *bind.CallOpts, operator common.Address, index uint32) (uint32, error) { + var out []interface{} + err := _ISlasher.contract.Call(opts, &out, "getMiddlewareTimesIndexStalestUpdateBlock", operator, index) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GetMiddlewareTimesIndexStalestUpdateBlock is a free data retrieval call binding the contract method 0x1874e5ae. +// +// Solidity: function getMiddlewareTimesIndexStalestUpdateBlock(address operator, uint32 index) view returns(uint32) +func (_ISlasher *ISlasherSession) GetMiddlewareTimesIndexStalestUpdateBlock(operator common.Address, index uint32) (uint32, error) { + return _ISlasher.Contract.GetMiddlewareTimesIndexStalestUpdateBlock(&_ISlasher.CallOpts, operator, index) +} + +// GetMiddlewareTimesIndexStalestUpdateBlock is a free data retrieval call binding the contract method 0x1874e5ae. +// +// Solidity: function getMiddlewareTimesIndexStalestUpdateBlock(address operator, uint32 index) view returns(uint32) +func (_ISlasher *ISlasherCallerSession) GetMiddlewareTimesIndexStalestUpdateBlock(operator common.Address, index uint32) (uint32, error) { + return _ISlasher.Contract.GetMiddlewareTimesIndexStalestUpdateBlock(&_ISlasher.CallOpts, operator, index) +} + +// IsFrozen is a free data retrieval call binding the contract method 0xe5839836. +// +// Solidity: function isFrozen(address staker) view returns(bool) +func (_ISlasher *ISlasherCaller) IsFrozen(opts *bind.CallOpts, staker common.Address) (bool, error) { + var out []interface{} + err := _ISlasher.contract.Call(opts, &out, "isFrozen", staker) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsFrozen is a free data retrieval call binding the contract method 0xe5839836. +// +// Solidity: function isFrozen(address staker) view returns(bool) +func (_ISlasher *ISlasherSession) IsFrozen(staker common.Address) (bool, error) { + return _ISlasher.Contract.IsFrozen(&_ISlasher.CallOpts, staker) +} + +// IsFrozen is a free data retrieval call binding the contract method 0xe5839836. +// +// Solidity: function isFrozen(address staker) view returns(bool) +func (_ISlasher *ISlasherCallerSession) IsFrozen(staker common.Address) (bool, error) { + return _ISlasher.Contract.IsFrozen(&_ISlasher.CallOpts, staker) +} + +// LatestUpdateBlock is a free data retrieval call binding the contract method 0xda16e29b. +// +// Solidity: function latestUpdateBlock(address operator, address serviceContract) view returns(uint32) +func (_ISlasher *ISlasherCaller) LatestUpdateBlock(opts *bind.CallOpts, operator common.Address, serviceContract common.Address) (uint32, error) { + var out []interface{} + err := _ISlasher.contract.Call(opts, &out, "latestUpdateBlock", operator, serviceContract) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// LatestUpdateBlock is a free data retrieval call binding the contract method 0xda16e29b. +// +// Solidity: function latestUpdateBlock(address operator, address serviceContract) view returns(uint32) +func (_ISlasher *ISlasherSession) LatestUpdateBlock(operator common.Address, serviceContract common.Address) (uint32, error) { + return _ISlasher.Contract.LatestUpdateBlock(&_ISlasher.CallOpts, operator, serviceContract) +} + +// LatestUpdateBlock is a free data retrieval call binding the contract method 0xda16e29b. +// +// Solidity: function latestUpdateBlock(address operator, address serviceContract) view returns(uint32) +func (_ISlasher *ISlasherCallerSession) LatestUpdateBlock(operator common.Address, serviceContract common.Address) (uint32, error) { + return _ISlasher.Contract.LatestUpdateBlock(&_ISlasher.CallOpts, operator, serviceContract) +} + +// MiddlewareTimesLength is a free data retrieval call binding the contract method 0xa49db732. +// +// Solidity: function middlewareTimesLength(address operator) view returns(uint256) +func (_ISlasher *ISlasherCaller) MiddlewareTimesLength(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { + var out []interface{} + err := _ISlasher.contract.Call(opts, &out, "middlewareTimesLength", operator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MiddlewareTimesLength is a free data retrieval call binding the contract method 0xa49db732. +// +// Solidity: function middlewareTimesLength(address operator) view returns(uint256) +func (_ISlasher *ISlasherSession) MiddlewareTimesLength(operator common.Address) (*big.Int, error) { + return _ISlasher.Contract.MiddlewareTimesLength(&_ISlasher.CallOpts, operator) +} + +// MiddlewareTimesLength is a free data retrieval call binding the contract method 0xa49db732. +// +// Solidity: function middlewareTimesLength(address operator) view returns(uint256) +func (_ISlasher *ISlasherCallerSession) MiddlewareTimesLength(operator common.Address) (*big.Int, error) { + return _ISlasher.Contract.MiddlewareTimesLength(&_ISlasher.CallOpts, operator) +} + +// OperatorToMiddlewareTimes is a free data retrieval call binding the contract method 0x282670fc. +// +// Solidity: function operatorToMiddlewareTimes(address operator, uint256 arrayIndex) view returns((uint32,uint32)) +func (_ISlasher *ISlasherCaller) OperatorToMiddlewareTimes(opts *bind.CallOpts, operator common.Address, arrayIndex *big.Int) (ISlasherMiddlewareTimes, error) { + var out []interface{} + err := _ISlasher.contract.Call(opts, &out, "operatorToMiddlewareTimes", operator, arrayIndex) + + if err != nil { + return *new(ISlasherMiddlewareTimes), err + } + + out0 := *abi.ConvertType(out[0], new(ISlasherMiddlewareTimes)).(*ISlasherMiddlewareTimes) + + return out0, err + +} + +// OperatorToMiddlewareTimes is a free data retrieval call binding the contract method 0x282670fc. +// +// Solidity: function operatorToMiddlewareTimes(address operator, uint256 arrayIndex) view returns((uint32,uint32)) +func (_ISlasher *ISlasherSession) OperatorToMiddlewareTimes(operator common.Address, arrayIndex *big.Int) (ISlasherMiddlewareTimes, error) { + return _ISlasher.Contract.OperatorToMiddlewareTimes(&_ISlasher.CallOpts, operator, arrayIndex) +} + +// OperatorToMiddlewareTimes is a free data retrieval call binding the contract method 0x282670fc. +// +// Solidity: function operatorToMiddlewareTimes(address operator, uint256 arrayIndex) view returns((uint32,uint32)) +func (_ISlasher *ISlasherCallerSession) OperatorToMiddlewareTimes(operator common.Address, arrayIndex *big.Int) (ISlasherMiddlewareTimes, error) { + return _ISlasher.Contract.OperatorToMiddlewareTimes(&_ISlasher.CallOpts, operator, arrayIndex) +} + +// OperatorWhitelistedContractsLinkedListEntry is a free data retrieval call binding the contract method 0x855fcc4a. +// +// Solidity: function operatorWhitelistedContractsLinkedListEntry(address operator, address node) view returns(bool, uint256, uint256) +func (_ISlasher *ISlasherCaller) OperatorWhitelistedContractsLinkedListEntry(opts *bind.CallOpts, operator common.Address, node common.Address) (bool, *big.Int, *big.Int, error) { + var out []interface{} + err := _ISlasher.contract.Call(opts, &out, "operatorWhitelistedContractsLinkedListEntry", operator, node) + + if err != nil { + return *new(bool), *new(*big.Int), *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + out2 := *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + + return out0, out1, out2, err + +} + +// OperatorWhitelistedContractsLinkedListEntry is a free data retrieval call binding the contract method 0x855fcc4a. +// +// Solidity: function operatorWhitelistedContractsLinkedListEntry(address operator, address node) view returns(bool, uint256, uint256) +func (_ISlasher *ISlasherSession) OperatorWhitelistedContractsLinkedListEntry(operator common.Address, node common.Address) (bool, *big.Int, *big.Int, error) { + return _ISlasher.Contract.OperatorWhitelistedContractsLinkedListEntry(&_ISlasher.CallOpts, operator, node) +} + +// OperatorWhitelistedContractsLinkedListEntry is a free data retrieval call binding the contract method 0x855fcc4a. +// +// Solidity: function operatorWhitelistedContractsLinkedListEntry(address operator, address node) view returns(bool, uint256, uint256) +func (_ISlasher *ISlasherCallerSession) OperatorWhitelistedContractsLinkedListEntry(operator common.Address, node common.Address) (bool, *big.Int, *big.Int, error) { + return _ISlasher.Contract.OperatorWhitelistedContractsLinkedListEntry(&_ISlasher.CallOpts, operator, node) +} + +// OperatorWhitelistedContractsLinkedListSize is a free data retrieval call binding the contract method 0xe921d4fa. +// +// Solidity: function operatorWhitelistedContractsLinkedListSize(address operator) view returns(uint256) +func (_ISlasher *ISlasherCaller) OperatorWhitelistedContractsLinkedListSize(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { + var out []interface{} + err := _ISlasher.contract.Call(opts, &out, "operatorWhitelistedContractsLinkedListSize", operator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// OperatorWhitelistedContractsLinkedListSize is a free data retrieval call binding the contract method 0xe921d4fa. +// +// Solidity: function operatorWhitelistedContractsLinkedListSize(address operator) view returns(uint256) +func (_ISlasher *ISlasherSession) OperatorWhitelistedContractsLinkedListSize(operator common.Address) (*big.Int, error) { + return _ISlasher.Contract.OperatorWhitelistedContractsLinkedListSize(&_ISlasher.CallOpts, operator) +} + +// OperatorWhitelistedContractsLinkedListSize is a free data retrieval call binding the contract method 0xe921d4fa. +// +// Solidity: function operatorWhitelistedContractsLinkedListSize(address operator) view returns(uint256) +func (_ISlasher *ISlasherCallerSession) OperatorWhitelistedContractsLinkedListSize(operator common.Address) (*big.Int, error) { + return _ISlasher.Contract.OperatorWhitelistedContractsLinkedListSize(&_ISlasher.CallOpts, operator) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_ISlasher *ISlasherCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ISlasher.contract.Call(opts, &out, "strategyManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_ISlasher *ISlasherSession) StrategyManager() (common.Address, error) { + return _ISlasher.Contract.StrategyManager(&_ISlasher.CallOpts) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_ISlasher *ISlasherCallerSession) StrategyManager() (common.Address, error) { + return _ISlasher.Contract.StrategyManager(&_ISlasher.CallOpts) +} + +// CanWithdraw is a paid mutator transaction binding the contract method 0x8105e043. +// +// Solidity: function canWithdraw(address operator, uint32 withdrawalStartBlock, uint256 middlewareTimesIndex) returns(bool) +func (_ISlasher *ISlasherTransactor) CanWithdraw(opts *bind.TransactOpts, operator common.Address, withdrawalStartBlock uint32, middlewareTimesIndex *big.Int) (*types.Transaction, error) { + return _ISlasher.contract.Transact(opts, "canWithdraw", operator, withdrawalStartBlock, middlewareTimesIndex) +} + +// CanWithdraw is a paid mutator transaction binding the contract method 0x8105e043. +// +// Solidity: function canWithdraw(address operator, uint32 withdrawalStartBlock, uint256 middlewareTimesIndex) returns(bool) +func (_ISlasher *ISlasherSession) CanWithdraw(operator common.Address, withdrawalStartBlock uint32, middlewareTimesIndex *big.Int) (*types.Transaction, error) { + return _ISlasher.Contract.CanWithdraw(&_ISlasher.TransactOpts, operator, withdrawalStartBlock, middlewareTimesIndex) +} + +// CanWithdraw is a paid mutator transaction binding the contract method 0x8105e043. +// +// Solidity: function canWithdraw(address operator, uint32 withdrawalStartBlock, uint256 middlewareTimesIndex) returns(bool) +func (_ISlasher *ISlasherTransactorSession) CanWithdraw(operator common.Address, withdrawalStartBlock uint32, middlewareTimesIndex *big.Int) (*types.Transaction, error) { + return _ISlasher.Contract.CanWithdraw(&_ISlasher.TransactOpts, operator, withdrawalStartBlock, middlewareTimesIndex) +} + +// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. +// +// Solidity: function freezeOperator(address toBeFrozen) returns() +func (_ISlasher *ISlasherTransactor) FreezeOperator(opts *bind.TransactOpts, toBeFrozen common.Address) (*types.Transaction, error) { + return _ISlasher.contract.Transact(opts, "freezeOperator", toBeFrozen) +} + +// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. +// +// Solidity: function freezeOperator(address toBeFrozen) returns() +func (_ISlasher *ISlasherSession) FreezeOperator(toBeFrozen common.Address) (*types.Transaction, error) { + return _ISlasher.Contract.FreezeOperator(&_ISlasher.TransactOpts, toBeFrozen) +} + +// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. +// +// Solidity: function freezeOperator(address toBeFrozen) returns() +func (_ISlasher *ISlasherTransactorSession) FreezeOperator(toBeFrozen common.Address) (*types.Transaction, error) { + return _ISlasher.Contract.FreezeOperator(&_ISlasher.TransactOpts, toBeFrozen) +} + +// OptIntoSlashing is a paid mutator transaction binding the contract method 0xf73b7519. +// +// Solidity: function optIntoSlashing(address contractAddress) returns() +func (_ISlasher *ISlasherTransactor) OptIntoSlashing(opts *bind.TransactOpts, contractAddress common.Address) (*types.Transaction, error) { + return _ISlasher.contract.Transact(opts, "optIntoSlashing", contractAddress) +} + +// OptIntoSlashing is a paid mutator transaction binding the contract method 0xf73b7519. +// +// Solidity: function optIntoSlashing(address contractAddress) returns() +func (_ISlasher *ISlasherSession) OptIntoSlashing(contractAddress common.Address) (*types.Transaction, error) { + return _ISlasher.Contract.OptIntoSlashing(&_ISlasher.TransactOpts, contractAddress) +} + +// OptIntoSlashing is a paid mutator transaction binding the contract method 0xf73b7519. +// +// Solidity: function optIntoSlashing(address contractAddress) returns() +func (_ISlasher *ISlasherTransactorSession) OptIntoSlashing(contractAddress common.Address) (*types.Transaction, error) { + return _ISlasher.Contract.OptIntoSlashing(&_ISlasher.TransactOpts, contractAddress) +} + +// RecordFirstStakeUpdate is a paid mutator transaction binding the contract method 0x175d3205. +// +// Solidity: function recordFirstStakeUpdate(address operator, uint32 serveUntilBlock) returns() +func (_ISlasher *ISlasherTransactor) RecordFirstStakeUpdate(opts *bind.TransactOpts, operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { + return _ISlasher.contract.Transact(opts, "recordFirstStakeUpdate", operator, serveUntilBlock) +} + +// RecordFirstStakeUpdate is a paid mutator transaction binding the contract method 0x175d3205. +// +// Solidity: function recordFirstStakeUpdate(address operator, uint32 serveUntilBlock) returns() +func (_ISlasher *ISlasherSession) RecordFirstStakeUpdate(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { + return _ISlasher.Contract.RecordFirstStakeUpdate(&_ISlasher.TransactOpts, operator, serveUntilBlock) +} + +// RecordFirstStakeUpdate is a paid mutator transaction binding the contract method 0x175d3205. +// +// Solidity: function recordFirstStakeUpdate(address operator, uint32 serveUntilBlock) returns() +func (_ISlasher *ISlasherTransactorSession) RecordFirstStakeUpdate(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { + return _ISlasher.Contract.RecordFirstStakeUpdate(&_ISlasher.TransactOpts, operator, serveUntilBlock) +} + +// RecordLastStakeUpdateAndRevokeSlashingAbility is a paid mutator transaction binding the contract method 0x0ffabbce. +// +// Solidity: function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) returns() +func (_ISlasher *ISlasherTransactor) RecordLastStakeUpdateAndRevokeSlashingAbility(opts *bind.TransactOpts, operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { + return _ISlasher.contract.Transact(opts, "recordLastStakeUpdateAndRevokeSlashingAbility", operator, serveUntilBlock) +} + +// RecordLastStakeUpdateAndRevokeSlashingAbility is a paid mutator transaction binding the contract method 0x0ffabbce. +// +// Solidity: function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) returns() +func (_ISlasher *ISlasherSession) RecordLastStakeUpdateAndRevokeSlashingAbility(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { + return _ISlasher.Contract.RecordLastStakeUpdateAndRevokeSlashingAbility(&_ISlasher.TransactOpts, operator, serveUntilBlock) +} + +// RecordLastStakeUpdateAndRevokeSlashingAbility is a paid mutator transaction binding the contract method 0x0ffabbce. +// +// Solidity: function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) returns() +func (_ISlasher *ISlasherTransactorSession) RecordLastStakeUpdateAndRevokeSlashingAbility(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { + return _ISlasher.Contract.RecordLastStakeUpdateAndRevokeSlashingAbility(&_ISlasher.TransactOpts, operator, serveUntilBlock) +} + +// RecordStakeUpdate is a paid mutator transaction binding the contract method 0xc747075b. +// +// Solidity: function recordStakeUpdate(address operator, uint32 updateBlock, uint32 serveUntilBlock, uint256 insertAfter) returns() +func (_ISlasher *ISlasherTransactor) RecordStakeUpdate(opts *bind.TransactOpts, operator common.Address, updateBlock uint32, serveUntilBlock uint32, insertAfter *big.Int) (*types.Transaction, error) { + return _ISlasher.contract.Transact(opts, "recordStakeUpdate", operator, updateBlock, serveUntilBlock, insertAfter) +} + +// RecordStakeUpdate is a paid mutator transaction binding the contract method 0xc747075b. +// +// Solidity: function recordStakeUpdate(address operator, uint32 updateBlock, uint32 serveUntilBlock, uint256 insertAfter) returns() +func (_ISlasher *ISlasherSession) RecordStakeUpdate(operator common.Address, updateBlock uint32, serveUntilBlock uint32, insertAfter *big.Int) (*types.Transaction, error) { + return _ISlasher.Contract.RecordStakeUpdate(&_ISlasher.TransactOpts, operator, updateBlock, serveUntilBlock, insertAfter) +} + +// RecordStakeUpdate is a paid mutator transaction binding the contract method 0xc747075b. +// +// Solidity: function recordStakeUpdate(address operator, uint32 updateBlock, uint32 serveUntilBlock, uint256 insertAfter) returns() +func (_ISlasher *ISlasherTransactorSession) RecordStakeUpdate(operator common.Address, updateBlock uint32, serveUntilBlock uint32, insertAfter *big.Int) (*types.Transaction, error) { + return _ISlasher.Contract.RecordStakeUpdate(&_ISlasher.TransactOpts, operator, updateBlock, serveUntilBlock, insertAfter) +} + +// ResetFrozenStatus is a paid mutator transaction binding the contract method 0x7cf72bba. +// +// Solidity: function resetFrozenStatus(address[] frozenAddresses) returns() +func (_ISlasher *ISlasherTransactor) ResetFrozenStatus(opts *bind.TransactOpts, frozenAddresses []common.Address) (*types.Transaction, error) { + return _ISlasher.contract.Transact(opts, "resetFrozenStatus", frozenAddresses) +} + +// ResetFrozenStatus is a paid mutator transaction binding the contract method 0x7cf72bba. +// +// Solidity: function resetFrozenStatus(address[] frozenAddresses) returns() +func (_ISlasher *ISlasherSession) ResetFrozenStatus(frozenAddresses []common.Address) (*types.Transaction, error) { + return _ISlasher.Contract.ResetFrozenStatus(&_ISlasher.TransactOpts, frozenAddresses) +} + +// ResetFrozenStatus is a paid mutator transaction binding the contract method 0x7cf72bba. +// +// Solidity: function resetFrozenStatus(address[] frozenAddresses) returns() +func (_ISlasher *ISlasherTransactorSession) ResetFrozenStatus(frozenAddresses []common.Address) (*types.Transaction, error) { + return _ISlasher.Contract.ResetFrozenStatus(&_ISlasher.TransactOpts, frozenAddresses) +} + +// ISlasherFrozenStatusResetIterator is returned from FilterFrozenStatusReset and is used to iterate over the raw logs and unpacked data for FrozenStatusReset events raised by the ISlasher contract. +type ISlasherFrozenStatusResetIterator struct { + Event *ISlasherFrozenStatusReset // 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 *ISlasherFrozenStatusResetIterator) 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(ISlasherFrozenStatusReset) + 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(ISlasherFrozenStatusReset) + 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 *ISlasherFrozenStatusResetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ISlasherFrozenStatusResetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ISlasherFrozenStatusReset represents a FrozenStatusReset event raised by the ISlasher contract. +type ISlasherFrozenStatusReset struct { + PreviouslySlashedAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFrozenStatusReset is a free log retrieval operation binding the contract event 0xd4cef0af27800d466fcacd85779857378b85cb61569005ff1464fa6e5ced69d8. +// +// Solidity: event FrozenStatusReset(address indexed previouslySlashedAddress) +func (_ISlasher *ISlasherFilterer) FilterFrozenStatusReset(opts *bind.FilterOpts, previouslySlashedAddress []common.Address) (*ISlasherFrozenStatusResetIterator, error) { + + var previouslySlashedAddressRule []interface{} + for _, previouslySlashedAddressItem := range previouslySlashedAddress { + previouslySlashedAddressRule = append(previouslySlashedAddressRule, previouslySlashedAddressItem) + } + + logs, sub, err := _ISlasher.contract.FilterLogs(opts, "FrozenStatusReset", previouslySlashedAddressRule) + if err != nil { + return nil, err + } + return &ISlasherFrozenStatusResetIterator{contract: _ISlasher.contract, event: "FrozenStatusReset", logs: logs, sub: sub}, nil +} + +// WatchFrozenStatusReset is a free log subscription operation binding the contract event 0xd4cef0af27800d466fcacd85779857378b85cb61569005ff1464fa6e5ced69d8. +// +// Solidity: event FrozenStatusReset(address indexed previouslySlashedAddress) +func (_ISlasher *ISlasherFilterer) WatchFrozenStatusReset(opts *bind.WatchOpts, sink chan<- *ISlasherFrozenStatusReset, previouslySlashedAddress []common.Address) (event.Subscription, error) { + + var previouslySlashedAddressRule []interface{} + for _, previouslySlashedAddressItem := range previouslySlashedAddress { + previouslySlashedAddressRule = append(previouslySlashedAddressRule, previouslySlashedAddressItem) + } + + logs, sub, err := _ISlasher.contract.WatchLogs(opts, "FrozenStatusReset", previouslySlashedAddressRule) + 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(ISlasherFrozenStatusReset) + if err := _ISlasher.contract.UnpackLog(event, "FrozenStatusReset", 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 +} + +// ParseFrozenStatusReset is a log parse operation binding the contract event 0xd4cef0af27800d466fcacd85779857378b85cb61569005ff1464fa6e5ced69d8. +// +// Solidity: event FrozenStatusReset(address indexed previouslySlashedAddress) +func (_ISlasher *ISlasherFilterer) ParseFrozenStatusReset(log types.Log) (*ISlasherFrozenStatusReset, error) { + event := new(ISlasherFrozenStatusReset) + if err := _ISlasher.contract.UnpackLog(event, "FrozenStatusReset", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ISlasherMiddlewareTimesAddedIterator is returned from FilterMiddlewareTimesAdded and is used to iterate over the raw logs and unpacked data for MiddlewareTimesAdded events raised by the ISlasher contract. +type ISlasherMiddlewareTimesAddedIterator struct { + Event *ISlasherMiddlewareTimesAdded // 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 *ISlasherMiddlewareTimesAddedIterator) 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(ISlasherMiddlewareTimesAdded) + 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(ISlasherMiddlewareTimesAdded) + 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 *ISlasherMiddlewareTimesAddedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ISlasherMiddlewareTimesAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ISlasherMiddlewareTimesAdded represents a MiddlewareTimesAdded event raised by the ISlasher contract. +type ISlasherMiddlewareTimesAdded struct { + Operator common.Address + Index *big.Int + StalestUpdateBlock uint32 + LatestServeUntilBlock uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMiddlewareTimesAdded is a free log retrieval operation binding the contract event 0x1b62ba64c72d01e41a2b8c46e6aeeff728ef3a4438cf1cac3d92ee12189d5649. +// +// Solidity: event MiddlewareTimesAdded(address operator, uint256 index, uint32 stalestUpdateBlock, uint32 latestServeUntilBlock) +func (_ISlasher *ISlasherFilterer) FilterMiddlewareTimesAdded(opts *bind.FilterOpts) (*ISlasherMiddlewareTimesAddedIterator, error) { + + logs, sub, err := _ISlasher.contract.FilterLogs(opts, "MiddlewareTimesAdded") + if err != nil { + return nil, err + } + return &ISlasherMiddlewareTimesAddedIterator{contract: _ISlasher.contract, event: "MiddlewareTimesAdded", logs: logs, sub: sub}, nil +} + +// WatchMiddlewareTimesAdded is a free log subscription operation binding the contract event 0x1b62ba64c72d01e41a2b8c46e6aeeff728ef3a4438cf1cac3d92ee12189d5649. +// +// Solidity: event MiddlewareTimesAdded(address operator, uint256 index, uint32 stalestUpdateBlock, uint32 latestServeUntilBlock) +func (_ISlasher *ISlasherFilterer) WatchMiddlewareTimesAdded(opts *bind.WatchOpts, sink chan<- *ISlasherMiddlewareTimesAdded) (event.Subscription, error) { + + logs, sub, err := _ISlasher.contract.WatchLogs(opts, "MiddlewareTimesAdded") + 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(ISlasherMiddlewareTimesAdded) + if err := _ISlasher.contract.UnpackLog(event, "MiddlewareTimesAdded", 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 +} + +// ParseMiddlewareTimesAdded is a log parse operation binding the contract event 0x1b62ba64c72d01e41a2b8c46e6aeeff728ef3a4438cf1cac3d92ee12189d5649. +// +// Solidity: event MiddlewareTimesAdded(address operator, uint256 index, uint32 stalestUpdateBlock, uint32 latestServeUntilBlock) +func (_ISlasher *ISlasherFilterer) ParseMiddlewareTimesAdded(log types.Log) (*ISlasherMiddlewareTimesAdded, error) { + event := new(ISlasherMiddlewareTimesAdded) + if err := _ISlasher.contract.UnpackLog(event, "MiddlewareTimesAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ISlasherOperatorFrozenIterator is returned from FilterOperatorFrozen and is used to iterate over the raw logs and unpacked data for OperatorFrozen events raised by the ISlasher contract. +type ISlasherOperatorFrozenIterator struct { + Event *ISlasherOperatorFrozen // 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 *ISlasherOperatorFrozenIterator) 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(ISlasherOperatorFrozen) + 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(ISlasherOperatorFrozen) + 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 *ISlasherOperatorFrozenIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ISlasherOperatorFrozenIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ISlasherOperatorFrozen represents a OperatorFrozen event raised by the ISlasher contract. +type ISlasherOperatorFrozen struct { + SlashedOperator common.Address + SlashingContract common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorFrozen is a free log retrieval operation binding the contract event 0x444a84f512816ae7be8ed8a66aa88e362eb54d0988e83acc9d81746622b3ba51. +// +// Solidity: event OperatorFrozen(address indexed slashedOperator, address indexed slashingContract) +func (_ISlasher *ISlasherFilterer) FilterOperatorFrozen(opts *bind.FilterOpts, slashedOperator []common.Address, slashingContract []common.Address) (*ISlasherOperatorFrozenIterator, error) { + + var slashedOperatorRule []interface{} + for _, slashedOperatorItem := range slashedOperator { + slashedOperatorRule = append(slashedOperatorRule, slashedOperatorItem) + } + var slashingContractRule []interface{} + for _, slashingContractItem := range slashingContract { + slashingContractRule = append(slashingContractRule, slashingContractItem) + } + + logs, sub, err := _ISlasher.contract.FilterLogs(opts, "OperatorFrozen", slashedOperatorRule, slashingContractRule) + if err != nil { + return nil, err + } + return &ISlasherOperatorFrozenIterator{contract: _ISlasher.contract, event: "OperatorFrozen", logs: logs, sub: sub}, nil +} + +// WatchOperatorFrozen is a free log subscription operation binding the contract event 0x444a84f512816ae7be8ed8a66aa88e362eb54d0988e83acc9d81746622b3ba51. +// +// Solidity: event OperatorFrozen(address indexed slashedOperator, address indexed slashingContract) +func (_ISlasher *ISlasherFilterer) WatchOperatorFrozen(opts *bind.WatchOpts, sink chan<- *ISlasherOperatorFrozen, slashedOperator []common.Address, slashingContract []common.Address) (event.Subscription, error) { + + var slashedOperatorRule []interface{} + for _, slashedOperatorItem := range slashedOperator { + slashedOperatorRule = append(slashedOperatorRule, slashedOperatorItem) + } + var slashingContractRule []interface{} + for _, slashingContractItem := range slashingContract { + slashingContractRule = append(slashingContractRule, slashingContractItem) + } + + logs, sub, err := _ISlasher.contract.WatchLogs(opts, "OperatorFrozen", slashedOperatorRule, slashingContractRule) + 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(ISlasherOperatorFrozen) + if err := _ISlasher.contract.UnpackLog(event, "OperatorFrozen", 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 +} + +// ParseOperatorFrozen is a log parse operation binding the contract event 0x444a84f512816ae7be8ed8a66aa88e362eb54d0988e83acc9d81746622b3ba51. +// +// Solidity: event OperatorFrozen(address indexed slashedOperator, address indexed slashingContract) +func (_ISlasher *ISlasherFilterer) ParseOperatorFrozen(log types.Log) (*ISlasherOperatorFrozen, error) { + event := new(ISlasherOperatorFrozen) + if err := _ISlasher.contract.UnpackLog(event, "OperatorFrozen", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ISlasherOptedIntoSlashingIterator is returned from FilterOptedIntoSlashing and is used to iterate over the raw logs and unpacked data for OptedIntoSlashing events raised by the ISlasher contract. +type ISlasherOptedIntoSlashingIterator struct { + Event *ISlasherOptedIntoSlashing // 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 *ISlasherOptedIntoSlashingIterator) 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(ISlasherOptedIntoSlashing) + 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(ISlasherOptedIntoSlashing) + 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 *ISlasherOptedIntoSlashingIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ISlasherOptedIntoSlashingIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ISlasherOptedIntoSlashing represents a OptedIntoSlashing event raised by the ISlasher contract. +type ISlasherOptedIntoSlashing struct { + Operator common.Address + ContractAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOptedIntoSlashing is a free log retrieval operation binding the contract event 0xefa9fb38e813d53c15edf501e03852843a3fed691960523391d71a092b3627d8. +// +// Solidity: event OptedIntoSlashing(address indexed operator, address indexed contractAddress) +func (_ISlasher *ISlasherFilterer) FilterOptedIntoSlashing(opts *bind.FilterOpts, operator []common.Address, contractAddress []common.Address) (*ISlasherOptedIntoSlashingIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var contractAddressRule []interface{} + for _, contractAddressItem := range contractAddress { + contractAddressRule = append(contractAddressRule, contractAddressItem) + } + + logs, sub, err := _ISlasher.contract.FilterLogs(opts, "OptedIntoSlashing", operatorRule, contractAddressRule) + if err != nil { + return nil, err + } + return &ISlasherOptedIntoSlashingIterator{contract: _ISlasher.contract, event: "OptedIntoSlashing", logs: logs, sub: sub}, nil +} + +// WatchOptedIntoSlashing is a free log subscription operation binding the contract event 0xefa9fb38e813d53c15edf501e03852843a3fed691960523391d71a092b3627d8. +// +// Solidity: event OptedIntoSlashing(address indexed operator, address indexed contractAddress) +func (_ISlasher *ISlasherFilterer) WatchOptedIntoSlashing(opts *bind.WatchOpts, sink chan<- *ISlasherOptedIntoSlashing, operator []common.Address, contractAddress []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var contractAddressRule []interface{} + for _, contractAddressItem := range contractAddress { + contractAddressRule = append(contractAddressRule, contractAddressItem) + } + + logs, sub, err := _ISlasher.contract.WatchLogs(opts, "OptedIntoSlashing", operatorRule, contractAddressRule) + 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(ISlasherOptedIntoSlashing) + if err := _ISlasher.contract.UnpackLog(event, "OptedIntoSlashing", 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 +} + +// ParseOptedIntoSlashing is a log parse operation binding the contract event 0xefa9fb38e813d53c15edf501e03852843a3fed691960523391d71a092b3627d8. +// +// Solidity: event OptedIntoSlashing(address indexed operator, address indexed contractAddress) +func (_ISlasher *ISlasherFilterer) ParseOptedIntoSlashing(log types.Log) (*ISlasherOptedIntoSlashing, error) { + event := new(ISlasherOptedIntoSlashing) + if err := _ISlasher.contract.UnpackLog(event, "OptedIntoSlashing", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ISlasherSlashingAbilityRevokedIterator is returned from FilterSlashingAbilityRevoked and is used to iterate over the raw logs and unpacked data for SlashingAbilityRevoked events raised by the ISlasher contract. +type ISlasherSlashingAbilityRevokedIterator struct { + Event *ISlasherSlashingAbilityRevoked // 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 *ISlasherSlashingAbilityRevokedIterator) 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(ISlasherSlashingAbilityRevoked) + 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(ISlasherSlashingAbilityRevoked) + 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 *ISlasherSlashingAbilityRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ISlasherSlashingAbilityRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ISlasherSlashingAbilityRevoked represents a SlashingAbilityRevoked event raised by the ISlasher contract. +type ISlasherSlashingAbilityRevoked struct { + Operator common.Address + ContractAddress common.Address + ContractCanSlashOperatorUntilBlock uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSlashingAbilityRevoked is a free log retrieval operation binding the contract event 0x9aa1b1391f35c672ed1f3b7ece632f4513e618366bef7a2f67b7c6bc1f2d2b14. +// +// Solidity: event SlashingAbilityRevoked(address indexed operator, address indexed contractAddress, uint32 contractCanSlashOperatorUntilBlock) +func (_ISlasher *ISlasherFilterer) FilterSlashingAbilityRevoked(opts *bind.FilterOpts, operator []common.Address, contractAddress []common.Address) (*ISlasherSlashingAbilityRevokedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var contractAddressRule []interface{} + for _, contractAddressItem := range contractAddress { + contractAddressRule = append(contractAddressRule, contractAddressItem) + } + + logs, sub, err := _ISlasher.contract.FilterLogs(opts, "SlashingAbilityRevoked", operatorRule, contractAddressRule) + if err != nil { + return nil, err + } + return &ISlasherSlashingAbilityRevokedIterator{contract: _ISlasher.contract, event: "SlashingAbilityRevoked", logs: logs, sub: sub}, nil +} + +// WatchSlashingAbilityRevoked is a free log subscription operation binding the contract event 0x9aa1b1391f35c672ed1f3b7ece632f4513e618366bef7a2f67b7c6bc1f2d2b14. +// +// Solidity: event SlashingAbilityRevoked(address indexed operator, address indexed contractAddress, uint32 contractCanSlashOperatorUntilBlock) +func (_ISlasher *ISlasherFilterer) WatchSlashingAbilityRevoked(opts *bind.WatchOpts, sink chan<- *ISlasherSlashingAbilityRevoked, operator []common.Address, contractAddress []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var contractAddressRule []interface{} + for _, contractAddressItem := range contractAddress { + contractAddressRule = append(contractAddressRule, contractAddressItem) + } + + logs, sub, err := _ISlasher.contract.WatchLogs(opts, "SlashingAbilityRevoked", operatorRule, contractAddressRule) + 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(ISlasherSlashingAbilityRevoked) + if err := _ISlasher.contract.UnpackLog(event, "SlashingAbilityRevoked", 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 +} + +// ParseSlashingAbilityRevoked is a log parse operation binding the contract event 0x9aa1b1391f35c672ed1f3b7ece632f4513e618366bef7a2f67b7c6bc1f2d2b14. +// +// Solidity: event SlashingAbilityRevoked(address indexed operator, address indexed contractAddress, uint32 contractCanSlashOperatorUntilBlock) +func (_ISlasher *ISlasherFilterer) ParseSlashingAbilityRevoked(log types.Log) (*ISlasherSlashingAbilityRevoked, error) { + event := new(ISlasherSlashingAbilityRevoked) + if err := _ISlasher.contract.UnpackLog(event, "SlashingAbilityRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/ISlasher/tmp.abi b/pkg/bindings/ISlasher/tmp.abi new file mode 100644 index 000000000..bf6300413 --- /dev/null +++ b/pkg/bindings/ISlasher/tmp.abi @@ -0,0 +1,538 @@ +[ + { + "type": "function", + "name": "canSlash", + "inputs": [ + { + "name": "toBeSlashed", + "type": "address", + "internalType": "address" + }, + { + "name": "slashingContract", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "canWithdraw", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "withdrawalStartBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "middlewareTimesIndex", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "contractCanSlashOperatorUntilBlock", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "serviceContract", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "delegation", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IDelegationManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "freezeOperator", + "inputs": [ + { + "name": "toBeFrozen", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getCorrectValueForInsertAfter", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "updateBlock", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getMiddlewareTimesIndexServeUntilBlock", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "index", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getMiddlewareTimesIndexStalestUpdateBlock", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "index", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isFrozen", + "inputs": [ + { + "name": "staker", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestUpdateBlock", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "serviceContract", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "middlewareTimesLength", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "operatorToMiddlewareTimes", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "arrayIndex", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct ISlasher.MiddlewareTimes", + "components": [ + { + "name": "stalestUpdateBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "latestServeUntilBlock", + "type": "uint32", + "internalType": "uint32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "operatorWhitelistedContractsLinkedListEntry", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "node", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "operatorWhitelistedContractsLinkedListSize", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "optIntoSlashing", + "inputs": [ + { + "name": "contractAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordFirstStakeUpdate", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "serveUntilBlock", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordLastStakeUpdateAndRevokeSlashingAbility", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "serveUntilBlock", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordStakeUpdate", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "updateBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "serveUntilBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "insertAfter", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resetFrozenStatus", + "inputs": [ + { + "name": "frozenAddresses", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "strategyManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IStrategyManager" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "FrozenStatusReset", + "inputs": [ + { + "name": "previouslySlashedAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MiddlewareTimesAdded", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "index", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "stalestUpdateBlock", + "type": "uint32", + "indexed": false, + "internalType": "uint32" + }, + { + "name": "latestServeUntilBlock", + "type": "uint32", + "indexed": false, + "internalType": "uint32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorFrozen", + "inputs": [ + { + "name": "slashedOperator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "slashingContract", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OptedIntoSlashing", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "contractAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SlashingAbilityRevoked", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "contractAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "contractCanSlashOperatorUntilBlock", + "type": "uint32", + "indexed": false, + "internalType": "uint32" + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/ISlasher/tmp.bin b/pkg/bindings/ISlasher/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/ISlasher/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/ISocketUpdater/binding.go b/pkg/bindings/ISocketUpdater/binding.go new file mode 100644 index 000000000..8db40dbb8 --- /dev/null +++ b/pkg/bindings/ISocketUpdater/binding.go @@ -0,0 +1,347 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ISocketUpdater + +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 +) + +// ISocketUpdaterMetaData contains all meta data concerning the ISocketUpdater contract. +var ISocketUpdaterMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"updateSocket\",\"inputs\":[{\"name\":\"socket\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"OperatorSocketUpdate\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"socket\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false}]", +} + +// ISocketUpdaterABI is the input ABI used to generate the binding from. +// Deprecated: Use ISocketUpdaterMetaData.ABI instead. +var ISocketUpdaterABI = ISocketUpdaterMetaData.ABI + +// ISocketUpdater is an auto generated Go binding around an Ethereum contract. +type ISocketUpdater struct { + ISocketUpdaterCaller // Read-only binding to the contract + ISocketUpdaterTransactor // Write-only binding to the contract + ISocketUpdaterFilterer // Log filterer for contract events +} + +// ISocketUpdaterCaller is an auto generated read-only Go binding around an Ethereum contract. +type ISocketUpdaterCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ISocketUpdaterTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ISocketUpdaterTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ISocketUpdaterFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ISocketUpdaterFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ISocketUpdaterSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ISocketUpdaterSession struct { + Contract *ISocketUpdater // 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 +} + +// ISocketUpdaterCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ISocketUpdaterCallerSession struct { + Contract *ISocketUpdaterCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ISocketUpdaterTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ISocketUpdaterTransactorSession struct { + Contract *ISocketUpdaterTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ISocketUpdaterRaw is an auto generated low-level Go binding around an Ethereum contract. +type ISocketUpdaterRaw struct { + Contract *ISocketUpdater // Generic contract binding to access the raw methods on +} + +// ISocketUpdaterCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ISocketUpdaterCallerRaw struct { + Contract *ISocketUpdaterCaller // Generic read-only contract binding to access the raw methods on +} + +// ISocketUpdaterTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ISocketUpdaterTransactorRaw struct { + Contract *ISocketUpdaterTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewISocketUpdater creates a new instance of ISocketUpdater, bound to a specific deployed contract. +func NewISocketUpdater(address common.Address, backend bind.ContractBackend) (*ISocketUpdater, error) { + contract, err := bindISocketUpdater(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ISocketUpdater{ISocketUpdaterCaller: ISocketUpdaterCaller{contract: contract}, ISocketUpdaterTransactor: ISocketUpdaterTransactor{contract: contract}, ISocketUpdaterFilterer: ISocketUpdaterFilterer{contract: contract}}, nil +} + +// NewISocketUpdaterCaller creates a new read-only instance of ISocketUpdater, bound to a specific deployed contract. +func NewISocketUpdaterCaller(address common.Address, caller bind.ContractCaller) (*ISocketUpdaterCaller, error) { + contract, err := bindISocketUpdater(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ISocketUpdaterCaller{contract: contract}, nil +} + +// NewISocketUpdaterTransactor creates a new write-only instance of ISocketUpdater, bound to a specific deployed contract. +func NewISocketUpdaterTransactor(address common.Address, transactor bind.ContractTransactor) (*ISocketUpdaterTransactor, error) { + contract, err := bindISocketUpdater(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ISocketUpdaterTransactor{contract: contract}, nil +} + +// NewISocketUpdaterFilterer creates a new log filterer instance of ISocketUpdater, bound to a specific deployed contract. +func NewISocketUpdaterFilterer(address common.Address, filterer bind.ContractFilterer) (*ISocketUpdaterFilterer, error) { + contract, err := bindISocketUpdater(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ISocketUpdaterFilterer{contract: contract}, nil +} + +// bindISocketUpdater binds a generic wrapper to an already deployed contract. +func bindISocketUpdater(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ISocketUpdaterMetaData.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 (_ISocketUpdater *ISocketUpdaterRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ISocketUpdater.Contract.ISocketUpdaterCaller.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 (_ISocketUpdater *ISocketUpdaterRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ISocketUpdater.Contract.ISocketUpdaterTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ISocketUpdater *ISocketUpdaterRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ISocketUpdater.Contract.ISocketUpdaterTransactor.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 (_ISocketUpdater *ISocketUpdaterCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ISocketUpdater.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 (_ISocketUpdater *ISocketUpdaterTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ISocketUpdater.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ISocketUpdater *ISocketUpdaterTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ISocketUpdater.Contract.contract.Transact(opts, method, params...) +} + +// UpdateSocket is a paid mutator transaction binding the contract method 0x0cf4b767. +// +// Solidity: function updateSocket(string socket) returns() +func (_ISocketUpdater *ISocketUpdaterTransactor) UpdateSocket(opts *bind.TransactOpts, socket string) (*types.Transaction, error) { + return _ISocketUpdater.contract.Transact(opts, "updateSocket", socket) +} + +// UpdateSocket is a paid mutator transaction binding the contract method 0x0cf4b767. +// +// Solidity: function updateSocket(string socket) returns() +func (_ISocketUpdater *ISocketUpdaterSession) UpdateSocket(socket string) (*types.Transaction, error) { + return _ISocketUpdater.Contract.UpdateSocket(&_ISocketUpdater.TransactOpts, socket) +} + +// UpdateSocket is a paid mutator transaction binding the contract method 0x0cf4b767. +// +// Solidity: function updateSocket(string socket) returns() +func (_ISocketUpdater *ISocketUpdaterTransactorSession) UpdateSocket(socket string) (*types.Transaction, error) { + return _ISocketUpdater.Contract.UpdateSocket(&_ISocketUpdater.TransactOpts, socket) +} + +// ISocketUpdaterOperatorSocketUpdateIterator is returned from FilterOperatorSocketUpdate and is used to iterate over the raw logs and unpacked data for OperatorSocketUpdate events raised by the ISocketUpdater contract. +type ISocketUpdaterOperatorSocketUpdateIterator struct { + Event *ISocketUpdaterOperatorSocketUpdate // 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 *ISocketUpdaterOperatorSocketUpdateIterator) 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(ISocketUpdaterOperatorSocketUpdate) + 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(ISocketUpdaterOperatorSocketUpdate) + 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 *ISocketUpdaterOperatorSocketUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ISocketUpdaterOperatorSocketUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ISocketUpdaterOperatorSocketUpdate represents a OperatorSocketUpdate event raised by the ISocketUpdater contract. +type ISocketUpdaterOperatorSocketUpdate struct { + OperatorId [32]byte + Socket string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSocketUpdate is a free log retrieval operation binding the contract event 0xec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa. +// +// Solidity: event OperatorSocketUpdate(bytes32 indexed operatorId, string socket) +func (_ISocketUpdater *ISocketUpdaterFilterer) FilterOperatorSocketUpdate(opts *bind.FilterOpts, operatorId [][32]byte) (*ISocketUpdaterOperatorSocketUpdateIterator, error) { + + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) + } + + logs, sub, err := _ISocketUpdater.contract.FilterLogs(opts, "OperatorSocketUpdate", operatorIdRule) + if err != nil { + return nil, err + } + return &ISocketUpdaterOperatorSocketUpdateIterator{contract: _ISocketUpdater.contract, event: "OperatorSocketUpdate", logs: logs, sub: sub}, nil +} + +// WatchOperatorSocketUpdate is a free log subscription operation binding the contract event 0xec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa. +// +// Solidity: event OperatorSocketUpdate(bytes32 indexed operatorId, string socket) +func (_ISocketUpdater *ISocketUpdaterFilterer) WatchOperatorSocketUpdate(opts *bind.WatchOpts, sink chan<- *ISocketUpdaterOperatorSocketUpdate, operatorId [][32]byte) (event.Subscription, error) { + + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) + } + + logs, sub, err := _ISocketUpdater.contract.WatchLogs(opts, "OperatorSocketUpdate", operatorIdRule) + 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(ISocketUpdaterOperatorSocketUpdate) + if err := _ISocketUpdater.contract.UnpackLog(event, "OperatorSocketUpdate", 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 +} + +// ParseOperatorSocketUpdate is a log parse operation binding the contract event 0xec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa. +// +// Solidity: event OperatorSocketUpdate(bytes32 indexed operatorId, string socket) +func (_ISocketUpdater *ISocketUpdaterFilterer) ParseOperatorSocketUpdate(log types.Log) (*ISocketUpdaterOperatorSocketUpdate, error) { + event := new(ISocketUpdaterOperatorSocketUpdate) + if err := _ISocketUpdater.contract.UnpackLog(event, "OperatorSocketUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/ISocketUpdater/tmp.abi b/pkg/bindings/ISocketUpdater/tmp.abi new file mode 100644 index 000000000..006612803 --- /dev/null +++ b/pkg/bindings/ISocketUpdater/tmp.abi @@ -0,0 +1,34 @@ +[ + { + "type": "function", + "name": "updateSocket", + "inputs": [ + { + "name": "socket", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OperatorSocketUpdate", + "inputs": [ + { + "name": "operatorId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "socket", + "type": "string", + "indexed": false, + "internalType": "string" + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/ISocketUpdater/tmp.bin b/pkg/bindings/ISocketUpdater/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/ISocketUpdater/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/IStrategy/binding.go b/pkg/bindings/IStrategy/binding.go new file mode 100644 index 000000000..10ee867cd --- /dev/null +++ b/pkg/bindings/IStrategy/binding.go @@ -0,0 +1,503 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IStrategy + +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 +) + +// 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\"}]", +} + +// IStrategyABI is the input ABI used to generate the binding from. +// Deprecated: Use IStrategyMetaData.ABI instead. +var IStrategyABI = IStrategyMetaData.ABI + +// IStrategy is an auto generated Go binding around an Ethereum contract. +type IStrategy struct { + IStrategyCaller // Read-only binding to the contract + IStrategyTransactor // Write-only binding to the contract + IStrategyFilterer // Log filterer for contract events +} + +// IStrategyCaller is an auto generated read-only Go binding around an Ethereum contract. +type IStrategyCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IStrategyTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IStrategyTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IStrategyFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IStrategyFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IStrategySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IStrategySession struct { + Contract *IStrategy // 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 +} + +// IStrategyCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IStrategyCallerSession struct { + Contract *IStrategyCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IStrategyTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IStrategyTransactorSession struct { + Contract *IStrategyTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IStrategyRaw is an auto generated low-level Go binding around an Ethereum contract. +type IStrategyRaw struct { + Contract *IStrategy // Generic contract binding to access the raw methods on +} + +// IStrategyCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IStrategyCallerRaw struct { + Contract *IStrategyCaller // Generic read-only contract binding to access the raw methods on +} + +// IStrategyTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IStrategyTransactorRaw struct { + Contract *IStrategyTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIStrategy creates a new instance of IStrategy, bound to a specific deployed contract. +func NewIStrategy(address common.Address, backend bind.ContractBackend) (*IStrategy, error) { + contract, err := bindIStrategy(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IStrategy{IStrategyCaller: IStrategyCaller{contract: contract}, IStrategyTransactor: IStrategyTransactor{contract: contract}, IStrategyFilterer: IStrategyFilterer{contract: contract}}, nil +} + +// NewIStrategyCaller creates a new read-only instance of IStrategy, bound to a specific deployed contract. +func NewIStrategyCaller(address common.Address, caller bind.ContractCaller) (*IStrategyCaller, error) { + contract, err := bindIStrategy(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IStrategyCaller{contract: contract}, nil +} + +// NewIStrategyTransactor creates a new write-only instance of IStrategy, bound to a specific deployed contract. +func NewIStrategyTransactor(address common.Address, transactor bind.ContractTransactor) (*IStrategyTransactor, error) { + contract, err := bindIStrategy(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IStrategyTransactor{contract: contract}, nil +} + +// NewIStrategyFilterer creates a new log filterer instance of IStrategy, bound to a specific deployed contract. +func NewIStrategyFilterer(address common.Address, filterer bind.ContractFilterer) (*IStrategyFilterer, error) { + contract, err := bindIStrategy(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IStrategyFilterer{contract: contract}, nil +} + +// bindIStrategy binds a generic wrapper to an already deployed contract. +func bindIStrategy(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IStrategyMetaData.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 (_IStrategy *IStrategyRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IStrategy.Contract.IStrategyCaller.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 (_IStrategy *IStrategyRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IStrategy.Contract.IStrategyTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IStrategy *IStrategyRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IStrategy.Contract.IStrategyTransactor.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 (_IStrategy *IStrategyCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IStrategy.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 (_IStrategy *IStrategyTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IStrategy.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IStrategy *IStrategyTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IStrategy.Contract.contract.Transact(opts, method, params...) +} + +// Explanation is a free data retrieval call binding the contract method 0xab5921e1. +// +// Solidity: function explanation() view returns(string) +func (_IStrategy *IStrategyCaller) Explanation(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _IStrategy.contract.Call(opts, &out, "explanation") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Explanation is a free data retrieval call binding the contract method 0xab5921e1. +// +// Solidity: function explanation() view returns(string) +func (_IStrategy *IStrategySession) Explanation() (string, error) { + return _IStrategy.Contract.Explanation(&_IStrategy.CallOpts) +} + +// Explanation is a free data retrieval call binding the contract method 0xab5921e1. +// +// Solidity: function explanation() view returns(string) +func (_IStrategy *IStrategyCallerSession) Explanation() (string, error) { + return _IStrategy.Contract.Explanation(&_IStrategy.CallOpts) +} + +// Shares is a free data retrieval call binding the contract method 0xce7c2ac2. +// +// Solidity: function shares(address user) view returns(uint256) +func (_IStrategy *IStrategyCaller) Shares(opts *bind.CallOpts, user common.Address) (*big.Int, error) { + var out []interface{} + err := _IStrategy.contract.Call(opts, &out, "shares", user) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Shares is a free data retrieval call binding the contract method 0xce7c2ac2. +// +// Solidity: function shares(address user) view returns(uint256) +func (_IStrategy *IStrategySession) Shares(user common.Address) (*big.Int, error) { + return _IStrategy.Contract.Shares(&_IStrategy.CallOpts, user) +} + +// Shares is a free data retrieval call binding the contract method 0xce7c2ac2. +// +// Solidity: function shares(address user) view returns(uint256) +func (_IStrategy *IStrategyCallerSession) Shares(user common.Address) (*big.Int, error) { + return _IStrategy.Contract.Shares(&_IStrategy.CallOpts, user) +} + +// SharesToUnderlyingView is a free data retrieval call binding the contract method 0x7a8b2637. +// +// Solidity: function sharesToUnderlyingView(uint256 amountShares) view returns(uint256) +func (_IStrategy *IStrategyCaller) SharesToUnderlyingView(opts *bind.CallOpts, amountShares *big.Int) (*big.Int, error) { + var out []interface{} + err := _IStrategy.contract.Call(opts, &out, "sharesToUnderlyingView", amountShares) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SharesToUnderlyingView is a free data retrieval call binding the contract method 0x7a8b2637. +// +// Solidity: function sharesToUnderlyingView(uint256 amountShares) view returns(uint256) +func (_IStrategy *IStrategySession) SharesToUnderlyingView(amountShares *big.Int) (*big.Int, error) { + return _IStrategy.Contract.SharesToUnderlyingView(&_IStrategy.CallOpts, amountShares) +} + +// SharesToUnderlyingView is a free data retrieval call binding the contract method 0x7a8b2637. +// +// Solidity: function sharesToUnderlyingView(uint256 amountShares) view returns(uint256) +func (_IStrategy *IStrategyCallerSession) SharesToUnderlyingView(amountShares *big.Int) (*big.Int, error) { + return _IStrategy.Contract.SharesToUnderlyingView(&_IStrategy.CallOpts, amountShares) +} + +// TotalShares is a free data retrieval call binding the contract method 0x3a98ef39. +// +// Solidity: function totalShares() view returns(uint256) +func (_IStrategy *IStrategyCaller) TotalShares(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IStrategy.contract.Call(opts, &out, "totalShares") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalShares is a free data retrieval call binding the contract method 0x3a98ef39. +// +// Solidity: function totalShares() view returns(uint256) +func (_IStrategy *IStrategySession) TotalShares() (*big.Int, error) { + return _IStrategy.Contract.TotalShares(&_IStrategy.CallOpts) +} + +// TotalShares is a free data retrieval call binding the contract method 0x3a98ef39. +// +// Solidity: function totalShares() view returns(uint256) +func (_IStrategy *IStrategyCallerSession) TotalShares() (*big.Int, error) { + return _IStrategy.Contract.TotalShares(&_IStrategy.CallOpts) +} + +// UnderlyingToSharesView is a free data retrieval call binding the contract method 0xe3dae51c. +// +// Solidity: function underlyingToSharesView(uint256 amountUnderlying) view returns(uint256) +func (_IStrategy *IStrategyCaller) UnderlyingToSharesView(opts *bind.CallOpts, amountUnderlying *big.Int) (*big.Int, error) { + var out []interface{} + err := _IStrategy.contract.Call(opts, &out, "underlyingToSharesView", amountUnderlying) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// UnderlyingToSharesView is a free data retrieval call binding the contract method 0xe3dae51c. +// +// Solidity: function underlyingToSharesView(uint256 amountUnderlying) view returns(uint256) +func (_IStrategy *IStrategySession) UnderlyingToSharesView(amountUnderlying *big.Int) (*big.Int, error) { + return _IStrategy.Contract.UnderlyingToSharesView(&_IStrategy.CallOpts, amountUnderlying) +} + +// UnderlyingToSharesView is a free data retrieval call binding the contract method 0xe3dae51c. +// +// Solidity: function underlyingToSharesView(uint256 amountUnderlying) view returns(uint256) +func (_IStrategy *IStrategyCallerSession) UnderlyingToSharesView(amountUnderlying *big.Int) (*big.Int, error) { + return _IStrategy.Contract.UnderlyingToSharesView(&_IStrategy.CallOpts, amountUnderlying) +} + +// UnderlyingToken is a free data retrieval call binding the contract method 0x2495a599. +// +// Solidity: function underlyingToken() view returns(address) +func (_IStrategy *IStrategyCaller) UnderlyingToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IStrategy.contract.Call(opts, &out, "underlyingToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// UnderlyingToken is a free data retrieval call binding the contract method 0x2495a599. +// +// Solidity: function underlyingToken() view returns(address) +func (_IStrategy *IStrategySession) UnderlyingToken() (common.Address, error) { + return _IStrategy.Contract.UnderlyingToken(&_IStrategy.CallOpts) +} + +// UnderlyingToken is a free data retrieval call binding the contract method 0x2495a599. +// +// Solidity: function underlyingToken() view returns(address) +func (_IStrategy *IStrategyCallerSession) UnderlyingToken() (common.Address, error) { + return _IStrategy.Contract.UnderlyingToken(&_IStrategy.CallOpts) +} + +// UserUnderlyingView is a free data retrieval call binding the contract method 0x553ca5f8. +// +// Solidity: function userUnderlyingView(address user) view returns(uint256) +func (_IStrategy *IStrategyCaller) UserUnderlyingView(opts *bind.CallOpts, user common.Address) (*big.Int, error) { + var out []interface{} + err := _IStrategy.contract.Call(opts, &out, "userUnderlyingView", user) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// UserUnderlyingView is a free data retrieval call binding the contract method 0x553ca5f8. +// +// Solidity: function userUnderlyingView(address user) view returns(uint256) +func (_IStrategy *IStrategySession) UserUnderlyingView(user common.Address) (*big.Int, error) { + return _IStrategy.Contract.UserUnderlyingView(&_IStrategy.CallOpts, user) +} + +// UserUnderlyingView is a free data retrieval call binding the contract method 0x553ca5f8. +// +// Solidity: function userUnderlyingView(address user) view returns(uint256) +func (_IStrategy *IStrategyCallerSession) UserUnderlyingView(user common.Address) (*big.Int, error) { + return _IStrategy.Contract.UserUnderlyingView(&_IStrategy.CallOpts, user) +} + +// Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. +// +// Solidity: function deposit(address token, uint256 amount) returns(uint256) +func (_IStrategy *IStrategyTransactor) Deposit(opts *bind.TransactOpts, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _IStrategy.contract.Transact(opts, "deposit", token, amount) +} + +// Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. +// +// Solidity: function deposit(address token, uint256 amount) returns(uint256) +func (_IStrategy *IStrategySession) Deposit(token common.Address, amount *big.Int) (*types.Transaction, error) { + return _IStrategy.Contract.Deposit(&_IStrategy.TransactOpts, token, amount) +} + +// Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. +// +// Solidity: function deposit(address token, uint256 amount) returns(uint256) +func (_IStrategy *IStrategyTransactorSession) Deposit(token common.Address, amount *big.Int) (*types.Transaction, error) { + return _IStrategy.Contract.Deposit(&_IStrategy.TransactOpts, token, amount) +} + +// SharesToUnderlying is a paid mutator transaction binding the contract method 0xf3e73875. +// +// Solidity: function sharesToUnderlying(uint256 amountShares) returns(uint256) +func (_IStrategy *IStrategyTransactor) SharesToUnderlying(opts *bind.TransactOpts, amountShares *big.Int) (*types.Transaction, error) { + return _IStrategy.contract.Transact(opts, "sharesToUnderlying", amountShares) +} + +// SharesToUnderlying is a paid mutator transaction binding the contract method 0xf3e73875. +// +// Solidity: function sharesToUnderlying(uint256 amountShares) returns(uint256) +func (_IStrategy *IStrategySession) SharesToUnderlying(amountShares *big.Int) (*types.Transaction, error) { + return _IStrategy.Contract.SharesToUnderlying(&_IStrategy.TransactOpts, amountShares) +} + +// SharesToUnderlying is a paid mutator transaction binding the contract method 0xf3e73875. +// +// Solidity: function sharesToUnderlying(uint256 amountShares) returns(uint256) +func (_IStrategy *IStrategyTransactorSession) SharesToUnderlying(amountShares *big.Int) (*types.Transaction, error) { + return _IStrategy.Contract.SharesToUnderlying(&_IStrategy.TransactOpts, amountShares) +} + +// UnderlyingToShares is a paid mutator transaction binding the contract method 0x8c871019. +// +// Solidity: function underlyingToShares(uint256 amountUnderlying) returns(uint256) +func (_IStrategy *IStrategyTransactor) UnderlyingToShares(opts *bind.TransactOpts, amountUnderlying *big.Int) (*types.Transaction, error) { + return _IStrategy.contract.Transact(opts, "underlyingToShares", amountUnderlying) +} + +// UnderlyingToShares is a paid mutator transaction binding the contract method 0x8c871019. +// +// Solidity: function underlyingToShares(uint256 amountUnderlying) returns(uint256) +func (_IStrategy *IStrategySession) UnderlyingToShares(amountUnderlying *big.Int) (*types.Transaction, error) { + return _IStrategy.Contract.UnderlyingToShares(&_IStrategy.TransactOpts, amountUnderlying) +} + +// UnderlyingToShares is a paid mutator transaction binding the contract method 0x8c871019. +// +// Solidity: function underlyingToShares(uint256 amountUnderlying) returns(uint256) +func (_IStrategy *IStrategyTransactorSession) UnderlyingToShares(amountUnderlying *big.Int) (*types.Transaction, error) { + return _IStrategy.Contract.UnderlyingToShares(&_IStrategy.TransactOpts, amountUnderlying) +} + +// UserUnderlying is a paid mutator transaction binding the contract method 0x8f6a6240. +// +// Solidity: function userUnderlying(address user) returns(uint256) +func (_IStrategy *IStrategyTransactor) UserUnderlying(opts *bind.TransactOpts, user common.Address) (*types.Transaction, error) { + return _IStrategy.contract.Transact(opts, "userUnderlying", user) +} + +// UserUnderlying is a paid mutator transaction binding the contract method 0x8f6a6240. +// +// Solidity: function userUnderlying(address user) returns(uint256) +func (_IStrategy *IStrategySession) UserUnderlying(user common.Address) (*types.Transaction, error) { + return _IStrategy.Contract.UserUnderlying(&_IStrategy.TransactOpts, user) +} + +// UserUnderlying is a paid mutator transaction binding the contract method 0x8f6a6240. +// +// Solidity: function userUnderlying(address user) returns(uint256) +func (_IStrategy *IStrategyTransactorSession) UserUnderlying(user common.Address) (*types.Transaction, error) { + return _IStrategy.Contract.UserUnderlying(&_IStrategy.TransactOpts, user) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address recipient, address token, uint256 amountShares) returns() +func (_IStrategy *IStrategyTransactor) Withdraw(opts *bind.TransactOpts, recipient common.Address, token common.Address, amountShares *big.Int) (*types.Transaction, error) { + return _IStrategy.contract.Transact(opts, "withdraw", recipient, token, amountShares) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address recipient, address token, uint256 amountShares) returns() +func (_IStrategy *IStrategySession) Withdraw(recipient common.Address, token common.Address, amountShares *big.Int) (*types.Transaction, error) { + return _IStrategy.Contract.Withdraw(&_IStrategy.TransactOpts, recipient, token, amountShares) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address recipient, address token, uint256 amountShares) returns() +func (_IStrategy *IStrategyTransactorSession) Withdraw(recipient common.Address, token common.Address, amountShares *big.Int) (*types.Transaction, error) { + return _IStrategy.Contract.Withdraw(&_IStrategy.TransactOpts, recipient, token, amountShares) +} diff --git a/pkg/bindings/IStrategy/tmp.abi b/pkg/bindings/IStrategy/tmp.abi new file mode 100644 index 000000000..0f016a7f3 --- /dev/null +++ b/pkg/bindings/IStrategy/tmp.abi @@ -0,0 +1,221 @@ +[ + { + "type": "function", + "name": "deposit", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "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": "contract IERC20" + } + ], + "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": "contract IERC20" + }, + { + "name": "amountShares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + } +] diff --git a/pkg/bindings/IStrategy/tmp.bin b/pkg/bindings/IStrategy/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IStrategy/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/IStrategyManager/binding.go b/pkg/bindings/IStrategyManager/binding.go new file mode 100644 index 000000000..0def48cb7 --- /dev/null +++ b/pkg/bindings/IStrategyManager/binding.go @@ -0,0 +1,1320 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IStrategyManager + +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 +) + +// IStrategyManagerDeprecatedStructQueuedWithdrawal is an auto generated low-level Go binding around an user-defined struct. +type IStrategyManagerDeprecatedStructQueuedWithdrawal struct { + Strategies []common.Address + Shares []*big.Int + Staker common.Address + WithdrawerAndNonce IStrategyManagerDeprecatedStructWithdrawerAndNonce + WithdrawalStartBlock uint32 + DelegatedAddress common.Address +} + +// IStrategyManagerDeprecatedStructWithdrawerAndNonce is an auto generated low-level Go binding around an user-defined struct. +type IStrategyManagerDeprecatedStructWithdrawerAndNonce struct { + Withdrawer common.Address + Nonce *big.Int +} + +// 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\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"queuedWithdrawal\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_QueuedWithdrawal\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawerAndNonce\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_WithdrawerAndNonce\",\"components\":[{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"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\":\"migrateQueuedWithdrawal\",\"inputs\":[{\"name\":\"queuedWithdrawal\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_QueuedWithdrawal\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawerAndNonce\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_WithdrawerAndNonce\",\"components\":[{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"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}]", +} + +// IStrategyManagerABI is the input ABI used to generate the binding from. +// Deprecated: Use IStrategyManagerMetaData.ABI instead. +var IStrategyManagerABI = IStrategyManagerMetaData.ABI + +// IStrategyManager is an auto generated Go binding around an Ethereum contract. +type IStrategyManager struct { + IStrategyManagerCaller // Read-only binding to the contract + IStrategyManagerTransactor // Write-only binding to the contract + IStrategyManagerFilterer // Log filterer for contract events +} + +// IStrategyManagerCaller is an auto generated read-only Go binding around an Ethereum contract. +type IStrategyManagerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IStrategyManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IStrategyManagerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IStrategyManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IStrategyManagerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IStrategyManagerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IStrategyManagerSession struct { + Contract *IStrategyManager // 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 +} + +// IStrategyManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IStrategyManagerCallerSession struct { + Contract *IStrategyManagerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IStrategyManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IStrategyManagerTransactorSession struct { + Contract *IStrategyManagerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IStrategyManagerRaw is an auto generated low-level Go binding around an Ethereum contract. +type IStrategyManagerRaw struct { + Contract *IStrategyManager // Generic contract binding to access the raw methods on +} + +// IStrategyManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IStrategyManagerCallerRaw struct { + Contract *IStrategyManagerCaller // Generic read-only contract binding to access the raw methods on +} + +// IStrategyManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IStrategyManagerTransactorRaw struct { + Contract *IStrategyManagerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIStrategyManager creates a new instance of IStrategyManager, bound to a specific deployed contract. +func NewIStrategyManager(address common.Address, backend bind.ContractBackend) (*IStrategyManager, error) { + contract, err := bindIStrategyManager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IStrategyManager{IStrategyManagerCaller: IStrategyManagerCaller{contract: contract}, IStrategyManagerTransactor: IStrategyManagerTransactor{contract: contract}, IStrategyManagerFilterer: IStrategyManagerFilterer{contract: contract}}, nil +} + +// NewIStrategyManagerCaller creates a new read-only instance of IStrategyManager, bound to a specific deployed contract. +func NewIStrategyManagerCaller(address common.Address, caller bind.ContractCaller) (*IStrategyManagerCaller, error) { + contract, err := bindIStrategyManager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IStrategyManagerCaller{contract: contract}, nil +} + +// NewIStrategyManagerTransactor creates a new write-only instance of IStrategyManager, bound to a specific deployed contract. +func NewIStrategyManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*IStrategyManagerTransactor, error) { + contract, err := bindIStrategyManager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IStrategyManagerTransactor{contract: contract}, nil +} + +// NewIStrategyManagerFilterer creates a new log filterer instance of IStrategyManager, bound to a specific deployed contract. +func NewIStrategyManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*IStrategyManagerFilterer, error) { + contract, err := bindIStrategyManager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IStrategyManagerFilterer{contract: contract}, nil +} + +// bindIStrategyManager binds a generic wrapper to an already deployed contract. +func bindIStrategyManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IStrategyManagerMetaData.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 (_IStrategyManager *IStrategyManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IStrategyManager.Contract.IStrategyManagerCaller.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 (_IStrategyManager *IStrategyManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IStrategyManager.Contract.IStrategyManagerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IStrategyManager *IStrategyManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IStrategyManager.Contract.IStrategyManagerTransactor.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 (_IStrategyManager *IStrategyManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IStrategyManager.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 (_IStrategyManager *IStrategyManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IStrategyManager.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IStrategyManager *IStrategyManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IStrategyManager.Contract.contract.Transact(opts, method, params...) +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0xb43b514b. +// +// Solidity: function calculateWithdrawalRoot((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) pure returns(bytes32) +func (_IStrategyManager *IStrategyManagerCaller) CalculateWithdrawalRoot(opts *bind.CallOpts, queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) ([32]byte, error) { + var out []interface{} + err := _IStrategyManager.contract.Call(opts, &out, "calculateWithdrawalRoot", queuedWithdrawal) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0xb43b514b. +// +// Solidity: function calculateWithdrawalRoot((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) pure returns(bytes32) +func (_IStrategyManager *IStrategyManagerSession) CalculateWithdrawalRoot(queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) ([32]byte, error) { + return _IStrategyManager.Contract.CalculateWithdrawalRoot(&_IStrategyManager.CallOpts, queuedWithdrawal) +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0xb43b514b. +// +// Solidity: function calculateWithdrawalRoot((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) pure returns(bytes32) +func (_IStrategyManager *IStrategyManagerCallerSession) CalculateWithdrawalRoot(queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) ([32]byte, error) { + return _IStrategyManager.Contract.CalculateWithdrawalRoot(&_IStrategyManager.CallOpts, queuedWithdrawal) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_IStrategyManager *IStrategyManagerCaller) Delegation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IStrategyManager.contract.Call(opts, &out, "delegation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_IStrategyManager *IStrategyManagerSession) Delegation() (common.Address, error) { + return _IStrategyManager.Contract.Delegation(&_IStrategyManager.CallOpts) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_IStrategyManager *IStrategyManagerCallerSession) Delegation() (common.Address, error) { + return _IStrategyManager.Contract.Delegation(&_IStrategyManager.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_IStrategyManager *IStrategyManagerCaller) EigenPodManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IStrategyManager.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 (_IStrategyManager *IStrategyManagerSession) EigenPodManager() (common.Address, error) { + return _IStrategyManager.Contract.EigenPodManager(&_IStrategyManager.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_IStrategyManager *IStrategyManagerCallerSession) EigenPodManager() (common.Address, error) { + return _IStrategyManager.Contract.EigenPodManager(&_IStrategyManager.CallOpts) +} + +// GetDeposits is a free data retrieval call binding the contract method 0x94f649dd. +// +// Solidity: function getDeposits(address staker) view returns(address[], uint256[]) +func (_IStrategyManager *IStrategyManagerCaller) GetDeposits(opts *bind.CallOpts, staker common.Address) ([]common.Address, []*big.Int, error) { + var out []interface{} + err := _IStrategyManager.contract.Call(opts, &out, "getDeposits", staker) + + if err != nil { + return *new([]common.Address), *new([]*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + out1 := *abi.ConvertType(out[1], new([]*big.Int)).(*[]*big.Int) + + return out0, out1, err + +} + +// GetDeposits is a free data retrieval call binding the contract method 0x94f649dd. +// +// Solidity: function getDeposits(address staker) view returns(address[], uint256[]) +func (_IStrategyManager *IStrategyManagerSession) GetDeposits(staker common.Address) ([]common.Address, []*big.Int, error) { + return _IStrategyManager.Contract.GetDeposits(&_IStrategyManager.CallOpts, staker) +} + +// GetDeposits is a free data retrieval call binding the contract method 0x94f649dd. +// +// Solidity: function getDeposits(address staker) view returns(address[], uint256[]) +func (_IStrategyManager *IStrategyManagerCallerSession) GetDeposits(staker common.Address) ([]common.Address, []*big.Int, error) { + return _IStrategyManager.Contract.GetDeposits(&_IStrategyManager.CallOpts, staker) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_IStrategyManager *IStrategyManagerCaller) Slasher(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IStrategyManager.contract.Call(opts, &out, "slasher") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_IStrategyManager *IStrategyManagerSession) Slasher() (common.Address, error) { + return _IStrategyManager.Contract.Slasher(&_IStrategyManager.CallOpts) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_IStrategyManager *IStrategyManagerCallerSession) Slasher() (common.Address, error) { + return _IStrategyManager.Contract.Slasher(&_IStrategyManager.CallOpts) +} + +// StakerStrategyListLength is a free data retrieval call binding the contract method 0x8b8aac3c. +// +// Solidity: function stakerStrategyListLength(address staker) view returns(uint256) +func (_IStrategyManager *IStrategyManagerCaller) StakerStrategyListLength(opts *bind.CallOpts, staker common.Address) (*big.Int, error) { + var out []interface{} + err := _IStrategyManager.contract.Call(opts, &out, "stakerStrategyListLength", staker) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerStrategyListLength is a free data retrieval call binding the contract method 0x8b8aac3c. +// +// Solidity: function stakerStrategyListLength(address staker) view returns(uint256) +func (_IStrategyManager *IStrategyManagerSession) StakerStrategyListLength(staker common.Address) (*big.Int, error) { + return _IStrategyManager.Contract.StakerStrategyListLength(&_IStrategyManager.CallOpts, staker) +} + +// StakerStrategyListLength is a free data retrieval call binding the contract method 0x8b8aac3c. +// +// Solidity: function stakerStrategyListLength(address staker) view returns(uint256) +func (_IStrategyManager *IStrategyManagerCallerSession) StakerStrategyListLength(staker common.Address) (*big.Int, error) { + return _IStrategyManager.Contract.StakerStrategyListLength(&_IStrategyManager.CallOpts, staker) +} + +// StakerStrategyShares is a free data retrieval call binding the contract method 0x7a7e0d92. +// +// Solidity: function stakerStrategyShares(address user, address strategy) view returns(uint256 shares) +func (_IStrategyManager *IStrategyManagerCaller) StakerStrategyShares(opts *bind.CallOpts, user common.Address, strategy common.Address) (*big.Int, error) { + var out []interface{} + err := _IStrategyManager.contract.Call(opts, &out, "stakerStrategyShares", user, strategy) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerStrategyShares is a free data retrieval call binding the contract method 0x7a7e0d92. +// +// Solidity: function stakerStrategyShares(address user, address strategy) view returns(uint256 shares) +func (_IStrategyManager *IStrategyManagerSession) StakerStrategyShares(user common.Address, strategy common.Address) (*big.Int, error) { + return _IStrategyManager.Contract.StakerStrategyShares(&_IStrategyManager.CallOpts, user, strategy) +} + +// StakerStrategyShares is a free data retrieval call binding the contract method 0x7a7e0d92. +// +// Solidity: function stakerStrategyShares(address user, address strategy) view returns(uint256 shares) +func (_IStrategyManager *IStrategyManagerCallerSession) StakerStrategyShares(user common.Address, strategy common.Address) (*big.Int, error) { + return _IStrategyManager.Contract.StakerStrategyShares(&_IStrategyManager.CallOpts, user, strategy) +} + +// StrategyWhitelister is a free data retrieval call binding the contract method 0x967fc0d2. +// +// Solidity: function strategyWhitelister() view returns(address) +func (_IStrategyManager *IStrategyManagerCaller) StrategyWhitelister(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IStrategyManager.contract.Call(opts, &out, "strategyWhitelister") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StrategyWhitelister is a free data retrieval call binding the contract method 0x967fc0d2. +// +// Solidity: function strategyWhitelister() view returns(address) +func (_IStrategyManager *IStrategyManagerSession) StrategyWhitelister() (common.Address, error) { + return _IStrategyManager.Contract.StrategyWhitelister(&_IStrategyManager.CallOpts) +} + +// StrategyWhitelister is a free data retrieval call binding the contract method 0x967fc0d2. +// +// Solidity: function strategyWhitelister() view returns(address) +func (_IStrategyManager *IStrategyManagerCallerSession) StrategyWhitelister() (common.Address, error) { + return _IStrategyManager.Contract.StrategyWhitelister(&_IStrategyManager.CallOpts) +} + +// ThirdPartyTransfersForbidden is a free data retrieval call binding the contract method 0x9b4da03d. +// +// Solidity: function thirdPartyTransfersForbidden(address strategy) view returns(bool) +func (_IStrategyManager *IStrategyManagerCaller) ThirdPartyTransfersForbidden(opts *bind.CallOpts, strategy common.Address) (bool, error) { + var out []interface{} + err := _IStrategyManager.contract.Call(opts, &out, "thirdPartyTransfersForbidden", strategy) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// ThirdPartyTransfersForbidden is a free data retrieval call binding the contract method 0x9b4da03d. +// +// Solidity: function thirdPartyTransfersForbidden(address strategy) view returns(bool) +func (_IStrategyManager *IStrategyManagerSession) ThirdPartyTransfersForbidden(strategy common.Address) (bool, error) { + return _IStrategyManager.Contract.ThirdPartyTransfersForbidden(&_IStrategyManager.CallOpts, strategy) +} + +// ThirdPartyTransfersForbidden is a free data retrieval call binding the contract method 0x9b4da03d. +// +// Solidity: function thirdPartyTransfersForbidden(address strategy) view returns(bool) +func (_IStrategyManager *IStrategyManagerCallerSession) ThirdPartyTransfersForbidden(strategy common.Address) (bool, error) { + return _IStrategyManager.Contract.ThirdPartyTransfersForbidden(&_IStrategyManager.CallOpts, strategy) +} + +// AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. +// +// 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() +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() +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) +} + +// AddStrategiesToDepositWhitelist is a paid mutator transaction binding the contract method 0xdf5b3547. +// +// Solidity: function addStrategiesToDepositWhitelist(address[] strategiesToWhitelist, bool[] thirdPartyTransfersForbiddenValues) returns() +func (_IStrategyManager *IStrategyManagerTransactor) AddStrategiesToDepositWhitelist(opts *bind.TransactOpts, strategiesToWhitelist []common.Address, thirdPartyTransfersForbiddenValues []bool) (*types.Transaction, error) { + return _IStrategyManager.contract.Transact(opts, "addStrategiesToDepositWhitelist", strategiesToWhitelist, thirdPartyTransfersForbiddenValues) +} + +// AddStrategiesToDepositWhitelist is a paid mutator transaction binding the contract method 0xdf5b3547. +// +// Solidity: function addStrategiesToDepositWhitelist(address[] strategiesToWhitelist, bool[] thirdPartyTransfersForbiddenValues) returns() +func (_IStrategyManager *IStrategyManagerSession) AddStrategiesToDepositWhitelist(strategiesToWhitelist []common.Address, thirdPartyTransfersForbiddenValues []bool) (*types.Transaction, error) { + return _IStrategyManager.Contract.AddStrategiesToDepositWhitelist(&_IStrategyManager.TransactOpts, strategiesToWhitelist, thirdPartyTransfersForbiddenValues) +} + +// AddStrategiesToDepositWhitelist is a paid mutator transaction binding the contract method 0xdf5b3547. +// +// Solidity: function addStrategiesToDepositWhitelist(address[] strategiesToWhitelist, bool[] thirdPartyTransfersForbiddenValues) returns() +func (_IStrategyManager *IStrategyManagerTransactorSession) AddStrategiesToDepositWhitelist(strategiesToWhitelist []common.Address, thirdPartyTransfersForbiddenValues []bool) (*types.Transaction, error) { + return _IStrategyManager.Contract.AddStrategiesToDepositWhitelist(&_IStrategyManager.TransactOpts, strategiesToWhitelist, thirdPartyTransfersForbiddenValues) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xe7a050aa. +// +// Solidity: function depositIntoStrategy(address strategy, address token, uint256 amount) returns(uint256 shares) +func (_IStrategyManager *IStrategyManagerTransactor) DepositIntoStrategy(opts *bind.TransactOpts, strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _IStrategyManager.contract.Transact(opts, "depositIntoStrategy", strategy, token, amount) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xe7a050aa. +// +// Solidity: function depositIntoStrategy(address strategy, address token, uint256 amount) returns(uint256 shares) +func (_IStrategyManager *IStrategyManagerSession) DepositIntoStrategy(strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _IStrategyManager.Contract.DepositIntoStrategy(&_IStrategyManager.TransactOpts, strategy, token, amount) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xe7a050aa. +// +// Solidity: function depositIntoStrategy(address strategy, address token, uint256 amount) returns(uint256 shares) +func (_IStrategyManager *IStrategyManagerTransactorSession) DepositIntoStrategy(strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _IStrategyManager.Contract.DepositIntoStrategy(&_IStrategyManager.TransactOpts, strategy, token, amount) +} + +// DepositIntoStrategyWithSignature is a paid mutator transaction binding the contract method 0x32e89ace. +// +// Solidity: function depositIntoStrategyWithSignature(address strategy, address token, uint256 amount, address staker, uint256 expiry, bytes signature) returns(uint256 shares) +func (_IStrategyManager *IStrategyManagerTransactor) DepositIntoStrategyWithSignature(opts *bind.TransactOpts, strategy common.Address, token common.Address, amount *big.Int, staker common.Address, expiry *big.Int, signature []byte) (*types.Transaction, error) { + return _IStrategyManager.contract.Transact(opts, "depositIntoStrategyWithSignature", strategy, token, amount, staker, expiry, signature) +} + +// DepositIntoStrategyWithSignature is a paid mutator transaction binding the contract method 0x32e89ace. +// +// Solidity: function depositIntoStrategyWithSignature(address strategy, address token, uint256 amount, address staker, uint256 expiry, bytes signature) returns(uint256 shares) +func (_IStrategyManager *IStrategyManagerSession) DepositIntoStrategyWithSignature(strategy common.Address, token common.Address, amount *big.Int, staker common.Address, expiry *big.Int, signature []byte) (*types.Transaction, error) { + return _IStrategyManager.Contract.DepositIntoStrategyWithSignature(&_IStrategyManager.TransactOpts, strategy, token, amount, staker, expiry, signature) +} + +// DepositIntoStrategyWithSignature is a paid mutator transaction binding the contract method 0x32e89ace. +// +// Solidity: function depositIntoStrategyWithSignature(address strategy, address token, uint256 amount, address staker, uint256 expiry, bytes signature) returns(uint256 shares) +func (_IStrategyManager *IStrategyManagerTransactorSession) DepositIntoStrategyWithSignature(strategy common.Address, token common.Address, amount *big.Int, staker common.Address, expiry *big.Int, signature []byte) (*types.Transaction, error) { + return _IStrategyManager.Contract.DepositIntoStrategyWithSignature(&_IStrategyManager.TransactOpts, strategy, token, amount, staker, expiry, signature) +} + +// MigrateQueuedWithdrawal is a paid mutator transaction binding the contract method 0xcd293f6f. +// +// Solidity: function migrateQueuedWithdrawal((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) returns(bool, bytes32) +func (_IStrategyManager *IStrategyManagerTransactor) MigrateQueuedWithdrawal(opts *bind.TransactOpts, queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _IStrategyManager.contract.Transact(opts, "migrateQueuedWithdrawal", queuedWithdrawal) +} + +// MigrateQueuedWithdrawal is a paid mutator transaction binding the contract method 0xcd293f6f. +// +// Solidity: function migrateQueuedWithdrawal((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) returns(bool, bytes32) +func (_IStrategyManager *IStrategyManagerSession) MigrateQueuedWithdrawal(queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _IStrategyManager.Contract.MigrateQueuedWithdrawal(&_IStrategyManager.TransactOpts, queuedWithdrawal) +} + +// MigrateQueuedWithdrawal is a paid mutator transaction binding the contract method 0xcd293f6f. +// +// Solidity: function migrateQueuedWithdrawal((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) returns(bool, bytes32) +func (_IStrategyManager *IStrategyManagerTransactorSession) MigrateQueuedWithdrawal(queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _IStrategyManager.Contract.MigrateQueuedWithdrawal(&_IStrategyManager.TransactOpts, queuedWithdrawal) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0x8c80d4e5. +// +// Solidity: function removeShares(address staker, address strategy, uint256 shares) returns() +func (_IStrategyManager *IStrategyManagerTransactor) RemoveShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _IStrategyManager.contract.Transact(opts, "removeShares", staker, strategy, shares) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0x8c80d4e5. +// +// Solidity: function removeShares(address staker, address strategy, uint256 shares) returns() +func (_IStrategyManager *IStrategyManagerSession) RemoveShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _IStrategyManager.Contract.RemoveShares(&_IStrategyManager.TransactOpts, staker, strategy, shares) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0x8c80d4e5. +// +// Solidity: function removeShares(address staker, address strategy, uint256 shares) returns() +func (_IStrategyManager *IStrategyManagerTransactorSession) RemoveShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _IStrategyManager.Contract.RemoveShares(&_IStrategyManager.TransactOpts, staker, strategy, shares) +} + +// RemoveStrategiesFromDepositWhitelist is a paid mutator transaction binding the contract method 0xb5d8b5b8. +// +// Solidity: function removeStrategiesFromDepositWhitelist(address[] strategiesToRemoveFromWhitelist) returns() +func (_IStrategyManager *IStrategyManagerTransactor) RemoveStrategiesFromDepositWhitelist(opts *bind.TransactOpts, strategiesToRemoveFromWhitelist []common.Address) (*types.Transaction, error) { + return _IStrategyManager.contract.Transact(opts, "removeStrategiesFromDepositWhitelist", strategiesToRemoveFromWhitelist) +} + +// RemoveStrategiesFromDepositWhitelist is a paid mutator transaction binding the contract method 0xb5d8b5b8. +// +// Solidity: function removeStrategiesFromDepositWhitelist(address[] strategiesToRemoveFromWhitelist) returns() +func (_IStrategyManager *IStrategyManagerSession) RemoveStrategiesFromDepositWhitelist(strategiesToRemoveFromWhitelist []common.Address) (*types.Transaction, error) { + return _IStrategyManager.Contract.RemoveStrategiesFromDepositWhitelist(&_IStrategyManager.TransactOpts, strategiesToRemoveFromWhitelist) +} + +// RemoveStrategiesFromDepositWhitelist is a paid mutator transaction binding the contract method 0xb5d8b5b8. +// +// Solidity: function removeStrategiesFromDepositWhitelist(address[] strategiesToRemoveFromWhitelist) returns() +func (_IStrategyManager *IStrategyManagerTransactorSession) RemoveStrategiesFromDepositWhitelist(strategiesToRemoveFromWhitelist []common.Address) (*types.Transaction, error) { + return _IStrategyManager.Contract.RemoveStrategiesFromDepositWhitelist(&_IStrategyManager.TransactOpts, strategiesToRemoveFromWhitelist) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0xc608c7f3. +// +// Solidity: function withdrawSharesAsTokens(address recipient, address strategy, uint256 shares, address token) returns() +func (_IStrategyManager *IStrategyManagerTransactor) WithdrawSharesAsTokens(opts *bind.TransactOpts, recipient common.Address, strategy common.Address, shares *big.Int, token common.Address) (*types.Transaction, error) { + return _IStrategyManager.contract.Transact(opts, "withdrawSharesAsTokens", recipient, strategy, shares, token) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0xc608c7f3. +// +// Solidity: function withdrawSharesAsTokens(address recipient, address strategy, uint256 shares, address token) returns() +func (_IStrategyManager *IStrategyManagerSession) WithdrawSharesAsTokens(recipient common.Address, strategy common.Address, shares *big.Int, token common.Address) (*types.Transaction, error) { + return _IStrategyManager.Contract.WithdrawSharesAsTokens(&_IStrategyManager.TransactOpts, recipient, strategy, shares, token) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0xc608c7f3. +// +// Solidity: function withdrawSharesAsTokens(address recipient, address strategy, uint256 shares, address token) returns() +func (_IStrategyManager *IStrategyManagerTransactorSession) WithdrawSharesAsTokens(recipient common.Address, strategy common.Address, shares *big.Int, token common.Address) (*types.Transaction, error) { + return _IStrategyManager.Contract.WithdrawSharesAsTokens(&_IStrategyManager.TransactOpts, recipient, strategy, shares, token) +} + +// IStrategyManagerDepositIterator is returned from FilterDeposit and is used to iterate over the raw logs and unpacked data for Deposit events raised by the IStrategyManager contract. +type IStrategyManagerDepositIterator struct { + Event *IStrategyManagerDeposit // 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 *IStrategyManagerDepositIterator) 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(IStrategyManagerDeposit) + 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(IStrategyManagerDeposit) + 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 *IStrategyManagerDepositIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IStrategyManagerDepositIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IStrategyManagerDeposit represents a Deposit event raised by the IStrategyManager contract. +type IStrategyManagerDeposit struct { + Staker common.Address + Token common.Address + Strategy common.Address + Shares *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeposit is a free log retrieval operation binding the contract event 0x7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a96. +// +// Solidity: event Deposit(address staker, address token, address strategy, uint256 shares) +func (_IStrategyManager *IStrategyManagerFilterer) FilterDeposit(opts *bind.FilterOpts) (*IStrategyManagerDepositIterator, error) { + + logs, sub, err := _IStrategyManager.contract.FilterLogs(opts, "Deposit") + if err != nil { + return nil, err + } + return &IStrategyManagerDepositIterator{contract: _IStrategyManager.contract, event: "Deposit", logs: logs, sub: sub}, nil +} + +// WatchDeposit is a free log subscription operation binding the contract event 0x7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a96. +// +// Solidity: event Deposit(address staker, address token, address strategy, uint256 shares) +func (_IStrategyManager *IStrategyManagerFilterer) WatchDeposit(opts *bind.WatchOpts, sink chan<- *IStrategyManagerDeposit) (event.Subscription, error) { + + logs, sub, err := _IStrategyManager.contract.WatchLogs(opts, "Deposit") + 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(IStrategyManagerDeposit) + if err := _IStrategyManager.contract.UnpackLog(event, "Deposit", 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 +} + +// ParseDeposit is a log parse operation binding the contract event 0x7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a96. +// +// Solidity: event Deposit(address staker, address token, address strategy, uint256 shares) +func (_IStrategyManager *IStrategyManagerFilterer) ParseDeposit(log types.Log) (*IStrategyManagerDeposit, error) { + event := new(IStrategyManagerDeposit) + if err := _IStrategyManager.contract.UnpackLog(event, "Deposit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IStrategyManagerStrategyAddedToDepositWhitelistIterator is returned from FilterStrategyAddedToDepositWhitelist and is used to iterate over the raw logs and unpacked data for StrategyAddedToDepositWhitelist events raised by the IStrategyManager contract. +type IStrategyManagerStrategyAddedToDepositWhitelistIterator struct { + Event *IStrategyManagerStrategyAddedToDepositWhitelist // 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 *IStrategyManagerStrategyAddedToDepositWhitelistIterator) 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(IStrategyManagerStrategyAddedToDepositWhitelist) + 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(IStrategyManagerStrategyAddedToDepositWhitelist) + 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 *IStrategyManagerStrategyAddedToDepositWhitelistIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IStrategyManagerStrategyAddedToDepositWhitelistIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IStrategyManagerStrategyAddedToDepositWhitelist represents a StrategyAddedToDepositWhitelist event raised by the IStrategyManager contract. +type IStrategyManagerStrategyAddedToDepositWhitelist struct { + Strategy common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyAddedToDepositWhitelist is a free log retrieval operation binding the contract event 0x0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe. +// +// Solidity: event StrategyAddedToDepositWhitelist(address strategy) +func (_IStrategyManager *IStrategyManagerFilterer) FilterStrategyAddedToDepositWhitelist(opts *bind.FilterOpts) (*IStrategyManagerStrategyAddedToDepositWhitelistIterator, error) { + + logs, sub, err := _IStrategyManager.contract.FilterLogs(opts, "StrategyAddedToDepositWhitelist") + if err != nil { + return nil, err + } + return &IStrategyManagerStrategyAddedToDepositWhitelistIterator{contract: _IStrategyManager.contract, event: "StrategyAddedToDepositWhitelist", logs: logs, sub: sub}, nil +} + +// WatchStrategyAddedToDepositWhitelist is a free log subscription operation binding the contract event 0x0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe. +// +// Solidity: event StrategyAddedToDepositWhitelist(address strategy) +func (_IStrategyManager *IStrategyManagerFilterer) WatchStrategyAddedToDepositWhitelist(opts *bind.WatchOpts, sink chan<- *IStrategyManagerStrategyAddedToDepositWhitelist) (event.Subscription, error) { + + logs, sub, err := _IStrategyManager.contract.WatchLogs(opts, "StrategyAddedToDepositWhitelist") + 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(IStrategyManagerStrategyAddedToDepositWhitelist) + if err := _IStrategyManager.contract.UnpackLog(event, "StrategyAddedToDepositWhitelist", 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 +} + +// ParseStrategyAddedToDepositWhitelist is a log parse operation binding the contract event 0x0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe. +// +// Solidity: event StrategyAddedToDepositWhitelist(address strategy) +func (_IStrategyManager *IStrategyManagerFilterer) ParseStrategyAddedToDepositWhitelist(log types.Log) (*IStrategyManagerStrategyAddedToDepositWhitelist, error) { + event := new(IStrategyManagerStrategyAddedToDepositWhitelist) + if err := _IStrategyManager.contract.UnpackLog(event, "StrategyAddedToDepositWhitelist", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IStrategyManagerStrategyRemovedFromDepositWhitelistIterator is returned from FilterStrategyRemovedFromDepositWhitelist and is used to iterate over the raw logs and unpacked data for StrategyRemovedFromDepositWhitelist events raised by the IStrategyManager contract. +type IStrategyManagerStrategyRemovedFromDepositWhitelistIterator struct { + Event *IStrategyManagerStrategyRemovedFromDepositWhitelist // 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 *IStrategyManagerStrategyRemovedFromDepositWhitelistIterator) 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(IStrategyManagerStrategyRemovedFromDepositWhitelist) + 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(IStrategyManagerStrategyRemovedFromDepositWhitelist) + 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 *IStrategyManagerStrategyRemovedFromDepositWhitelistIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IStrategyManagerStrategyRemovedFromDepositWhitelistIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IStrategyManagerStrategyRemovedFromDepositWhitelist represents a StrategyRemovedFromDepositWhitelist event raised by the IStrategyManager contract. +type IStrategyManagerStrategyRemovedFromDepositWhitelist struct { + Strategy common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyRemovedFromDepositWhitelist is a free log retrieval operation binding the contract event 0x4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030. +// +// Solidity: event StrategyRemovedFromDepositWhitelist(address strategy) +func (_IStrategyManager *IStrategyManagerFilterer) FilterStrategyRemovedFromDepositWhitelist(opts *bind.FilterOpts) (*IStrategyManagerStrategyRemovedFromDepositWhitelistIterator, error) { + + logs, sub, err := _IStrategyManager.contract.FilterLogs(opts, "StrategyRemovedFromDepositWhitelist") + if err != nil { + return nil, err + } + return &IStrategyManagerStrategyRemovedFromDepositWhitelistIterator{contract: _IStrategyManager.contract, event: "StrategyRemovedFromDepositWhitelist", logs: logs, sub: sub}, nil +} + +// WatchStrategyRemovedFromDepositWhitelist is a free log subscription operation binding the contract event 0x4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030. +// +// Solidity: event StrategyRemovedFromDepositWhitelist(address strategy) +func (_IStrategyManager *IStrategyManagerFilterer) WatchStrategyRemovedFromDepositWhitelist(opts *bind.WatchOpts, sink chan<- *IStrategyManagerStrategyRemovedFromDepositWhitelist) (event.Subscription, error) { + + logs, sub, err := _IStrategyManager.contract.WatchLogs(opts, "StrategyRemovedFromDepositWhitelist") + 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(IStrategyManagerStrategyRemovedFromDepositWhitelist) + if err := _IStrategyManager.contract.UnpackLog(event, "StrategyRemovedFromDepositWhitelist", 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 +} + +// ParseStrategyRemovedFromDepositWhitelist is a log parse operation binding the contract event 0x4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030. +// +// Solidity: event StrategyRemovedFromDepositWhitelist(address strategy) +func (_IStrategyManager *IStrategyManagerFilterer) ParseStrategyRemovedFromDepositWhitelist(log types.Log) (*IStrategyManagerStrategyRemovedFromDepositWhitelist, error) { + event := new(IStrategyManagerStrategyRemovedFromDepositWhitelist) + if err := _IStrategyManager.contract.UnpackLog(event, "StrategyRemovedFromDepositWhitelist", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IStrategyManagerStrategyWhitelisterChangedIterator is returned from FilterStrategyWhitelisterChanged and is used to iterate over the raw logs and unpacked data for StrategyWhitelisterChanged events raised by the IStrategyManager contract. +type IStrategyManagerStrategyWhitelisterChangedIterator struct { + Event *IStrategyManagerStrategyWhitelisterChanged // 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 *IStrategyManagerStrategyWhitelisterChangedIterator) 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(IStrategyManagerStrategyWhitelisterChanged) + 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(IStrategyManagerStrategyWhitelisterChanged) + 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 *IStrategyManagerStrategyWhitelisterChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IStrategyManagerStrategyWhitelisterChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IStrategyManagerStrategyWhitelisterChanged represents a StrategyWhitelisterChanged event raised by the IStrategyManager contract. +type IStrategyManagerStrategyWhitelisterChanged struct { + PreviousAddress common.Address + NewAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyWhitelisterChanged is a free log retrieval operation binding the contract event 0x4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29. +// +// Solidity: event StrategyWhitelisterChanged(address previousAddress, address newAddress) +func (_IStrategyManager *IStrategyManagerFilterer) FilterStrategyWhitelisterChanged(opts *bind.FilterOpts) (*IStrategyManagerStrategyWhitelisterChangedIterator, error) { + + logs, sub, err := _IStrategyManager.contract.FilterLogs(opts, "StrategyWhitelisterChanged") + if err != nil { + return nil, err + } + return &IStrategyManagerStrategyWhitelisterChangedIterator{contract: _IStrategyManager.contract, event: "StrategyWhitelisterChanged", logs: logs, sub: sub}, nil +} + +// WatchStrategyWhitelisterChanged is a free log subscription operation binding the contract event 0x4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29. +// +// Solidity: event StrategyWhitelisterChanged(address previousAddress, address newAddress) +func (_IStrategyManager *IStrategyManagerFilterer) WatchStrategyWhitelisterChanged(opts *bind.WatchOpts, sink chan<- *IStrategyManagerStrategyWhitelisterChanged) (event.Subscription, error) { + + logs, sub, err := _IStrategyManager.contract.WatchLogs(opts, "StrategyWhitelisterChanged") + 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(IStrategyManagerStrategyWhitelisterChanged) + if err := _IStrategyManager.contract.UnpackLog(event, "StrategyWhitelisterChanged", 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 +} + +// ParseStrategyWhitelisterChanged is a log parse operation binding the contract event 0x4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29. +// +// Solidity: event StrategyWhitelisterChanged(address previousAddress, address newAddress) +func (_IStrategyManager *IStrategyManagerFilterer) ParseStrategyWhitelisterChanged(log types.Log) (*IStrategyManagerStrategyWhitelisterChanged, error) { + event := new(IStrategyManagerStrategyWhitelisterChanged) + if err := _IStrategyManager.contract.UnpackLog(event, "StrategyWhitelisterChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IStrategyManagerUpdatedThirdPartyTransfersForbiddenIterator is returned from FilterUpdatedThirdPartyTransfersForbidden and is used to iterate over the raw logs and unpacked data for UpdatedThirdPartyTransfersForbidden events raised by the IStrategyManager contract. +type IStrategyManagerUpdatedThirdPartyTransfersForbiddenIterator struct { + Event *IStrategyManagerUpdatedThirdPartyTransfersForbidden // 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 *IStrategyManagerUpdatedThirdPartyTransfersForbiddenIterator) 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(IStrategyManagerUpdatedThirdPartyTransfersForbidden) + 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(IStrategyManagerUpdatedThirdPartyTransfersForbidden) + 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 *IStrategyManagerUpdatedThirdPartyTransfersForbiddenIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IStrategyManagerUpdatedThirdPartyTransfersForbiddenIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IStrategyManagerUpdatedThirdPartyTransfersForbidden represents a UpdatedThirdPartyTransfersForbidden event raised by the IStrategyManager contract. +type IStrategyManagerUpdatedThirdPartyTransfersForbidden struct { + Strategy common.Address + Value bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedThirdPartyTransfersForbidden is a free log retrieval operation binding the contract event 0x77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786. +// +// Solidity: event UpdatedThirdPartyTransfersForbidden(address strategy, bool value) +func (_IStrategyManager *IStrategyManagerFilterer) FilterUpdatedThirdPartyTransfersForbidden(opts *bind.FilterOpts) (*IStrategyManagerUpdatedThirdPartyTransfersForbiddenIterator, error) { + + logs, sub, err := _IStrategyManager.contract.FilterLogs(opts, "UpdatedThirdPartyTransfersForbidden") + if err != nil { + return nil, err + } + return &IStrategyManagerUpdatedThirdPartyTransfersForbiddenIterator{contract: _IStrategyManager.contract, event: "UpdatedThirdPartyTransfersForbidden", logs: logs, sub: sub}, nil +} + +// WatchUpdatedThirdPartyTransfersForbidden is a free log subscription operation binding the contract event 0x77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786. +// +// Solidity: event UpdatedThirdPartyTransfersForbidden(address strategy, bool value) +func (_IStrategyManager *IStrategyManagerFilterer) WatchUpdatedThirdPartyTransfersForbidden(opts *bind.WatchOpts, sink chan<- *IStrategyManagerUpdatedThirdPartyTransfersForbidden) (event.Subscription, error) { + + logs, sub, err := _IStrategyManager.contract.WatchLogs(opts, "UpdatedThirdPartyTransfersForbidden") + 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(IStrategyManagerUpdatedThirdPartyTransfersForbidden) + if err := _IStrategyManager.contract.UnpackLog(event, "UpdatedThirdPartyTransfersForbidden", 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 +} + +// ParseUpdatedThirdPartyTransfersForbidden is a log parse operation binding the contract event 0x77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786. +// +// Solidity: event UpdatedThirdPartyTransfersForbidden(address strategy, bool value) +func (_IStrategyManager *IStrategyManagerFilterer) ParseUpdatedThirdPartyTransfersForbidden(log types.Log) (*IStrategyManagerUpdatedThirdPartyTransfersForbidden, error) { + event := new(IStrategyManagerUpdatedThirdPartyTransfersForbidden) + if err := _IStrategyManager.contract.UnpackLog(event, "UpdatedThirdPartyTransfersForbidden", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IStrategyManager/tmp.abi b/pkg/bindings/IStrategyManager/tmp.abi new file mode 100644 index 000000000..57baf1be8 --- /dev/null +++ b/pkg/bindings/IStrategyManager/tmp.abi @@ -0,0 +1,549 @@ +[ + { + "type": "function", + "name": "addShares", + "inputs": [ + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "addStrategiesToDepositWhitelist", + "inputs": [ + { + "name": "strategiesToWhitelist", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "thirdPartyTransfersForbiddenValues", + "type": "bool[]", + "internalType": "bool[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "calculateWithdrawalRoot", + "inputs": [ + { + "name": "queuedWithdrawal", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_QueuedWithdrawal", + "components": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "withdrawerAndNonce", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_WithdrawerAndNonce", + "components": [ + { + "name": "withdrawer", + "type": "address", + "internalType": "address" + }, + { + "name": "nonce", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "name": "withdrawalStartBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "delegatedAddress", + "type": "address", + "internalType": "address" + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "delegation", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IDelegationManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "depositIntoStrategy", + "inputs": [ + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "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": "contract IStrategy" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "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": "contract IEigenPodManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getDeposits", + "inputs": [ + { + "name": "staker", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "migrateQueuedWithdrawal", + "inputs": [ + { + "name": "queuedWithdrawal", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_QueuedWithdrawal", + "components": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "withdrawerAndNonce", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_WithdrawerAndNonce", + "components": [ + { + "name": "withdrawer", + "type": "address", + "internalType": "address" + }, + { + "name": "nonce", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "name": "withdrawalStartBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "delegatedAddress", + "type": "address", + "internalType": "address" + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + }, + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "removeShares", + "inputs": [ + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "removeStrategiesFromDepositWhitelist", + "inputs": [ + { + "name": "strategiesToRemoveFromWhitelist", + "type": "address[]", + "internalType": "contract IStrategy[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "slasher", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ISlasher" + } + ], + "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": "contract IStrategy" + } + ], + "outputs": [ + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + } + ], + "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": "contract IStrategy" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "withdrawSharesAsTokens", + "inputs": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Deposit", + "inputs": [ + { + "name": "staker", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "indexed": false, + "internalType": "contract IERC20" + }, + { + "name": "strategy", + "type": "address", + "indexed": false, + "internalType": "contract IStrategy" + }, + { + "name": "shares", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StrategyAddedToDepositWhitelist", + "inputs": [ + { + "name": "strategy", + "type": "address", + "indexed": false, + "internalType": "contract IStrategy" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StrategyRemovedFromDepositWhitelist", + "inputs": [ + { + "name": "strategy", + "type": "address", + "indexed": false, + "internalType": "contract IStrategy" + } + ], + "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": "contract IStrategy" + }, + { + "name": "value", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/IStrategyManager/tmp.bin b/pkg/bindings/IStrategyManager/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IStrategyManager/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/IWhitelister/binding.go b/pkg/bindings/IWhitelister/binding.go new file mode 100644 index 000000000..e4afb3731 --- /dev/null +++ b/pkg/bindings/IWhitelister/binding.go @@ -0,0 +1,346 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IWhitelister + +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 +) + +// IDelegationManagerQueuedWithdrawalParams is an auto generated low-level Go binding around an user-defined struct. +type IDelegationManagerQueuedWithdrawalParams struct { + Strategies []common.Address + Shares []*big.Int + Withdrawer common.Address +} + +// 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 +} + +// 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\"}]", +} + +// IWhitelisterABI is the input ABI used to generate the binding from. +// Deprecated: Use IWhitelisterMetaData.ABI instead. +var IWhitelisterABI = IWhitelisterMetaData.ABI + +// IWhitelister is an auto generated Go binding around an Ethereum contract. +type IWhitelister struct { + IWhitelisterCaller // Read-only binding to the contract + IWhitelisterTransactor // Write-only binding to the contract + IWhitelisterFilterer // Log filterer for contract events +} + +// IWhitelisterCaller is an auto generated read-only Go binding around an Ethereum contract. +type IWhitelisterCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IWhitelisterTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IWhitelisterTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IWhitelisterFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IWhitelisterFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IWhitelisterSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IWhitelisterSession struct { + Contract *IWhitelister // 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 +} + +// IWhitelisterCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IWhitelisterCallerSession struct { + Contract *IWhitelisterCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IWhitelisterTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IWhitelisterTransactorSession struct { + Contract *IWhitelisterTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IWhitelisterRaw is an auto generated low-level Go binding around an Ethereum contract. +type IWhitelisterRaw struct { + Contract *IWhitelister // Generic contract binding to access the raw methods on +} + +// IWhitelisterCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IWhitelisterCallerRaw struct { + Contract *IWhitelisterCaller // Generic read-only contract binding to access the raw methods on +} + +// IWhitelisterTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IWhitelisterTransactorRaw struct { + Contract *IWhitelisterTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIWhitelister creates a new instance of IWhitelister, bound to a specific deployed contract. +func NewIWhitelister(address common.Address, backend bind.ContractBackend) (*IWhitelister, error) { + contract, err := bindIWhitelister(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IWhitelister{IWhitelisterCaller: IWhitelisterCaller{contract: contract}, IWhitelisterTransactor: IWhitelisterTransactor{contract: contract}, IWhitelisterFilterer: IWhitelisterFilterer{contract: contract}}, nil +} + +// NewIWhitelisterCaller creates a new read-only instance of IWhitelister, bound to a specific deployed contract. +func NewIWhitelisterCaller(address common.Address, caller bind.ContractCaller) (*IWhitelisterCaller, error) { + contract, err := bindIWhitelister(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IWhitelisterCaller{contract: contract}, nil +} + +// NewIWhitelisterTransactor creates a new write-only instance of IWhitelister, bound to a specific deployed contract. +func NewIWhitelisterTransactor(address common.Address, transactor bind.ContractTransactor) (*IWhitelisterTransactor, error) { + contract, err := bindIWhitelister(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IWhitelisterTransactor{contract: contract}, nil +} + +// NewIWhitelisterFilterer creates a new log filterer instance of IWhitelister, bound to a specific deployed contract. +func NewIWhitelisterFilterer(address common.Address, filterer bind.ContractFilterer) (*IWhitelisterFilterer, error) { + contract, err := bindIWhitelister(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IWhitelisterFilterer{contract: contract}, nil +} + +// bindIWhitelister binds a generic wrapper to an already deployed contract. +func bindIWhitelister(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IWhitelisterMetaData.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 (_IWhitelister *IWhitelisterRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IWhitelister.Contract.IWhitelisterCaller.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 (_IWhitelister *IWhitelisterRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IWhitelister.Contract.IWhitelisterTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IWhitelister *IWhitelisterRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IWhitelister.Contract.IWhitelisterTransactor.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 (_IWhitelister *IWhitelisterCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IWhitelister.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 (_IWhitelister *IWhitelisterTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IWhitelister.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IWhitelister *IWhitelisterTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IWhitelister.Contract.contract.Transact(opts, method, params...) +} + +// CallAddress is a paid mutator transaction binding the contract method 0xf6e8f39d. +// +// Solidity: function callAddress(address to, bytes data) payable returns(bytes) +func (_IWhitelister *IWhitelisterTransactor) CallAddress(opts *bind.TransactOpts, to common.Address, data []byte) (*types.Transaction, error) { + return _IWhitelister.contract.Transact(opts, "callAddress", to, data) +} + +// CallAddress is a paid mutator transaction binding the contract method 0xf6e8f39d. +// +// Solidity: function callAddress(address to, bytes data) payable returns(bytes) +func (_IWhitelister *IWhitelisterSession) CallAddress(to common.Address, data []byte) (*types.Transaction, error) { + return _IWhitelister.Contract.CallAddress(&_IWhitelister.TransactOpts, to, data) +} + +// CallAddress is a paid mutator transaction binding the contract method 0xf6e8f39d. +// +// Solidity: function callAddress(address to, bytes data) payable returns(bytes) +func (_IWhitelister *IWhitelisterTransactorSession) CallAddress(to common.Address, data []byte) (*types.Transaction, error) { + return _IWhitelister.Contract.CallAddress(&_IWhitelister.TransactOpts, to, data) +} + +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x063dcd50. +// +// Solidity: function completeQueuedWithdrawal(address staker, (address,address,address,uint256,uint32,address[],uint256[]) queuedWithdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns(bytes) +func (_IWhitelister *IWhitelisterTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, staker common.Address, queuedWithdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _IWhitelister.contract.Transact(opts, "completeQueuedWithdrawal", staker, queuedWithdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +} + +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x063dcd50. +// +// Solidity: function completeQueuedWithdrawal(address staker, (address,address,address,uint256,uint32,address[],uint256[]) queuedWithdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns(bytes) +func (_IWhitelister *IWhitelisterSession) CompleteQueuedWithdrawal(staker common.Address, queuedWithdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _IWhitelister.Contract.CompleteQueuedWithdrawal(&_IWhitelister.TransactOpts, staker, queuedWithdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +} + +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x063dcd50. +// +// Solidity: function completeQueuedWithdrawal(address staker, (address,address,address,uint256,uint32,address[],uint256[]) queuedWithdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns(bytes) +func (_IWhitelister *IWhitelisterTransactorSession) CompleteQueuedWithdrawal(staker common.Address, queuedWithdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _IWhitelister.Contract.CompleteQueuedWithdrawal(&_IWhitelister.TransactOpts, staker, queuedWithdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xa49ca158. +// +// Solidity: function depositIntoStrategy(address staker, address strategy, address token, uint256 amount) returns(bytes) +func (_IWhitelister *IWhitelisterTransactor) DepositIntoStrategy(opts *bind.TransactOpts, staker common.Address, strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _IWhitelister.contract.Transact(opts, "depositIntoStrategy", staker, strategy, token, amount) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xa49ca158. +// +// Solidity: function depositIntoStrategy(address staker, address strategy, address token, uint256 amount) returns(bytes) +func (_IWhitelister *IWhitelisterSession) DepositIntoStrategy(staker common.Address, strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _IWhitelister.Contract.DepositIntoStrategy(&_IWhitelister.TransactOpts, staker, strategy, token, amount) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xa49ca158. +// +// Solidity: function depositIntoStrategy(address staker, address strategy, address token, uint256 amount) returns(bytes) +func (_IWhitelister *IWhitelisterTransactorSession) DepositIntoStrategy(staker common.Address, strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _IWhitelister.Contract.DepositIntoStrategy(&_IWhitelister.TransactOpts, staker, strategy, token, amount) +} + +// GetStaker is a paid mutator transaction binding the contract method 0xa23c44b1. +// +// Solidity: function getStaker(address operator) returns(address) +func (_IWhitelister *IWhitelisterTransactor) GetStaker(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _IWhitelister.contract.Transact(opts, "getStaker", operator) +} + +// GetStaker is a paid mutator transaction binding the contract method 0xa23c44b1. +// +// Solidity: function getStaker(address operator) returns(address) +func (_IWhitelister *IWhitelisterSession) GetStaker(operator common.Address) (*types.Transaction, error) { + return _IWhitelister.Contract.GetStaker(&_IWhitelister.TransactOpts, operator) +} + +// GetStaker is a paid mutator transaction binding the contract method 0xa23c44b1. +// +// Solidity: function getStaker(address operator) returns(address) +func (_IWhitelister *IWhitelisterTransactorSession) GetStaker(operator common.Address) (*types.Transaction, error) { + return _IWhitelister.Contract.GetStaker(&_IWhitelister.TransactOpts, operator) +} + +// QueueWithdrawal is a paid mutator transaction binding the contract method 0xa76a9d2d. +// +// Solidity: function queueWithdrawal(address staker, (address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes) +func (_IWhitelister *IWhitelisterTransactor) QueueWithdrawal(opts *bind.TransactOpts, staker common.Address, queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _IWhitelister.contract.Transact(opts, "queueWithdrawal", staker, queuedWithdrawalParams) +} + +// QueueWithdrawal is a paid mutator transaction binding the contract method 0xa76a9d2d. +// +// Solidity: function queueWithdrawal(address staker, (address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes) +func (_IWhitelister *IWhitelisterSession) QueueWithdrawal(staker common.Address, queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _IWhitelister.Contract.QueueWithdrawal(&_IWhitelister.TransactOpts, staker, queuedWithdrawalParams) +} + +// QueueWithdrawal is a paid mutator transaction binding the contract method 0xa76a9d2d. +// +// Solidity: function queueWithdrawal(address staker, (address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes) +func (_IWhitelister *IWhitelisterTransactorSession) QueueWithdrawal(staker common.Address, queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _IWhitelister.Contract.QueueWithdrawal(&_IWhitelister.TransactOpts, staker, queuedWithdrawalParams) +} + +// Transfer is a paid mutator transaction binding the contract method 0xf18d03cc. +// +// Solidity: function transfer(address staker, address token, address to, uint256 amount) returns(bytes) +func (_IWhitelister *IWhitelisterTransactor) Transfer(opts *bind.TransactOpts, staker common.Address, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IWhitelister.contract.Transact(opts, "transfer", staker, token, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xf18d03cc. +// +// Solidity: function transfer(address staker, address token, address to, uint256 amount) returns(bytes) +func (_IWhitelister *IWhitelisterSession) Transfer(staker common.Address, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IWhitelister.Contract.Transfer(&_IWhitelister.TransactOpts, staker, token, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xf18d03cc. +// +// Solidity: function transfer(address staker, address token, address to, uint256 amount) returns(bytes) +func (_IWhitelister *IWhitelisterTransactorSession) Transfer(staker common.Address, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _IWhitelister.Contract.Transfer(&_IWhitelister.TransactOpts, staker, token, to, amount) +} + +// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address operator) returns() +func (_IWhitelister *IWhitelisterTransactor) Whitelist(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _IWhitelister.contract.Transact(opts, "whitelist", operator) +} + +// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address operator) returns() +func (_IWhitelister *IWhitelisterSession) Whitelist(operator common.Address) (*types.Transaction, error) { + return _IWhitelister.Contract.Whitelist(&_IWhitelister.TransactOpts, operator) +} + +// Whitelist is a paid mutator transaction binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address operator) returns() +func (_IWhitelister *IWhitelisterTransactorSession) Whitelist(operator common.Address) (*types.Transaction, error) { + return _IWhitelister.Contract.Whitelist(&_IWhitelister.TransactOpts, operator) +} diff --git a/pkg/bindings/IWhitelister/tmp.abi b/pkg/bindings/IWhitelister/tmp.abi new file mode 100644 index 000000000..69ed9f391 --- /dev/null +++ b/pkg/bindings/IWhitelister/tmp.abi @@ -0,0 +1,243 @@ +[ + { + "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": "struct IDelegationManager.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": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + } + ] + }, + { + "name": "tokens", + "type": "address[]", + "internalType": "contract IERC20[]" + }, + { + "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": "contract IStrategy" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "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": "struct IDelegationManager.QueuedWithdrawalParams[]", + "components": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "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" + } +] diff --git a/pkg/bindings/IWhitelister/tmp.bin b/pkg/bindings/IWhitelister/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/IWhitelister/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/Merkle/binding.go b/pkg/bindings/Merkle/binding.go new file mode 100644 index 000000000..3f022578f --- /dev/null +++ b/pkg/bindings/Merkle/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 Merkle + +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 +) + +// MerkleMetaData contains all meta data concerning the Merkle contract. +var MerkleMetaData = &bind.MetaData{ + ABI: "[]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ded4edeff5ecb40cbe8c1964a76307e4be3cbba93d70942a4d39c2d94755d4cd64736f6c634300080c0033", +} + +// MerkleABI is the input ABI used to generate the binding from. +// Deprecated: Use MerkleMetaData.ABI instead. +var MerkleABI = MerkleMetaData.ABI + +// MerkleBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use MerkleMetaData.Bin instead. +var MerkleBin = MerkleMetaData.Bin + +// DeployMerkle deploys a new Ethereum contract, binding an instance of Merkle to it. +func DeployMerkle(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Merkle, error) { + parsed, err := MerkleMetaData.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(MerkleBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Merkle{MerkleCaller: MerkleCaller{contract: contract}, MerkleTransactor: MerkleTransactor{contract: contract}, MerkleFilterer: MerkleFilterer{contract: contract}}, nil +} + +// Merkle is an auto generated Go binding around an Ethereum contract. +type Merkle struct { + MerkleCaller // Read-only binding to the contract + MerkleTransactor // Write-only binding to the contract + MerkleFilterer // Log filterer for contract events +} + +// MerkleCaller is an auto generated read-only Go binding around an Ethereum contract. +type MerkleCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MerkleTransactor is an auto generated write-only Go binding around an Ethereum contract. +type MerkleTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MerkleFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type MerkleFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MerkleSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type MerkleSession struct { + Contract *Merkle // 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 +} + +// MerkleCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type MerkleCallerSession struct { + Contract *MerkleCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// MerkleTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type MerkleTransactorSession struct { + Contract *MerkleTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// MerkleRaw is an auto generated low-level Go binding around an Ethereum contract. +type MerkleRaw struct { + Contract *Merkle // Generic contract binding to access the raw methods on +} + +// MerkleCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type MerkleCallerRaw struct { + Contract *MerkleCaller // Generic read-only contract binding to access the raw methods on +} + +// MerkleTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type MerkleTransactorRaw struct { + Contract *MerkleTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewMerkle creates a new instance of Merkle, bound to a specific deployed contract. +func NewMerkle(address common.Address, backend bind.ContractBackend) (*Merkle, error) { + contract, err := bindMerkle(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Merkle{MerkleCaller: MerkleCaller{contract: contract}, MerkleTransactor: MerkleTransactor{contract: contract}, MerkleFilterer: MerkleFilterer{contract: contract}}, nil +} + +// NewMerkleCaller creates a new read-only instance of Merkle, bound to a specific deployed contract. +func NewMerkleCaller(address common.Address, caller bind.ContractCaller) (*MerkleCaller, error) { + contract, err := bindMerkle(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MerkleCaller{contract: contract}, nil +} + +// NewMerkleTransactor creates a new write-only instance of Merkle, bound to a specific deployed contract. +func NewMerkleTransactor(address common.Address, transactor bind.ContractTransactor) (*MerkleTransactor, error) { + contract, err := bindMerkle(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MerkleTransactor{contract: contract}, nil +} + +// NewMerkleFilterer creates a new log filterer instance of Merkle, bound to a specific deployed contract. +func NewMerkleFilterer(address common.Address, filterer bind.ContractFilterer) (*MerkleFilterer, error) { + contract, err := bindMerkle(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MerkleFilterer{contract: contract}, nil +} + +// bindMerkle binds a generic wrapper to an already deployed contract. +func bindMerkle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := MerkleMetaData.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 (_Merkle *MerkleRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Merkle.Contract.MerkleCaller.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 (_Merkle *MerkleRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Merkle.Contract.MerkleTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Merkle *MerkleRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Merkle.Contract.MerkleTransactor.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 (_Merkle *MerkleCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Merkle.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 (_Merkle *MerkleTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Merkle.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Merkle *MerkleTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Merkle.Contract.contract.Transact(opts, method, params...) +} diff --git a/pkg/bindings/Merkle/tmp.abi b/pkg/bindings/Merkle/tmp.abi new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/pkg/bindings/Merkle/tmp.abi @@ -0,0 +1 @@ +[] diff --git a/pkg/bindings/Merkle/tmp.bin b/pkg/bindings/Merkle/tmp.bin new file mode 100644 index 000000000..da9aaa474 --- /dev/null +++ b/pkg/bindings/Merkle/tmp.bin @@ -0,0 +1 @@ +0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ded4edeff5ecb40cbe8c1964a76307e4be3cbba93d70942a4d39c2d94755d4cd64736f6c634300080c0033 diff --git a/pkg/bindings/Pausable/binding.go b/pkg/bindings/Pausable/binding.go new file mode 100644 index 000000000..c680341d5 --- /dev/null +++ b/pkg/bindings/Pausable/binding.go @@ -0,0 +1,805 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package Pausable + +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 +) + +// 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: "0x608060405234801561001057600080fd5b506107c2806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80635ac86ab71161005b5780635ac86ab7146100b25780635c975abb146100e6578063886f1195146100f7578063fabc1cbc1461012257600080fd5b806310d67a2f14610082578063136439dd14610097578063595c6a67146100aa575b600080fd5b61009561009036600461065b565b610135565b005b6100956100a536600461067f565b6101ef565b61009561032e565b6100d16100c0366004610698565b6001805460ff9092161b9081161490565b60405190151581526020015b60405180910390f35b6001546040519081526020016100dd565b60005461010a906001600160a01b031681565b6040516001600160a01b0390911681526020016100dd565b61009561013036600461067f565b6103f5565b60008054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101aa91906106bb565b6001600160a01b0316336001600160a01b0316146101e35760405162461bcd60e51b81526004016101da906106d8565b60405180910390fd5b6101ec8161054f565b50565b60005460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025b9190610722565b6102775760405162461bcd60e51b81526004016101da90610744565b600154818116146102f05760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016101da565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60005460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039a9190610722565b6103b65760405162461bcd60e51b81526004016101da90610744565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60008054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046a91906106bb565b6001600160a01b0316336001600160a01b03161461049a5760405162461bcd60e51b81526004016101da906106d8565b6001541981196001541916146105185760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016101da565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610323565b6001600160a01b0381166105dd5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016101da565b600054604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811681146101ec57600080fd5b60006020828403121561066d57600080fd5b813561067881610646565b9392505050565b60006020828403121561069157600080fd5b5035919050565b6000602082840312156106aa57600080fd5b813560ff8116811461067857600080fd5b6000602082840312156106cd57600080fd5b815161067881610646565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561073457600080fd5b8151801515811461067857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b60608201526080019056fea26469706673582212206ec8660c90f9020eac1acdb7cf9763b01b3517dc730fb33c9aceb4c71197896f64736f6c634300080c0033", +} + +// PausableABI is the input ABI used to generate the binding from. +// Deprecated: Use PausableMetaData.ABI instead. +var PausableABI = PausableMetaData.ABI + +// PausableBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use PausableMetaData.Bin instead. +var PausableBin = PausableMetaData.Bin + +// DeployPausable deploys a new Ethereum contract, binding an instance of Pausable to it. +func DeployPausable(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Pausable, error) { + parsed, err := PausableMetaData.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(PausableBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Pausable{PausableCaller: PausableCaller{contract: contract}, PausableTransactor: PausableTransactor{contract: contract}, PausableFilterer: PausableFilterer{contract: contract}}, nil +} + +// Pausable is an auto generated Go binding around an Ethereum contract. +type Pausable struct { + PausableCaller // Read-only binding to the contract + PausableTransactor // Write-only binding to the contract + PausableFilterer // Log filterer for contract events +} + +// PausableCaller is an auto generated read-only Go binding around an Ethereum contract. +type PausableCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PausableTransactor is an auto generated write-only Go binding around an Ethereum contract. +type PausableTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PausableFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type PausableFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PausableSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type PausableSession struct { + Contract *Pausable // 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 +} + +// PausableCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type PausableCallerSession struct { + Contract *PausableCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// PausableTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type PausableTransactorSession struct { + Contract *PausableTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PausableRaw is an auto generated low-level Go binding around an Ethereum contract. +type PausableRaw struct { + Contract *Pausable // Generic contract binding to access the raw methods on +} + +// PausableCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type PausableCallerRaw struct { + Contract *PausableCaller // Generic read-only contract binding to access the raw methods on +} + +// PausableTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type PausableTransactorRaw struct { + Contract *PausableTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewPausable creates a new instance of Pausable, bound to a specific deployed contract. +func NewPausable(address common.Address, backend bind.ContractBackend) (*Pausable, error) { + contract, err := bindPausable(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Pausable{PausableCaller: PausableCaller{contract: contract}, PausableTransactor: PausableTransactor{contract: contract}, PausableFilterer: PausableFilterer{contract: contract}}, nil +} + +// NewPausableCaller creates a new read-only instance of Pausable, bound to a specific deployed contract. +func NewPausableCaller(address common.Address, caller bind.ContractCaller) (*PausableCaller, error) { + contract, err := bindPausable(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &PausableCaller{contract: contract}, nil +} + +// NewPausableTransactor creates a new write-only instance of Pausable, bound to a specific deployed contract. +func NewPausableTransactor(address common.Address, transactor bind.ContractTransactor) (*PausableTransactor, error) { + contract, err := bindPausable(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &PausableTransactor{contract: contract}, nil +} + +// NewPausableFilterer creates a new log filterer instance of Pausable, bound to a specific deployed contract. +func NewPausableFilterer(address common.Address, filterer bind.ContractFilterer) (*PausableFilterer, error) { + contract, err := bindPausable(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &PausableFilterer{contract: contract}, nil +} + +// bindPausable binds a generic wrapper to an already deployed contract. +func bindPausable(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := PausableMetaData.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 (_Pausable *PausableRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Pausable.Contract.PausableCaller.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 (_Pausable *PausableRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Pausable.Contract.PausableTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Pausable *PausableRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Pausable.Contract.PausableTransactor.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 (_Pausable *PausableCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Pausable.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 (_Pausable *PausableTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Pausable.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Pausable *PausableTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Pausable.Contract.contract.Transact(opts, method, params...) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_Pausable *PausableCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _Pausable.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 (_Pausable *PausableSession) Paused(index uint8) (bool, error) { + return _Pausable.Contract.Paused(&_Pausable.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_Pausable *PausableCallerSession) Paused(index uint8) (bool, error) { + return _Pausable.Contract.Paused(&_Pausable.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_Pausable *PausableCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Pausable.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 (_Pausable *PausableSession) Paused0() (*big.Int, error) { + return _Pausable.Contract.Paused0(&_Pausable.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_Pausable *PausableCallerSession) Paused0() (*big.Int, error) { + return _Pausable.Contract.Paused0(&_Pausable.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_Pausable *PausableCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Pausable.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 (_Pausable *PausableSession) PauserRegistry() (common.Address, error) { + return _Pausable.Contract.PauserRegistry(&_Pausable.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_Pausable *PausableCallerSession) PauserRegistry() (common.Address, error) { + return _Pausable.Contract.PauserRegistry(&_Pausable.CallOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_Pausable *PausableTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _Pausable.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_Pausable *PausableSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _Pausable.Contract.Pause(&_Pausable.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_Pausable *PausableTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _Pausable.Contract.Pause(&_Pausable.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_Pausable *PausableTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Pausable.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_Pausable *PausableSession) PauseAll() (*types.Transaction, error) { + return _Pausable.Contract.PauseAll(&_Pausable.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_Pausable *PausableTransactorSession) PauseAll() (*types.Transaction, error) { + return _Pausable.Contract.PauseAll(&_Pausable.TransactOpts) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_Pausable *PausableTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _Pausable.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_Pausable *PausableSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _Pausable.Contract.SetPauserRegistry(&_Pausable.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_Pausable *PausableTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _Pausable.Contract.SetPauserRegistry(&_Pausable.TransactOpts, newPauserRegistry) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_Pausable *PausableTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _Pausable.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_Pausable *PausableSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _Pausable.Contract.Unpause(&_Pausable.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_Pausable *PausableTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _Pausable.Contract.Unpause(&_Pausable.TransactOpts, newPausedStatus) +} + +// PausablePausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the Pausable contract. +type PausablePausedIterator struct { + Event *PausablePaused // 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 *PausablePausedIterator) 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(PausablePaused) + 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(PausablePaused) + 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 *PausablePausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PausablePausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PausablePaused represents a Paused event raised by the Pausable contract. +type PausablePaused 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 (_Pausable *PausableFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*PausablePausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _Pausable.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &PausablePausedIterator{contract: _Pausable.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 (_Pausable *PausableFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *PausablePaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _Pausable.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(PausablePaused) + if err := _Pausable.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 (_Pausable *PausableFilterer) ParsePaused(log types.Log) (*PausablePaused, error) { + event := new(PausablePaused) + if err := _Pausable.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PausablePauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the Pausable contract. +type PausablePauserRegistrySetIterator struct { + Event *PausablePauserRegistrySet // 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 *PausablePauserRegistrySetIterator) 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(PausablePauserRegistrySet) + 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(PausablePauserRegistrySet) + 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 *PausablePauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PausablePauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PausablePauserRegistrySet represents a PauserRegistrySet event raised by the Pausable contract. +type PausablePauserRegistrySet 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 (_Pausable *PausableFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*PausablePauserRegistrySetIterator, error) { + + logs, sub, err := _Pausable.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &PausablePauserRegistrySetIterator{contract: _Pausable.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 (_Pausable *PausableFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *PausablePauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _Pausable.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(PausablePauserRegistrySet) + if err := _Pausable.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 (_Pausable *PausableFilterer) ParsePauserRegistrySet(log types.Log) (*PausablePauserRegistrySet, error) { + event := new(PausablePauserRegistrySet) + if err := _Pausable.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PausableUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the Pausable contract. +type PausableUnpausedIterator struct { + Event *PausableUnpaused // 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 *PausableUnpausedIterator) 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(PausableUnpaused) + 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(PausableUnpaused) + 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 *PausableUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PausableUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PausableUnpaused represents a Unpaused event raised by the Pausable contract. +type PausableUnpaused 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 (_Pausable *PausableFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*PausableUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _Pausable.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &PausableUnpausedIterator{contract: _Pausable.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 (_Pausable *PausableFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *PausableUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _Pausable.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(PausableUnpaused) + if err := _Pausable.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 (_Pausable *PausableFilterer) ParseUnpaused(log types.Log) (*PausableUnpaused, error) { + event := new(PausableUnpaused) + if err := _Pausable.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/Pausable/tmp.abi b/pkg/bindings/Pausable/tmp.abi new file mode 100644 index 000000000..cb2146604 --- /dev/null +++ b/pkg/bindings/Pausable/tmp.abi @@ -0,0 +1,150 @@ +[ + { + "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": "contract IPauserRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setPauserRegistry", + "inputs": [ + { + "name": "newPauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "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": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "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 + } +] diff --git a/pkg/bindings/Pausable/tmp.bin b/pkg/bindings/Pausable/tmp.bin new file mode 100644 index 000000000..07a168923 --- /dev/null +++ b/pkg/bindings/Pausable/tmp.bin @@ -0,0 +1 @@ +0x608060405234801561001057600080fd5b506107c2806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80635ac86ab71161005b5780635ac86ab7146100b25780635c975abb146100e6578063886f1195146100f7578063fabc1cbc1461012257600080fd5b806310d67a2f14610082578063136439dd14610097578063595c6a67146100aa575b600080fd5b61009561009036600461065b565b610135565b005b6100956100a536600461067f565b6101ef565b61009561032e565b6100d16100c0366004610698565b6001805460ff9092161b9081161490565b60405190151581526020015b60405180910390f35b6001546040519081526020016100dd565b60005461010a906001600160a01b031681565b6040516001600160a01b0390911681526020016100dd565b61009561013036600461067f565b6103f5565b60008054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101aa91906106bb565b6001600160a01b0316336001600160a01b0316146101e35760405162461bcd60e51b81526004016101da906106d8565b60405180910390fd5b6101ec8161054f565b50565b60005460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025b9190610722565b6102775760405162461bcd60e51b81526004016101da90610744565b600154818116146102f05760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016101da565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60005460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039a9190610722565b6103b65760405162461bcd60e51b81526004016101da90610744565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60008054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046a91906106bb565b6001600160a01b0316336001600160a01b03161461049a5760405162461bcd60e51b81526004016101da906106d8565b6001541981196001541916146105185760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016101da565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610323565b6001600160a01b0381166105dd5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016101da565b600054604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811681146101ec57600080fd5b60006020828403121561066d57600080fd5b813561067881610646565b9392505050565b60006020828403121561069157600080fd5b5035919050565b6000602082840312156106aa57600080fd5b813560ff8116811461067857600080fd5b6000602082840312156106cd57600080fd5b815161067881610646565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561073457600080fd5b8151801515811461067857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b60608201526080019056fea26469706673582212206ec8660c90f9020eac1acdb7cf9763b01b3517dc730fb33c9aceb4c71197896f64736f6c634300080c0033 diff --git a/pkg/bindings/PauserRegistry/binding.go b/pkg/bindings/PauserRegistry/binding.go new file mode 100644 index 000000000..121537674 --- /dev/null +++ b/pkg/bindings/PauserRegistry/binding.go @@ -0,0 +1,577 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package PauserRegistry + +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 +) + +// 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: "0x608060405234801561001057600080fd5b5060405161077838038061077883398101604081905261002f91610263565b60005b82518110156100775761006583828151811061005057610050610339565b6020026020010151600161008860201b60201c565b8061006f8161034f565b915050610032565b506100818161015a565b5050610378565b6001600160a01b0382166100f95760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b60648201526084015b60405180910390fd5b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b0381166101c85760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b60648201526084016100f0565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b038116811461025e57600080fd5b919050565b6000806040838503121561027657600080fd5b82516001600160401b038082111561028d57600080fd5b818501915085601f8301126102a157600080fd5b81516020828211156102b5576102b5610231565b8160051b604051601f19603f830116810181811086821117156102da576102da610231565b6040529283528183019350848101820192898411156102f857600080fd5b948201945b8386101561031d5761030e86610247565b855294820194938201936102fd565b965061032c9050878201610247565b9450505050509250929050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561037157634e487b7160e01b600052601160045260246000fd5b5060010190565b6103f1806103876000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea26469706673582212209d16b337e572efd6aa7c9a1f129223998361e2c66fd3f3315454d1a0590f6f0e64736f6c634300080c0033", +} + +// PauserRegistryABI is the input ABI used to generate the binding from. +// Deprecated: Use PauserRegistryMetaData.ABI instead. +var PauserRegistryABI = PauserRegistryMetaData.ABI + +// PauserRegistryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use PauserRegistryMetaData.Bin instead. +var PauserRegistryBin = PauserRegistryMetaData.Bin + +// DeployPauserRegistry deploys a new Ethereum contract, binding an instance of PauserRegistry to it. +func DeployPauserRegistry(auth *bind.TransactOpts, backend bind.ContractBackend, _pausers []common.Address, _unpauser common.Address) (common.Address, *types.Transaction, *PauserRegistry, error) { + parsed, err := PauserRegistryMetaData.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(PauserRegistryBin), backend, _pausers, _unpauser) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &PauserRegistry{PauserRegistryCaller: PauserRegistryCaller{contract: contract}, PauserRegistryTransactor: PauserRegistryTransactor{contract: contract}, PauserRegistryFilterer: PauserRegistryFilterer{contract: contract}}, nil +} + +// PauserRegistry is an auto generated Go binding around an Ethereum contract. +type PauserRegistry struct { + PauserRegistryCaller // Read-only binding to the contract + PauserRegistryTransactor // Write-only binding to the contract + PauserRegistryFilterer // Log filterer for contract events +} + +// PauserRegistryCaller is an auto generated read-only Go binding around an Ethereum contract. +type PauserRegistryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PauserRegistryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type PauserRegistryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PauserRegistryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type PauserRegistryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PauserRegistrySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type PauserRegistrySession struct { + Contract *PauserRegistry // 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 +} + +// PauserRegistryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type PauserRegistryCallerSession struct { + Contract *PauserRegistryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// PauserRegistryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type PauserRegistryTransactorSession struct { + Contract *PauserRegistryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PauserRegistryRaw is an auto generated low-level Go binding around an Ethereum contract. +type PauserRegistryRaw struct { + Contract *PauserRegistry // Generic contract binding to access the raw methods on +} + +// PauserRegistryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type PauserRegistryCallerRaw struct { + Contract *PauserRegistryCaller // Generic read-only contract binding to access the raw methods on +} + +// PauserRegistryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type PauserRegistryTransactorRaw struct { + Contract *PauserRegistryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewPauserRegistry creates a new instance of PauserRegistry, bound to a specific deployed contract. +func NewPauserRegistry(address common.Address, backend bind.ContractBackend) (*PauserRegistry, error) { + contract, err := bindPauserRegistry(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &PauserRegistry{PauserRegistryCaller: PauserRegistryCaller{contract: contract}, PauserRegistryTransactor: PauserRegistryTransactor{contract: contract}, PauserRegistryFilterer: PauserRegistryFilterer{contract: contract}}, nil +} + +// NewPauserRegistryCaller creates a new read-only instance of PauserRegistry, bound to a specific deployed contract. +func NewPauserRegistryCaller(address common.Address, caller bind.ContractCaller) (*PauserRegistryCaller, error) { + contract, err := bindPauserRegistry(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &PauserRegistryCaller{contract: contract}, nil +} + +// NewPauserRegistryTransactor creates a new write-only instance of PauserRegistry, bound to a specific deployed contract. +func NewPauserRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*PauserRegistryTransactor, error) { + contract, err := bindPauserRegistry(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &PauserRegistryTransactor{contract: contract}, nil +} + +// NewPauserRegistryFilterer creates a new log filterer instance of PauserRegistry, bound to a specific deployed contract. +func NewPauserRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*PauserRegistryFilterer, error) { + contract, err := bindPauserRegistry(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &PauserRegistryFilterer{contract: contract}, nil +} + +// bindPauserRegistry binds a generic wrapper to an already deployed contract. +func bindPauserRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := PauserRegistryMetaData.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 (_PauserRegistry *PauserRegistryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PauserRegistry.Contract.PauserRegistryCaller.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 (_PauserRegistry *PauserRegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PauserRegistry.Contract.PauserRegistryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PauserRegistry *PauserRegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PauserRegistry.Contract.PauserRegistryTransactor.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 (_PauserRegistry *PauserRegistryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PauserRegistry.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 (_PauserRegistry *PauserRegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PauserRegistry.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PauserRegistry *PauserRegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PauserRegistry.Contract.contract.Transact(opts, method, params...) +} + +// IsPauser is a free data retrieval call binding the contract method 0x46fbf68e. +// +// Solidity: function isPauser(address ) view returns(bool) +func (_PauserRegistry *PauserRegistryCaller) IsPauser(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _PauserRegistry.contract.Call(opts, &out, "isPauser", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsPauser is a free data retrieval call binding the contract method 0x46fbf68e. +// +// Solidity: function isPauser(address ) view returns(bool) +func (_PauserRegistry *PauserRegistrySession) IsPauser(arg0 common.Address) (bool, error) { + return _PauserRegistry.Contract.IsPauser(&_PauserRegistry.CallOpts, arg0) +} + +// IsPauser is a free data retrieval call binding the contract method 0x46fbf68e. +// +// Solidity: function isPauser(address ) view returns(bool) +func (_PauserRegistry *PauserRegistryCallerSession) IsPauser(arg0 common.Address) (bool, error) { + return _PauserRegistry.Contract.IsPauser(&_PauserRegistry.CallOpts, arg0) +} + +// Unpauser is a free data retrieval call binding the contract method 0xeab66d7a. +// +// Solidity: function unpauser() view returns(address) +func (_PauserRegistry *PauserRegistryCaller) Unpauser(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _PauserRegistry.contract.Call(opts, &out, "unpauser") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Unpauser is a free data retrieval call binding the contract method 0xeab66d7a. +// +// Solidity: function unpauser() view returns(address) +func (_PauserRegistry *PauserRegistrySession) Unpauser() (common.Address, error) { + return _PauserRegistry.Contract.Unpauser(&_PauserRegistry.CallOpts) +} + +// Unpauser is a free data retrieval call binding the contract method 0xeab66d7a. +// +// Solidity: function unpauser() view returns(address) +func (_PauserRegistry *PauserRegistryCallerSession) Unpauser() (common.Address, error) { + return _PauserRegistry.Contract.Unpauser(&_PauserRegistry.CallOpts) +} + +// SetIsPauser is a paid mutator transaction binding the contract method 0x85685206. +// +// Solidity: function setIsPauser(address newPauser, bool canPause) returns() +func (_PauserRegistry *PauserRegistryTransactor) SetIsPauser(opts *bind.TransactOpts, newPauser common.Address, canPause bool) (*types.Transaction, error) { + return _PauserRegistry.contract.Transact(opts, "setIsPauser", newPauser, canPause) +} + +// SetIsPauser is a paid mutator transaction binding the contract method 0x85685206. +// +// Solidity: function setIsPauser(address newPauser, bool canPause) returns() +func (_PauserRegistry *PauserRegistrySession) SetIsPauser(newPauser common.Address, canPause bool) (*types.Transaction, error) { + return _PauserRegistry.Contract.SetIsPauser(&_PauserRegistry.TransactOpts, newPauser, canPause) +} + +// SetIsPauser is a paid mutator transaction binding the contract method 0x85685206. +// +// Solidity: function setIsPauser(address newPauser, bool canPause) returns() +func (_PauserRegistry *PauserRegistryTransactorSession) SetIsPauser(newPauser common.Address, canPause bool) (*types.Transaction, error) { + return _PauserRegistry.Contract.SetIsPauser(&_PauserRegistry.TransactOpts, newPauser, canPause) +} + +// SetUnpauser is a paid mutator transaction binding the contract method 0xce548428. +// +// Solidity: function setUnpauser(address newUnpauser) returns() +func (_PauserRegistry *PauserRegistryTransactor) SetUnpauser(opts *bind.TransactOpts, newUnpauser common.Address) (*types.Transaction, error) { + return _PauserRegistry.contract.Transact(opts, "setUnpauser", newUnpauser) +} + +// SetUnpauser is a paid mutator transaction binding the contract method 0xce548428. +// +// Solidity: function setUnpauser(address newUnpauser) returns() +func (_PauserRegistry *PauserRegistrySession) SetUnpauser(newUnpauser common.Address) (*types.Transaction, error) { + return _PauserRegistry.Contract.SetUnpauser(&_PauserRegistry.TransactOpts, newUnpauser) +} + +// SetUnpauser is a paid mutator transaction binding the contract method 0xce548428. +// +// Solidity: function setUnpauser(address newUnpauser) returns() +func (_PauserRegistry *PauserRegistryTransactorSession) SetUnpauser(newUnpauser common.Address) (*types.Transaction, error) { + return _PauserRegistry.Contract.SetUnpauser(&_PauserRegistry.TransactOpts, newUnpauser) +} + +// PauserRegistryPauserStatusChangedIterator is returned from FilterPauserStatusChanged and is used to iterate over the raw logs and unpacked data for PauserStatusChanged events raised by the PauserRegistry contract. +type PauserRegistryPauserStatusChangedIterator struct { + Event *PauserRegistryPauserStatusChanged // 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 *PauserRegistryPauserStatusChangedIterator) 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(PauserRegistryPauserStatusChanged) + 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(PauserRegistryPauserStatusChanged) + 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 *PauserRegistryPauserStatusChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PauserRegistryPauserStatusChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PauserRegistryPauserStatusChanged represents a PauserStatusChanged event raised by the PauserRegistry contract. +type PauserRegistryPauserStatusChanged struct { + Pauser common.Address + CanPause bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPauserStatusChanged is a free log retrieval operation binding the contract event 0x65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152. +// +// Solidity: event PauserStatusChanged(address pauser, bool canPause) +func (_PauserRegistry *PauserRegistryFilterer) FilterPauserStatusChanged(opts *bind.FilterOpts) (*PauserRegistryPauserStatusChangedIterator, error) { + + logs, sub, err := _PauserRegistry.contract.FilterLogs(opts, "PauserStatusChanged") + if err != nil { + return nil, err + } + return &PauserRegistryPauserStatusChangedIterator{contract: _PauserRegistry.contract, event: "PauserStatusChanged", logs: logs, sub: sub}, nil +} + +// WatchPauserStatusChanged is a free log subscription operation binding the contract event 0x65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152. +// +// Solidity: event PauserStatusChanged(address pauser, bool canPause) +func (_PauserRegistry *PauserRegistryFilterer) WatchPauserStatusChanged(opts *bind.WatchOpts, sink chan<- *PauserRegistryPauserStatusChanged) (event.Subscription, error) { + + logs, sub, err := _PauserRegistry.contract.WatchLogs(opts, "PauserStatusChanged") + 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(PauserRegistryPauserStatusChanged) + if err := _PauserRegistry.contract.UnpackLog(event, "PauserStatusChanged", 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 +} + +// ParsePauserStatusChanged is a log parse operation binding the contract event 0x65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152. +// +// Solidity: event PauserStatusChanged(address pauser, bool canPause) +func (_PauserRegistry *PauserRegistryFilterer) ParsePauserStatusChanged(log types.Log) (*PauserRegistryPauserStatusChanged, error) { + event := new(PauserRegistryPauserStatusChanged) + if err := _PauserRegistry.contract.UnpackLog(event, "PauserStatusChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PauserRegistryUnpauserChangedIterator is returned from FilterUnpauserChanged and is used to iterate over the raw logs and unpacked data for UnpauserChanged events raised by the PauserRegistry contract. +type PauserRegistryUnpauserChangedIterator struct { + Event *PauserRegistryUnpauserChanged // 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 *PauserRegistryUnpauserChangedIterator) 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(PauserRegistryUnpauserChanged) + 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(PauserRegistryUnpauserChanged) + 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 *PauserRegistryUnpauserChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PauserRegistryUnpauserChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PauserRegistryUnpauserChanged represents a UnpauserChanged event raised by the PauserRegistry contract. +type PauserRegistryUnpauserChanged struct { + PreviousUnpauser common.Address + NewUnpauser common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpauserChanged is a free log retrieval operation binding the contract event 0x06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892. +// +// Solidity: event UnpauserChanged(address previousUnpauser, address newUnpauser) +func (_PauserRegistry *PauserRegistryFilterer) FilterUnpauserChanged(opts *bind.FilterOpts) (*PauserRegistryUnpauserChangedIterator, error) { + + logs, sub, err := _PauserRegistry.contract.FilterLogs(opts, "UnpauserChanged") + if err != nil { + return nil, err + } + return &PauserRegistryUnpauserChangedIterator{contract: _PauserRegistry.contract, event: "UnpauserChanged", logs: logs, sub: sub}, nil +} + +// WatchUnpauserChanged is a free log subscription operation binding the contract event 0x06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892. +// +// Solidity: event UnpauserChanged(address previousUnpauser, address newUnpauser) +func (_PauserRegistry *PauserRegistryFilterer) WatchUnpauserChanged(opts *bind.WatchOpts, sink chan<- *PauserRegistryUnpauserChanged) (event.Subscription, error) { + + logs, sub, err := _PauserRegistry.contract.WatchLogs(opts, "UnpauserChanged") + 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(PauserRegistryUnpauserChanged) + if err := _PauserRegistry.contract.UnpackLog(event, "UnpauserChanged", 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 +} + +// ParseUnpauserChanged is a log parse operation binding the contract event 0x06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892. +// +// Solidity: event UnpauserChanged(address previousUnpauser, address newUnpauser) +func (_PauserRegistry *PauserRegistryFilterer) ParseUnpauserChanged(log types.Log) (*PauserRegistryUnpauserChanged, error) { + event := new(PauserRegistryUnpauserChanged) + if err := _PauserRegistry.contract.UnpackLog(event, "UnpauserChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/PauserRegistry/tmp.abi b/pkg/bindings/PauserRegistry/tmp.abi new file mode 100644 index 000000000..472d5516e --- /dev/null +++ b/pkg/bindings/PauserRegistry/tmp.abi @@ -0,0 +1,119 @@ +[ + { + "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 + } +] diff --git a/pkg/bindings/PauserRegistry/tmp.bin b/pkg/bindings/PauserRegistry/tmp.bin new file mode 100644 index 000000000..2323b24b2 --- /dev/null +++ b/pkg/bindings/PauserRegistry/tmp.bin @@ -0,0 +1 @@ +0x608060405234801561001057600080fd5b5060405161077838038061077883398101604081905261002f91610263565b60005b82518110156100775761006583828151811061005057610050610339565b6020026020010151600161008860201b60201c565b8061006f8161034f565b915050610032565b506100818161015a565b5050610378565b6001600160a01b0382166100f95760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b60648201526084015b60405180910390fd5b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b0381166101c85760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b60648201526084016100f0565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b038116811461025e57600080fd5b919050565b6000806040838503121561027657600080fd5b82516001600160401b038082111561028d57600080fd5b818501915085601f8301126102a157600080fd5b81516020828211156102b5576102b5610231565b8160051b604051601f19603f830116810181811086821117156102da576102da610231565b6040529283528183019350848101820192898411156102f857600080fd5b948201945b8386101561031d5761030e86610247565b855294820194938201936102fd565b965061032c9050878201610247565b9450505050509250929050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561037157634e487b7160e01b600052601160045260246000fd5b5060010190565b6103f1806103876000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea26469706673582212209d16b337e572efd6aa7c9a1f129223998361e2c66fd3f3315454d1a0590f6f0e64736f6c634300080c0033 diff --git a/pkg/bindings/Slasher/tmp.abi b/pkg/bindings/Slasher/tmp.abi new file mode 100644 index 000000000..9bc140ea9 --- /dev/null +++ b/pkg/bindings/Slasher/tmp.abi @@ -0,0 +1,831 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IStrategyManager" + }, + { + "name": "", + "type": "address", + "internalType": "contract IDelegationManager" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "canSlash", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "canWithdraw", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "contractCanSlashOperatorUntilBlock", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "delegation", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IDelegationManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "freezeOperator", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getCorrectValueForInsertAfter", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getMiddlewareTimesIndexServeUntilBlock", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getMiddlewareTimesIndexStalestUpdateBlock", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "contract IPauserRegistry" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isFrozen", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestUpdateBlock", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "middlewareTimesLength", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "operatorToMiddlewareTimes", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct ISlasher.MiddlewareTimes", + "components": [ + { + "name": "stalestUpdateBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "latestServeUntilBlock", + "type": "uint32", + "internalType": "uint32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "operatorWhitelistedContractsLinkedListEntry", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "operatorWhitelistedContractsLinkedListSize", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "optIntoSlashing", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "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": "contract IPauserRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "recordFirstStakeUpdate", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordLastStakeUpdateAndRevokeSlashingAbility", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recordStakeUpdate", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resetFrozenStatus", + "inputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPauserRegistry", + "inputs": [ + { + "name": "newPauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "strategyManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IStrategyManager" + } + ], + "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": "whitelistedContractDetails", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct ISlasher.MiddlewareDetails", + "components": [ + { + "name": "registrationMayBeginAtBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "contractCanSlashOperatorUntilBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "latestUpdateBlock", + "type": "uint32", + "internalType": "uint32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "FrozenStatusReset", + "inputs": [ + { + "name": "previouslySlashedAddress", + "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": "MiddlewareTimesAdded", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "index", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "stalestUpdateBlock", + "type": "uint32", + "indexed": false, + "internalType": "uint32" + }, + { + "name": "latestServeUntilBlock", + "type": "uint32", + "indexed": false, + "internalType": "uint32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorFrozen", + "inputs": [ + { + "name": "slashedOperator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "slashingContract", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OptedIntoSlashing", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "contractAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "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": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SlashingAbilityRevoked", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "contractAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "contractCanSlashOperatorUntilBlock", + "type": "uint32", + "indexed": false, + "internalType": "uint32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Unpaused", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newPausedStatus", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/Slasher/tmp.bin b/pkg/bindings/Slasher/tmp.bin new file mode 100644 index 000000000..4dcda6e11 --- /dev/null +++ b/pkg/bindings/Slasher/tmp.bin @@ -0,0 +1 @@ +0x608060405234801561001057600080fd5b50604051610efe380380610efe83398101604081905261002f9161004e565b5050610088565b6001600160a01b038116811461004b57600080fd5b50565b6000806040838503121561006157600080fd5b825161006c81610036565b602084015190925061007d81610036565b809150509250929050565b610e67806100976000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637cf72bba1161010f578063d98128c0116100a2578063e921d4fa11610071578063e921d4fa146103c6578063f2fde38b1461044c578063f73b7519146102a9578063fabc1cbc1461045f57600080fd5b8063d98128c014610430578063da16e29b14610322578063df5cf723146102ba578063e58398361461043e57600080fd5b80638da5cb5b116100de5780638da5cb5b146103b5578063a49db732146103c6578063c747075b146103da578063d7b7fa13146103ee57600080fd5b80637cf72bba146103465780638105e04314610354578063855fcc4a1461036b578063886f1195146103a257600080fd5b806339b70e38116101875780636f0c2f74116101565780636f0c2f7414610322578063715018a614610330578063723e59c7146103385780637259a45c1461024257600080fd5b806339b70e38146102ba578063595c6a67146102d55780635ac86ab7146102dd5780635c975abb1461031057600080fd5b80631794bb3c116101c35780631794bb3c1461022f5780631874e5ae14610242578063282670fc1461027257806338c8ee64146102a957600080fd5b80630ffabbce146101f557806310d67a2f14610209578063136439dd1461021c578063175d3205146101f5575b600080fd5b610207610203366004610b25565b5050565b005b610207610217366004610b5a565b610472565b61020761022a366004610b7e565b61052b565b61020761023d366004610b97565b505050565b610258610250366004610b25565b600092915050565b60405163ffffffff90911681526020015b60405180910390f35b610285610280366004610bd8565b61066a565b60408051825163ffffffff9081168252602093840151169281019290925201610269565b6102076102b7366004610b5a565b50565b60005b6040516001600160a01b039091168152602001610269565b610207610685565b6103006102eb366004610c04565b606654600160ff9092169190911b9081161490565b6040519015158152602001610269565b6066545b604051908152602001610269565b610258610250366004610c27565b61020761074c565b610314610250366004610b25565b610207610203366004610c60565b610300610362366004610cd5565b60009392505050565b610385610379366004610c27565b60008060009250925092565b604080519315158452602084019290925290820152606001610269565b6065546102bd906001600160a01b031681565b6033546001600160a01b03166102bd565b6103146103d4366004610b5a565b50600090565b6102076103e8366004610d13565b50505050565b6104016103fc366004610c27565b610760565b60408051825163ffffffff90811682526020808501518216908301529282015190921690820152606001610269565b610300610250366004610c27565b6103006103d4366004610b5a565b61020761045a366004610b5a565b610782565b61020761046d366004610b7e565b6107f8565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190610d60565b6001600160a01b0316336001600160a01b0316146105225760405162461bcd60e51b815260040161051990610d7d565b60405180910390fd5b6102b781610954565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610dc7565b6105b35760405162461bcd60e51b815260040161051990610de9565b6066548181161461062c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60408051808201909152600080825260208201525b92915050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f19190610dc7565b61070d5760405162461bcd60e51b815260040161051990610de9565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610754610a4b565b61075e6000610aa5565b565b604080516060810182526000808252602082018190529181019190915261067f565b61078a610a4b565b6001600160a01b0381166107ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610519565b6102b781610aa5565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f9190610d60565b6001600160a01b0316336001600160a01b03161461089f5760405162461bcd60e51b815260040161051990610d7d565b60665419811960665419161461091d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610519565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161065f565b6001600160a01b0381166109e25760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610519565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461075e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610519565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03811681146102b757600080fd5b803563ffffffff81168114610b2057600080fd5b919050565b60008060408385031215610b3857600080fd5b8235610b4381610af7565b9150610b5160208401610b0c565b90509250929050565b600060208284031215610b6c57600080fd5b8135610b7781610af7565b9392505050565b600060208284031215610b9057600080fd5b5035919050565b600080600060608486031215610bac57600080fd5b8335610bb781610af7565b92506020840135610bc781610af7565b929592945050506040919091013590565b60008060408385031215610beb57600080fd5b8235610bf681610af7565b946020939093013593505050565b600060208284031215610c1657600080fd5b813560ff81168114610b7757600080fd5b60008060408385031215610c3a57600080fd5b8235610c4581610af7565b91506020830135610c5581610af7565b809150509250929050565b60008060208385031215610c7357600080fd5b823567ffffffffffffffff80821115610c8b57600080fd5b818501915085601f830112610c9f57600080fd5b813581811115610cae57600080fd5b8660208260051b8501011115610cc357600080fd5b60209290920196919550909350505050565b600080600060608486031215610cea57600080fd5b8335610cf581610af7565b9250610d0360208501610b0c565b9150604084013590509250925092565b60008060008060808587031215610d2957600080fd5b8435610d3481610af7565b9350610d4260208601610b0c565b9250610d5060408601610b0c565b9396929550929360600135925050565b600060208284031215610d7257600080fd5b8151610b7781610af7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215610dd957600080fd5b81518015158114610b7757600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b60608201526080019056fea2646970667358221220ae643b71bc2408cc964de2c8a9223e32639457881423b0836b4030d93361593e64736f6c634300080c0033 diff --git a/pkg/bindings/StrategyBase/binding.go b/pkg/bindings/StrategyBase/binding.go new file mode 100644 index 000000000..a0629d2d0 --- /dev/null +++ b/pkg/bindings/StrategyBase/binding.go @@ -0,0 +1,1333 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package StrategyBase + +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 +) + +// 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\":\"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\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x60a060405234801561001057600080fd5b50604051620018b9380380620018b98339810160408190526100319161010c565b6001600160a01b03811660805261004661004c565b5061013c565b600054610100900460ff16156100b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011e57600080fd5b81516001600160a01b038116811461013557600080fd5b9392505050565b60805161174c6200016d6000396000818161019901528181610570015281816109550152610a20015261174c6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80635c975abb116100b8578063ab5921e11161007c578063ab5921e11461029c578063ce7c2ac2146102b1578063d9caed12146102c4578063e3dae51c146102d7578063f3e73875146102ea578063fabc1cbc146102fd57600080fd5b80635c975abb146102425780637a8b26371461024a578063886f11951461025d5780638c871019146102765780638f6a62401461028957600080fd5b806347e7ef24116100ff57806347e7ef24146101d2578063485cc955146101e5578063553ca5f8146101f8578063595c6a671461020b5780635ac86ab71461021357600080fd5b806310d67a2f1461013c578063136439dd146101515780632495a5991461016457806339b70e38146101945780633a98ef39146101bb575b600080fd5b61014f61014a3660046113db565b610310565b005b61014f61015f3660046113f8565b6103cc565b603254610177906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101777f000000000000000000000000000000000000000000000000000000000000000081565b6101c460335481565b60405190815260200161018b565b6101c46101e0366004611411565b610510565b61014f6101f336600461143d565b6106b4565b6101c46102063660046113db565b6107c9565b61014f6107dd565b610232610221366004611476565b6001805460ff9092161b9081161490565b604051901515815260200161018b565b6001546101c4565b6101c46102583660046113f8565b6108a9565b600054610177906201000090046001600160a01b031681565b6101c46102843660046113f8565b6108f4565b6101c46102973660046113db565b6108ff565b6102a461090d565b60405161018b91906114c9565b6101c46102bf3660046113db565b61092d565b61014f6102d23660046114fc565b6109c2565b6101c46102e53660046113f8565b610b8b565b6101c46102f83660046113f8565b610bc4565b61014f61030b3660046113f8565b610bcf565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610387919061153d565b6001600160a01b0316336001600160a01b0316146103c05760405162461bcd60e51b81526004016103b79061155a565b60405180910390fd5b6103c981610d2b565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043d91906115a4565b6104595760405162461bcd60e51b81526004016103b7906115c6565b600154818116146104d25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016103b7565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600180546000918291811614156105655760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016103b7565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105dd5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e6167657260448201526064016103b7565b6105e78484610e30565b60335460006105f86103e883611624565b905060006103e8610607610eb0565b6106119190611624565b9050600061061f878361163c565b90508061062c8489611653565b6106369190611672565b95508561069c5760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b60648201526084016103b7565b6106a68685611624565b603355505050505092915050565b600054610100900460ff16158080156106d45750600054600160ff909116105b806106ee5750303b1580156106ee575060005460ff166001145b6107515760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103b7565b6000805460ff191660011790558015610774576000805461ff0019166101001790555b61077e8383610f22565b80156107c4576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006107d76102588361092d565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561082a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084e91906115a4565b61086a5760405162461bcd60e51b81526004016103b7906115c6565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e86033546108bc9190611624565b905060006103e86108cb610eb0565b6108d59190611624565b9050816108e28583611653565b6108ec9190611672565b949350505050565b60006107d782610b8b565b60006107d76102f88361092d565b60606040518060800160405280604d81526020016116ca604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa15801561099e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d79190611694565b6001805460029081161415610a155760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016103b7565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a8d5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e6167657260448201526064016103b7565b610a98848484610fb3565b60335480831115610b275760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a4016103b7565b6000610b356103e883611624565b905060006103e8610b44610eb0565b610b4e9190611624565b9050600082610b5d8784611653565b610b679190611672565b9050610b73868561163c565b603355610b81888883611036565b5050505050505050565b6000806103e8603354610b9e9190611624565b905060006103e8610bad610eb0565b610bb79190611624565b9050806108e28386611653565b60006107d7826108a9565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c46919061153d565b6001600160a01b0316336001600160a01b031614610c765760405162461bcd60e51b81526004016103b79061155a565b600154198119600154191614610cf45760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016103b7565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610505565b6001600160a01b038116610db95760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016103b7565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b03838116911614610eac5760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b60648201526084016103b7565b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d9190611694565b905090565b600054610100900460ff16610f8d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103b7565b603280546001600160a01b0319166001600160a01b038416179055610eac81600061104a565b6032546001600160a01b038381169116146107c45760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e000000000060648201526084016103b7565b6107c46001600160a01b0383168483611136565b6000546201000090046001600160a01b031615801561107157506001600160a01b03821615155b6110f35760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016103b7565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610eac82610d2b565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526107c4928692916000916111c6918516908490611243565b8051909150156107c457808060200190518101906111e491906115a4565b6107c45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103b7565b6060611252848460008561125c565b90505b9392505050565b6060824710156112bd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103b7565b6001600160a01b0385163b6113145760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103b7565b600080866001600160a01b0316858760405161133091906116ad565b60006040518083038185875af1925050503d806000811461136d576040519150601f19603f3d011682016040523d82523d6000602084013e611372565b606091505b509150915061138282828661138d565b979650505050505050565b6060831561139c575081611255565b8251156113ac5782518084602001fd5b8160405162461bcd60e51b81526004016103b791906114c9565b6001600160a01b03811681146103c957600080fd5b6000602082840312156113ed57600080fd5b8135611255816113c6565b60006020828403121561140a57600080fd5b5035919050565b6000806040838503121561142457600080fd5b823561142f816113c6565b946020939093013593505050565b6000806040838503121561145057600080fd5b823561145b816113c6565b9150602083013561146b816113c6565b809150509250929050565b60006020828403121561148857600080fd5b813560ff8116811461125557600080fd5b60005b838110156114b457818101518382015260200161149c565b838111156114c3576000848401525b50505050565b60208152600082518060208401526114e8816040850160208701611499565b601f01601f19169190910160400192915050565b60008060006060848603121561151157600080fd5b833561151c816113c6565b9250602084013561152c816113c6565b929592945050506040919091013590565b60006020828403121561154f57600080fd5b8151611255816113c6565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156115b657600080fd5b8151801515811461125557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156116375761163761160e565b500190565b60008282101561164e5761164e61160e565b500390565b600081600019048311821515161561166d5761166d61160e565b500290565b60008261168f57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156116a657600080fd5b5051919050565b600082516116bf818460208701611499565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220c846a313e842ddbd24ec913720b7ed53e110947f8da2ed0e761cd19cf2b59c5264736f6c634300080c0033", +} + +// StrategyBaseABI is the input ABI used to generate the binding from. +// Deprecated: Use StrategyBaseMetaData.ABI instead. +var StrategyBaseABI = StrategyBaseMetaData.ABI + +// StrategyBaseBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use StrategyBaseMetaData.Bin instead. +var StrategyBaseBin = StrategyBaseMetaData.Bin + +// DeployStrategyBase deploys a new Ethereum contract, binding an instance of StrategyBase to it. +func DeployStrategyBase(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address) (common.Address, *types.Transaction, *StrategyBase, error) { + parsed, err := StrategyBaseMetaData.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(StrategyBaseBin), backend, _strategyManager) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &StrategyBase{StrategyBaseCaller: StrategyBaseCaller{contract: contract}, StrategyBaseTransactor: StrategyBaseTransactor{contract: contract}, StrategyBaseFilterer: StrategyBaseFilterer{contract: contract}}, nil +} + +// StrategyBase is an auto generated Go binding around an Ethereum contract. +type StrategyBase struct { + StrategyBaseCaller // Read-only binding to the contract + StrategyBaseTransactor // Write-only binding to the contract + StrategyBaseFilterer // Log filterer for contract events +} + +// StrategyBaseCaller is an auto generated read-only Go binding around an Ethereum contract. +type StrategyBaseCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StrategyBaseTransactor is an auto generated write-only Go binding around an Ethereum contract. +type StrategyBaseTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StrategyBaseFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type StrategyBaseFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StrategyBaseSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type StrategyBaseSession struct { + Contract *StrategyBase // 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 +} + +// StrategyBaseCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type StrategyBaseCallerSession struct { + Contract *StrategyBaseCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// StrategyBaseTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type StrategyBaseTransactorSession struct { + Contract *StrategyBaseTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// StrategyBaseRaw is an auto generated low-level Go binding around an Ethereum contract. +type StrategyBaseRaw struct { + Contract *StrategyBase // Generic contract binding to access the raw methods on +} + +// StrategyBaseCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type StrategyBaseCallerRaw struct { + Contract *StrategyBaseCaller // Generic read-only contract binding to access the raw methods on +} + +// StrategyBaseTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type StrategyBaseTransactorRaw struct { + Contract *StrategyBaseTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewStrategyBase creates a new instance of StrategyBase, bound to a specific deployed contract. +func NewStrategyBase(address common.Address, backend bind.ContractBackend) (*StrategyBase, error) { + contract, err := bindStrategyBase(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &StrategyBase{StrategyBaseCaller: StrategyBaseCaller{contract: contract}, StrategyBaseTransactor: StrategyBaseTransactor{contract: contract}, StrategyBaseFilterer: StrategyBaseFilterer{contract: contract}}, nil +} + +// NewStrategyBaseCaller creates a new read-only instance of StrategyBase, bound to a specific deployed contract. +func NewStrategyBaseCaller(address common.Address, caller bind.ContractCaller) (*StrategyBaseCaller, error) { + contract, err := bindStrategyBase(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &StrategyBaseCaller{contract: contract}, nil +} + +// NewStrategyBaseTransactor creates a new write-only instance of StrategyBase, bound to a specific deployed contract. +func NewStrategyBaseTransactor(address common.Address, transactor bind.ContractTransactor) (*StrategyBaseTransactor, error) { + contract, err := bindStrategyBase(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &StrategyBaseTransactor{contract: contract}, nil +} + +// NewStrategyBaseFilterer creates a new log filterer instance of StrategyBase, bound to a specific deployed contract. +func NewStrategyBaseFilterer(address common.Address, filterer bind.ContractFilterer) (*StrategyBaseFilterer, error) { + contract, err := bindStrategyBase(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &StrategyBaseFilterer{contract: contract}, nil +} + +// bindStrategyBase binds a generic wrapper to an already deployed contract. +func bindStrategyBase(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := StrategyBaseMetaData.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 (_StrategyBase *StrategyBaseRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StrategyBase.Contract.StrategyBaseCaller.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 (_StrategyBase *StrategyBaseRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StrategyBase.Contract.StrategyBaseTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StrategyBase *StrategyBaseRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StrategyBase.Contract.StrategyBaseTransactor.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 (_StrategyBase *StrategyBaseCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StrategyBase.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 (_StrategyBase *StrategyBaseTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StrategyBase.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StrategyBase *StrategyBaseTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StrategyBase.Contract.contract.Transact(opts, method, params...) +} + +// Explanation is a free data retrieval call binding the contract method 0xab5921e1. +// +// Solidity: function explanation() pure returns(string) +func (_StrategyBase *StrategyBaseCaller) Explanation(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _StrategyBase.contract.Call(opts, &out, "explanation") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Explanation is a free data retrieval call binding the contract method 0xab5921e1. +// +// Solidity: function explanation() pure returns(string) +func (_StrategyBase *StrategyBaseSession) Explanation() (string, error) { + return _StrategyBase.Contract.Explanation(&_StrategyBase.CallOpts) +} + +// Explanation is a free data retrieval call binding the contract method 0xab5921e1. +// +// Solidity: function explanation() pure returns(string) +func (_StrategyBase *StrategyBaseCallerSession) Explanation() (string, error) { + return _StrategyBase.Contract.Explanation(&_StrategyBase.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_StrategyBase *StrategyBaseCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _StrategyBase.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 (_StrategyBase *StrategyBaseSession) Paused(index uint8) (bool, error) { + return _StrategyBase.Contract.Paused(&_StrategyBase.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_StrategyBase *StrategyBaseCallerSession) Paused(index uint8) (bool, error) { + return _StrategyBase.Contract.Paused(&_StrategyBase.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_StrategyBase *StrategyBaseCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StrategyBase.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 (_StrategyBase *StrategyBaseSession) Paused0() (*big.Int, error) { + return _StrategyBase.Contract.Paused0(&_StrategyBase.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_StrategyBase *StrategyBaseCallerSession) Paused0() (*big.Int, error) { + return _StrategyBase.Contract.Paused0(&_StrategyBase.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_StrategyBase *StrategyBaseCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyBase.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 (_StrategyBase *StrategyBaseSession) PauserRegistry() (common.Address, error) { + return _StrategyBase.Contract.PauserRegistry(&_StrategyBase.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_StrategyBase *StrategyBaseCallerSession) PauserRegistry() (common.Address, error) { + return _StrategyBase.Contract.PauserRegistry(&_StrategyBase.CallOpts) +} + +// Shares is a free data retrieval call binding the contract method 0xce7c2ac2. +// +// Solidity: function shares(address user) view returns(uint256) +func (_StrategyBase *StrategyBaseCaller) Shares(opts *bind.CallOpts, user common.Address) (*big.Int, error) { + var out []interface{} + err := _StrategyBase.contract.Call(opts, &out, "shares", user) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Shares is a free data retrieval call binding the contract method 0xce7c2ac2. +// +// Solidity: function shares(address user) view returns(uint256) +func (_StrategyBase *StrategyBaseSession) Shares(user common.Address) (*big.Int, error) { + return _StrategyBase.Contract.Shares(&_StrategyBase.CallOpts, user) +} + +// Shares is a free data retrieval call binding the contract method 0xce7c2ac2. +// +// Solidity: function shares(address user) view returns(uint256) +func (_StrategyBase *StrategyBaseCallerSession) Shares(user common.Address) (*big.Int, error) { + return _StrategyBase.Contract.Shares(&_StrategyBase.CallOpts, user) +} + +// SharesToUnderlying is a free data retrieval call binding the contract method 0xf3e73875. +// +// Solidity: function sharesToUnderlying(uint256 amountShares) view returns(uint256) +func (_StrategyBase *StrategyBaseCaller) SharesToUnderlying(opts *bind.CallOpts, amountShares *big.Int) (*big.Int, error) { + var out []interface{} + err := _StrategyBase.contract.Call(opts, &out, "sharesToUnderlying", amountShares) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SharesToUnderlying is a free data retrieval call binding the contract method 0xf3e73875. +// +// Solidity: function sharesToUnderlying(uint256 amountShares) view returns(uint256) +func (_StrategyBase *StrategyBaseSession) SharesToUnderlying(amountShares *big.Int) (*big.Int, error) { + return _StrategyBase.Contract.SharesToUnderlying(&_StrategyBase.CallOpts, amountShares) +} + +// SharesToUnderlying is a free data retrieval call binding the contract method 0xf3e73875. +// +// Solidity: function sharesToUnderlying(uint256 amountShares) view returns(uint256) +func (_StrategyBase *StrategyBaseCallerSession) SharesToUnderlying(amountShares *big.Int) (*big.Int, error) { + return _StrategyBase.Contract.SharesToUnderlying(&_StrategyBase.CallOpts, amountShares) +} + +// SharesToUnderlyingView is a free data retrieval call binding the contract method 0x7a8b2637. +// +// Solidity: function sharesToUnderlyingView(uint256 amountShares) view returns(uint256) +func (_StrategyBase *StrategyBaseCaller) SharesToUnderlyingView(opts *bind.CallOpts, amountShares *big.Int) (*big.Int, error) { + var out []interface{} + err := _StrategyBase.contract.Call(opts, &out, "sharesToUnderlyingView", amountShares) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SharesToUnderlyingView is a free data retrieval call binding the contract method 0x7a8b2637. +// +// Solidity: function sharesToUnderlyingView(uint256 amountShares) view returns(uint256) +func (_StrategyBase *StrategyBaseSession) SharesToUnderlyingView(amountShares *big.Int) (*big.Int, error) { + return _StrategyBase.Contract.SharesToUnderlyingView(&_StrategyBase.CallOpts, amountShares) +} + +// SharesToUnderlyingView is a free data retrieval call binding the contract method 0x7a8b2637. +// +// Solidity: function sharesToUnderlyingView(uint256 amountShares) view returns(uint256) +func (_StrategyBase *StrategyBaseCallerSession) SharesToUnderlyingView(amountShares *big.Int) (*big.Int, error) { + return _StrategyBase.Contract.SharesToUnderlyingView(&_StrategyBase.CallOpts, amountShares) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_StrategyBase *StrategyBaseCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyBase.contract.Call(opts, &out, "strategyManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_StrategyBase *StrategyBaseSession) StrategyManager() (common.Address, error) { + return _StrategyBase.Contract.StrategyManager(&_StrategyBase.CallOpts) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_StrategyBase *StrategyBaseCallerSession) StrategyManager() (common.Address, error) { + return _StrategyBase.Contract.StrategyManager(&_StrategyBase.CallOpts) +} + +// TotalShares is a free data retrieval call binding the contract method 0x3a98ef39. +// +// Solidity: function totalShares() view returns(uint256) +func (_StrategyBase *StrategyBaseCaller) TotalShares(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StrategyBase.contract.Call(opts, &out, "totalShares") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalShares is a free data retrieval call binding the contract method 0x3a98ef39. +// +// Solidity: function totalShares() view returns(uint256) +func (_StrategyBase *StrategyBaseSession) TotalShares() (*big.Int, error) { + return _StrategyBase.Contract.TotalShares(&_StrategyBase.CallOpts) +} + +// TotalShares is a free data retrieval call binding the contract method 0x3a98ef39. +// +// Solidity: function totalShares() view returns(uint256) +func (_StrategyBase *StrategyBaseCallerSession) TotalShares() (*big.Int, error) { + return _StrategyBase.Contract.TotalShares(&_StrategyBase.CallOpts) +} + +// UnderlyingToShares is a free data retrieval call binding the contract method 0x8c871019. +// +// Solidity: function underlyingToShares(uint256 amountUnderlying) view returns(uint256) +func (_StrategyBase *StrategyBaseCaller) UnderlyingToShares(opts *bind.CallOpts, amountUnderlying *big.Int) (*big.Int, error) { + var out []interface{} + err := _StrategyBase.contract.Call(opts, &out, "underlyingToShares", amountUnderlying) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// UnderlyingToShares is a free data retrieval call binding the contract method 0x8c871019. +// +// Solidity: function underlyingToShares(uint256 amountUnderlying) view returns(uint256) +func (_StrategyBase *StrategyBaseSession) UnderlyingToShares(amountUnderlying *big.Int) (*big.Int, error) { + return _StrategyBase.Contract.UnderlyingToShares(&_StrategyBase.CallOpts, amountUnderlying) +} + +// UnderlyingToShares is a free data retrieval call binding the contract method 0x8c871019. +// +// Solidity: function underlyingToShares(uint256 amountUnderlying) view returns(uint256) +func (_StrategyBase *StrategyBaseCallerSession) UnderlyingToShares(amountUnderlying *big.Int) (*big.Int, error) { + return _StrategyBase.Contract.UnderlyingToShares(&_StrategyBase.CallOpts, amountUnderlying) +} + +// UnderlyingToSharesView is a free data retrieval call binding the contract method 0xe3dae51c. +// +// Solidity: function underlyingToSharesView(uint256 amountUnderlying) view returns(uint256) +func (_StrategyBase *StrategyBaseCaller) UnderlyingToSharesView(opts *bind.CallOpts, amountUnderlying *big.Int) (*big.Int, error) { + var out []interface{} + err := _StrategyBase.contract.Call(opts, &out, "underlyingToSharesView", amountUnderlying) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// UnderlyingToSharesView is a free data retrieval call binding the contract method 0xe3dae51c. +// +// Solidity: function underlyingToSharesView(uint256 amountUnderlying) view returns(uint256) +func (_StrategyBase *StrategyBaseSession) UnderlyingToSharesView(amountUnderlying *big.Int) (*big.Int, error) { + return _StrategyBase.Contract.UnderlyingToSharesView(&_StrategyBase.CallOpts, amountUnderlying) +} + +// UnderlyingToSharesView is a free data retrieval call binding the contract method 0xe3dae51c. +// +// Solidity: function underlyingToSharesView(uint256 amountUnderlying) view returns(uint256) +func (_StrategyBase *StrategyBaseCallerSession) UnderlyingToSharesView(amountUnderlying *big.Int) (*big.Int, error) { + return _StrategyBase.Contract.UnderlyingToSharesView(&_StrategyBase.CallOpts, amountUnderlying) +} + +// UnderlyingToken is a free data retrieval call binding the contract method 0x2495a599. +// +// Solidity: function underlyingToken() view returns(address) +func (_StrategyBase *StrategyBaseCaller) UnderlyingToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyBase.contract.Call(opts, &out, "underlyingToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// UnderlyingToken is a free data retrieval call binding the contract method 0x2495a599. +// +// Solidity: function underlyingToken() view returns(address) +func (_StrategyBase *StrategyBaseSession) UnderlyingToken() (common.Address, error) { + return _StrategyBase.Contract.UnderlyingToken(&_StrategyBase.CallOpts) +} + +// UnderlyingToken is a free data retrieval call binding the contract method 0x2495a599. +// +// Solidity: function underlyingToken() view returns(address) +func (_StrategyBase *StrategyBaseCallerSession) UnderlyingToken() (common.Address, error) { + return _StrategyBase.Contract.UnderlyingToken(&_StrategyBase.CallOpts) +} + +// UserUnderlyingView is a free data retrieval call binding the contract method 0x553ca5f8. +// +// Solidity: function userUnderlyingView(address user) view returns(uint256) +func (_StrategyBase *StrategyBaseCaller) UserUnderlyingView(opts *bind.CallOpts, user common.Address) (*big.Int, error) { + var out []interface{} + err := _StrategyBase.contract.Call(opts, &out, "userUnderlyingView", user) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// UserUnderlyingView is a free data retrieval call binding the contract method 0x553ca5f8. +// +// Solidity: function userUnderlyingView(address user) view returns(uint256) +func (_StrategyBase *StrategyBaseSession) UserUnderlyingView(user common.Address) (*big.Int, error) { + return _StrategyBase.Contract.UserUnderlyingView(&_StrategyBase.CallOpts, user) +} + +// UserUnderlyingView is a free data retrieval call binding the contract method 0x553ca5f8. +// +// Solidity: function userUnderlyingView(address user) view returns(uint256) +func (_StrategyBase *StrategyBaseCallerSession) UserUnderlyingView(user common.Address) (*big.Int, error) { + return _StrategyBase.Contract.UserUnderlyingView(&_StrategyBase.CallOpts, user) +} + +// Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. +// +// Solidity: function deposit(address token, uint256 amount) returns(uint256 newShares) +func (_StrategyBase *StrategyBaseTransactor) Deposit(opts *bind.TransactOpts, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _StrategyBase.contract.Transact(opts, "deposit", token, amount) +} + +// Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. +// +// Solidity: function deposit(address token, uint256 amount) returns(uint256 newShares) +func (_StrategyBase *StrategyBaseSession) Deposit(token common.Address, amount *big.Int) (*types.Transaction, error) { + return _StrategyBase.Contract.Deposit(&_StrategyBase.TransactOpts, token, amount) +} + +// Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. +// +// Solidity: function deposit(address token, uint256 amount) returns(uint256 newShares) +func (_StrategyBase *StrategyBaseTransactorSession) Deposit(token common.Address, amount *big.Int) (*types.Transaction, error) { + return _StrategyBase.Contract.Deposit(&_StrategyBase.TransactOpts, token, amount) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _underlyingToken, address _pauserRegistry) returns() +func (_StrategyBase *StrategyBaseTransactor) Initialize(opts *bind.TransactOpts, _underlyingToken common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBase.contract.Transact(opts, "initialize", _underlyingToken, _pauserRegistry) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _underlyingToken, address _pauserRegistry) returns() +func (_StrategyBase *StrategyBaseSession) Initialize(_underlyingToken common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBase.Contract.Initialize(&_StrategyBase.TransactOpts, _underlyingToken, _pauserRegistry) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _underlyingToken, address _pauserRegistry) returns() +func (_StrategyBase *StrategyBaseTransactorSession) Initialize(_underlyingToken common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBase.Contract.Initialize(&_StrategyBase.TransactOpts, _underlyingToken, _pauserRegistry) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_StrategyBase *StrategyBaseTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyBase.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_StrategyBase *StrategyBaseSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyBase.Contract.Pause(&_StrategyBase.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_StrategyBase *StrategyBaseTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyBase.Contract.Pause(&_StrategyBase.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_StrategyBase *StrategyBaseTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StrategyBase.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_StrategyBase *StrategyBaseSession) PauseAll() (*types.Transaction, error) { + return _StrategyBase.Contract.PauseAll(&_StrategyBase.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_StrategyBase *StrategyBaseTransactorSession) PauseAll() (*types.Transaction, error) { + return _StrategyBase.Contract.PauseAll(&_StrategyBase.TransactOpts) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_StrategyBase *StrategyBaseTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBase.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_StrategyBase *StrategyBaseSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBase.Contract.SetPauserRegistry(&_StrategyBase.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_StrategyBase *StrategyBaseTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBase.Contract.SetPauserRegistry(&_StrategyBase.TransactOpts, newPauserRegistry) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_StrategyBase *StrategyBaseTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyBase.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_StrategyBase *StrategyBaseSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyBase.Contract.Unpause(&_StrategyBase.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_StrategyBase *StrategyBaseTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyBase.Contract.Unpause(&_StrategyBase.TransactOpts, newPausedStatus) +} + +// UserUnderlying is a paid mutator transaction binding the contract method 0x8f6a6240. +// +// Solidity: function userUnderlying(address user) returns(uint256) +func (_StrategyBase *StrategyBaseTransactor) UserUnderlying(opts *bind.TransactOpts, user common.Address) (*types.Transaction, error) { + return _StrategyBase.contract.Transact(opts, "userUnderlying", user) +} + +// UserUnderlying is a paid mutator transaction binding the contract method 0x8f6a6240. +// +// Solidity: function userUnderlying(address user) returns(uint256) +func (_StrategyBase *StrategyBaseSession) UserUnderlying(user common.Address) (*types.Transaction, error) { + return _StrategyBase.Contract.UserUnderlying(&_StrategyBase.TransactOpts, user) +} + +// UserUnderlying is a paid mutator transaction binding the contract method 0x8f6a6240. +// +// Solidity: function userUnderlying(address user) returns(uint256) +func (_StrategyBase *StrategyBaseTransactorSession) UserUnderlying(user common.Address) (*types.Transaction, error) { + return _StrategyBase.Contract.UserUnderlying(&_StrategyBase.TransactOpts, user) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address recipient, address token, uint256 amountShares) returns() +func (_StrategyBase *StrategyBaseTransactor) Withdraw(opts *bind.TransactOpts, recipient common.Address, token common.Address, amountShares *big.Int) (*types.Transaction, error) { + return _StrategyBase.contract.Transact(opts, "withdraw", recipient, token, amountShares) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address recipient, address token, uint256 amountShares) returns() +func (_StrategyBase *StrategyBaseSession) Withdraw(recipient common.Address, token common.Address, amountShares *big.Int) (*types.Transaction, error) { + return _StrategyBase.Contract.Withdraw(&_StrategyBase.TransactOpts, recipient, token, amountShares) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address recipient, address token, uint256 amountShares) returns() +func (_StrategyBase *StrategyBaseTransactorSession) Withdraw(recipient common.Address, token common.Address, amountShares *big.Int) (*types.Transaction, error) { + return _StrategyBase.Contract.Withdraw(&_StrategyBase.TransactOpts, recipient, token, amountShares) +} + +// StrategyBaseInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the StrategyBase contract. +type StrategyBaseInitializedIterator struct { + Event *StrategyBaseInitialized // 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 *StrategyBaseInitializedIterator) 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(StrategyBaseInitialized) + 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(StrategyBaseInitialized) + 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 *StrategyBaseInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyBaseInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyBaseInitialized represents a Initialized event raised by the StrategyBase contract. +type StrategyBaseInitialized 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 (_StrategyBase *StrategyBaseFilterer) FilterInitialized(opts *bind.FilterOpts) (*StrategyBaseInitializedIterator, error) { + + logs, sub, err := _StrategyBase.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &StrategyBaseInitializedIterator{contract: _StrategyBase.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 (_StrategyBase *StrategyBaseFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *StrategyBaseInitialized) (event.Subscription, error) { + + logs, sub, err := _StrategyBase.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(StrategyBaseInitialized) + if err := _StrategyBase.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 (_StrategyBase *StrategyBaseFilterer) ParseInitialized(log types.Log) (*StrategyBaseInitialized, error) { + event := new(StrategyBaseInitialized) + if err := _StrategyBase.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyBasePausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the StrategyBase contract. +type StrategyBasePausedIterator struct { + Event *StrategyBasePaused // 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 *StrategyBasePausedIterator) 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(StrategyBasePaused) + 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(StrategyBasePaused) + 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 *StrategyBasePausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyBasePausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyBasePaused represents a Paused event raised by the StrategyBase contract. +type StrategyBasePaused 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 (_StrategyBase *StrategyBaseFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*StrategyBasePausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _StrategyBase.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &StrategyBasePausedIterator{contract: _StrategyBase.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 (_StrategyBase *StrategyBaseFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *StrategyBasePaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _StrategyBase.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(StrategyBasePaused) + if err := _StrategyBase.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 (_StrategyBase *StrategyBaseFilterer) ParsePaused(log types.Log) (*StrategyBasePaused, error) { + event := new(StrategyBasePaused) + if err := _StrategyBase.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyBasePauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the StrategyBase contract. +type StrategyBasePauserRegistrySetIterator struct { + Event *StrategyBasePauserRegistrySet // 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 *StrategyBasePauserRegistrySetIterator) 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(StrategyBasePauserRegistrySet) + 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(StrategyBasePauserRegistrySet) + 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 *StrategyBasePauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyBasePauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyBasePauserRegistrySet represents a PauserRegistrySet event raised by the StrategyBase contract. +type StrategyBasePauserRegistrySet 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 (_StrategyBase *StrategyBaseFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*StrategyBasePauserRegistrySetIterator, error) { + + logs, sub, err := _StrategyBase.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &StrategyBasePauserRegistrySetIterator{contract: _StrategyBase.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 (_StrategyBase *StrategyBaseFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *StrategyBasePauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _StrategyBase.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(StrategyBasePauserRegistrySet) + if err := _StrategyBase.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 (_StrategyBase *StrategyBaseFilterer) ParsePauserRegistrySet(log types.Log) (*StrategyBasePauserRegistrySet, error) { + event := new(StrategyBasePauserRegistrySet) + if err := _StrategyBase.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyBaseUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the StrategyBase contract. +type StrategyBaseUnpausedIterator struct { + Event *StrategyBaseUnpaused // 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 *StrategyBaseUnpausedIterator) 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(StrategyBaseUnpaused) + 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(StrategyBaseUnpaused) + 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 *StrategyBaseUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyBaseUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyBaseUnpaused represents a Unpaused event raised by the StrategyBase contract. +type StrategyBaseUnpaused 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 (_StrategyBase *StrategyBaseFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*StrategyBaseUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _StrategyBase.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &StrategyBaseUnpausedIterator{contract: _StrategyBase.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 (_StrategyBase *StrategyBaseFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *StrategyBaseUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _StrategyBase.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(StrategyBaseUnpaused) + if err := _StrategyBase.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 (_StrategyBase *StrategyBaseFilterer) ParseUnpaused(log types.Log) (*StrategyBaseUnpaused, error) { + event := new(StrategyBaseUnpaused) + if err := _StrategyBase.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/StrategyBase/tmp.abi b/pkg/bindings/StrategyBase/tmp.abi new file mode 100644 index 000000000..1772a055f --- /dev/null +++ b/pkg/bindings/StrategyBase/tmp.abi @@ -0,0 +1,424 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_strategyManager", + "type": "address", + "internalType": "contract IStrategyManager" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "deposit", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "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": "contract IERC20" + }, + { + "name": "_pauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "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": "contract IPauserRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setPauserRegistry", + "inputs": [ + { + "name": "newPauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "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": "contract IStrategyManager" + } + ], + "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": "contract IERC20" + } + ], + "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": "contract IERC20" + }, + { + "name": "amountShares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "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": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "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 + } +] diff --git a/pkg/bindings/StrategyBase/tmp.bin b/pkg/bindings/StrategyBase/tmp.bin new file mode 100644 index 000000000..e8cf9d9e0 --- /dev/null +++ b/pkg/bindings/StrategyBase/tmp.bin @@ -0,0 +1 @@ +0x60a060405234801561001057600080fd5b50604051620018b9380380620018b98339810160408190526100319161010c565b6001600160a01b03811660805261004661004c565b5061013c565b600054610100900460ff16156100b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011e57600080fd5b81516001600160a01b038116811461013557600080fd5b9392505050565b60805161174c6200016d6000396000818161019901528181610570015281816109550152610a20015261174c6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80635c975abb116100b8578063ab5921e11161007c578063ab5921e11461029c578063ce7c2ac2146102b1578063d9caed12146102c4578063e3dae51c146102d7578063f3e73875146102ea578063fabc1cbc146102fd57600080fd5b80635c975abb146102425780637a8b26371461024a578063886f11951461025d5780638c871019146102765780638f6a62401461028957600080fd5b806347e7ef24116100ff57806347e7ef24146101d2578063485cc955146101e5578063553ca5f8146101f8578063595c6a671461020b5780635ac86ab71461021357600080fd5b806310d67a2f1461013c578063136439dd146101515780632495a5991461016457806339b70e38146101945780633a98ef39146101bb575b600080fd5b61014f61014a3660046113db565b610310565b005b61014f61015f3660046113f8565b6103cc565b603254610177906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101777f000000000000000000000000000000000000000000000000000000000000000081565b6101c460335481565b60405190815260200161018b565b6101c46101e0366004611411565b610510565b61014f6101f336600461143d565b6106b4565b6101c46102063660046113db565b6107c9565b61014f6107dd565b610232610221366004611476565b6001805460ff9092161b9081161490565b604051901515815260200161018b565b6001546101c4565b6101c46102583660046113f8565b6108a9565b600054610177906201000090046001600160a01b031681565b6101c46102843660046113f8565b6108f4565b6101c46102973660046113db565b6108ff565b6102a461090d565b60405161018b91906114c9565b6101c46102bf3660046113db565b61092d565b61014f6102d23660046114fc565b6109c2565b6101c46102e53660046113f8565b610b8b565b6101c46102f83660046113f8565b610bc4565b61014f61030b3660046113f8565b610bcf565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610387919061153d565b6001600160a01b0316336001600160a01b0316146103c05760405162461bcd60e51b81526004016103b79061155a565b60405180910390fd5b6103c981610d2b565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043d91906115a4565b6104595760405162461bcd60e51b81526004016103b7906115c6565b600154818116146104d25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016103b7565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600180546000918291811614156105655760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016103b7565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105dd5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e6167657260448201526064016103b7565b6105e78484610e30565b60335460006105f86103e883611624565b905060006103e8610607610eb0565b6106119190611624565b9050600061061f878361163c565b90508061062c8489611653565b6106369190611672565b95508561069c5760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b60648201526084016103b7565b6106a68685611624565b603355505050505092915050565b600054610100900460ff16158080156106d45750600054600160ff909116105b806106ee5750303b1580156106ee575060005460ff166001145b6107515760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103b7565b6000805460ff191660011790558015610774576000805461ff0019166101001790555b61077e8383610f22565b80156107c4576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006107d76102588361092d565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561082a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084e91906115a4565b61086a5760405162461bcd60e51b81526004016103b7906115c6565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e86033546108bc9190611624565b905060006103e86108cb610eb0565b6108d59190611624565b9050816108e28583611653565b6108ec9190611672565b949350505050565b60006107d782610b8b565b60006107d76102f88361092d565b60606040518060800160405280604d81526020016116ca604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa15801561099e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d79190611694565b6001805460029081161415610a155760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016103b7565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a8d5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e6167657260448201526064016103b7565b610a98848484610fb3565b60335480831115610b275760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a4016103b7565b6000610b356103e883611624565b905060006103e8610b44610eb0565b610b4e9190611624565b9050600082610b5d8784611653565b610b679190611672565b9050610b73868561163c565b603355610b81888883611036565b5050505050505050565b6000806103e8603354610b9e9190611624565b905060006103e8610bad610eb0565b610bb79190611624565b9050806108e28386611653565b60006107d7826108a9565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c46919061153d565b6001600160a01b0316336001600160a01b031614610c765760405162461bcd60e51b81526004016103b79061155a565b600154198119600154191614610cf45760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016103b7565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610505565b6001600160a01b038116610db95760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016103b7565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b03838116911614610eac5760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b60648201526084016103b7565b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d9190611694565b905090565b600054610100900460ff16610f8d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103b7565b603280546001600160a01b0319166001600160a01b038416179055610eac81600061104a565b6032546001600160a01b038381169116146107c45760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e000000000060648201526084016103b7565b6107c46001600160a01b0383168483611136565b6000546201000090046001600160a01b031615801561107157506001600160a01b03821615155b6110f35760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016103b7565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610eac82610d2b565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526107c4928692916000916111c6918516908490611243565b8051909150156107c457808060200190518101906111e491906115a4565b6107c45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103b7565b6060611252848460008561125c565b90505b9392505050565b6060824710156112bd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103b7565b6001600160a01b0385163b6113145760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103b7565b600080866001600160a01b0316858760405161133091906116ad565b60006040518083038185875af1925050503d806000811461136d576040519150601f19603f3d011682016040523d82523d6000602084013e611372565b606091505b509150915061138282828661138d565b979650505050505050565b6060831561139c575081611255565b8251156113ac5782518084602001fd5b8160405162461bcd60e51b81526004016103b791906114c9565b6001600160a01b03811681146103c957600080fd5b6000602082840312156113ed57600080fd5b8135611255816113c6565b60006020828403121561140a57600080fd5b5035919050565b6000806040838503121561142457600080fd5b823561142f816113c6565b946020939093013593505050565b6000806040838503121561145057600080fd5b823561145b816113c6565b9150602083013561146b816113c6565b809150509250929050565b60006020828403121561148857600080fd5b813560ff8116811461125557600080fd5b60005b838110156114b457818101518382015260200161149c565b838111156114c3576000848401525b50505050565b60208152600082518060208401526114e8816040850160208701611499565b601f01601f19169190910160400192915050565b60008060006060848603121561151157600080fd5b833561151c816113c6565b9250602084013561152c816113c6565b929592945050506040919091013590565b60006020828403121561154f57600080fd5b8151611255816113c6565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156115b657600080fd5b8151801515811461125557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156116375761163761160e565b500190565b60008282101561164e5761164e61160e565b500390565b600081600019048311821515161561166d5761166d61160e565b500290565b60008261168f57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156116a657600080fd5b5051919050565b600082516116bf818460208701611499565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220c846a313e842ddbd24ec913720b7ed53e110947f8da2ed0e761cd19cf2b59c5264736f6c634300080c0033 diff --git a/pkg/bindings/StrategyBaseTVLLimits/binding.go b/pkg/bindings/StrategyBaseTVLLimits/binding.go new file mode 100644 index 000000000..089ae4ab7 --- /dev/null +++ b/pkg/bindings/StrategyBaseTVLLimits/binding.go @@ -0,0 +1,1739 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package StrategyBaseTVLLimits + +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 +) + +// 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\":\"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\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162001d5c38038062001d5c833981016040819052620000349162000116565b6001600160a01b038116608052806200004c62000054565b505062000148565b600054610100900460ff1615620000c15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000114576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012957600080fd5b81516001600160a01b03811681146200014157600080fd5b9392505050565b608051611be36200017960003960008181610216015281816107a901528181610b470152610c120152611be36000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a13660046117b8565b6103ba565b005b6101a66101b6366004611802565b61049d565b6101a66101c936600461181f565b610550565b6101a66101dc366004611841565b610605565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b61024160335481565b604051908152602001610208565b61024160645481565b61024161026636600461185a565b610749565b6101a6610279366004611886565b6108ed565b61024161028c366004611802565b6109bb565b6101a66109cf565b6102b86102a73660046118bf565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e7366004611841565b610a9b565b6000546101f4906201000090046001600160a01b031681565b610241610313366004611841565b610ae6565b610241610326366004611802565b610af1565b610333610aff565b6040516102089190611912565b61024161034e366004611802565b610b1f565b6101a6610361366004611945565b610bb4565b60645460655460408051928352602083019190915201610208565b61024161038f366004611841565b610d7d565b6102416103a2366004611841565b610db6565b6101a66103b5366004611841565b610dc1565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b815260040161041090611986565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b6104468585610f1d565b610450838361102a565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906119d4565b6001600160a01b0316336001600160a01b0316146105445760405162461bcd60e51b8152600401610410906119f1565b61054d816110bb565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c791906119d4565b6001600160a01b0316336001600160a01b0316146105f75760405162461bcd60e51b8152600401610410906119f1565b6106018282610f1d565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106769190611a3b565b6106925760405162461bcd60e51b815260040161041090611a5d565b6001548181161461070b5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116141561079e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108165760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b61082084846111c0565b60335460006108316103e883611abb565b905060006103e86108406112a2565b61084a9190611abb565b905060006108588783611ad3565b9050806108658489611aea565b61086f9190611b09565b9550856108d55760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b6064820152608401610410565b6108df8685611abb565b603355505050505092915050565b600054610100900460ff161580801561090d5750600054600160ff909116105b806109275750303b158015610927575060005460ff166001145b6109435760405162461bcd60e51b815260040161041090611986565b6000805460ff191660011790558015610966576000805461ff0019166101001790555b610970838361102a565b80156109b6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006109c96102e783610b1f565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a409190611a3b565b610a5c5760405162461bcd60e51b815260040161041090611a5d565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610aae9190611abb565b905060006103e8610abd6112a2565b610ac79190611abb565b905081610ad48583611aea565b610ade9190611b09565b949350505050565b60006109c982610d7d565b60006109c96103a283610b1f565b60606040518060800160405280604d8152602001611b61604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa158015610b90573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190611b2b565b6001805460029081161415610c075760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c7f5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b610c8a848484611314565b60335480831115610d195760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a401610410565b6000610d276103e883611abb565b905060006103e8610d366112a2565b610d409190611abb565b9050600082610d4f8784611aea565b610d599190611b09565b9050610d658685611ad3565b603355610d73888883611397565b5050505050505050565b6000806103e8603354610d909190611abb565b905060006103e8610d9f6112a2565b610da99190611abb565b905080610ad48386611aea565b60006109c982610a9b565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3891906119d4565b6001600160a01b0316336001600160a01b031614610e685760405162461bcd60e51b8152600401610410906119f1565b600154198119600154191614610ee65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161073e565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a18082111561101f5760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794261736554564c4c696d6974732e5f73657454564c4c696d60448201527f6974733a206d61785065724465706f7369742065786365656473206d6178546f60648201526a74616c4465706f7369747360a81b608482015260a401610410565b606491909155606555565b600054610100900460ff166110955760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b0384161790556106018160006113ab565b6001600160a01b0381166111495760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610410565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60645481111561122a5760405162461bcd60e51b815260206004820152602f60248201527f53747261746567794261736554564c4c696d6974733a206d617820706572206460448201526e195c1bdcda5d08195e18d959591959608a1b6064820152608401610410565b6065546112356112a2565b11156112985760405162461bcd60e51b815260206004820152602c60248201527f53747261746567794261736554564c4c696d6974733a206d6178206465706f7360448201526b1a5d1cc8195e18d95959195960a21b6064820152608401610410565b6106018282611497565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190611b2b565b905090565b6032546001600160a01b038381169116146109b65760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e00000000006064820152608401610410565b6109b66001600160a01b0383168483611513565b6000546201000090046001600160a01b03161580156113d257506001600160a01b03821615155b6114545760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610601826110bb565b6032546001600160a01b038381169116146106015760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b6064820152608401610410565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526109b6928692916000916115a3918516908490611620565b8051909150156109b657808060200190518101906115c19190611a3b565b6109b65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b606061162f8484600085611639565b90505b9392505050565b60608247101561169a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6116f15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b0316858760405161170d9190611b44565b60006040518083038185875af1925050503d806000811461174a576040519150601f19603f3d011682016040523d82523d6000602084013e61174f565b606091505b509150915061175f82828661176a565b979650505050505050565b60608315611779575081611632565b8251156117895782518084602001fd5b8160405162461bcd60e51b81526004016104109190611912565b6001600160a01b038116811461054d57600080fd5b600080600080608085870312156117ce57600080fd5b843593506020850135925060408501356117e7816117a3565b915060608501356117f7816117a3565b939692955090935050565b60006020828403121561181457600080fd5b8135611632816117a3565b6000806040838503121561183257600080fd5b50508035926020909101359150565b60006020828403121561185357600080fd5b5035919050565b6000806040838503121561186d57600080fd5b8235611878816117a3565b946020939093013593505050565b6000806040838503121561189957600080fd5b82356118a4816117a3565b915060208301356118b4816117a3565b809150509250929050565b6000602082840312156118d157600080fd5b813560ff8116811461163257600080fd5b60005b838110156118fd5781810151838201526020016118e5565b8381111561190c576000848401525b50505050565b60208152600082518060208401526119318160408501602087016118e2565b601f01601f19169190910160400192915050565b60008060006060848603121561195a57600080fd5b8335611965816117a3565b92506020840135611975816117a3565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156119e657600080fd5b8151611632816117a3565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611a4d57600080fd5b8151801515811461163257600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611ace57611ace611aa5565b500190565b600082821015611ae557611ae5611aa5565b500390565b6000816000190483118215151615611b0457611b04611aa5565b500290565b600082611b2657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611b3d57600080fd5b5051919050565b60008251611b568184602087016118e2565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220bf389db3491a2f23838ec5529dd6a239eccfd6e2a7339d2c20a628a7894e9feb64736f6c634300080c0033", +} + +// StrategyBaseTVLLimitsABI is the input ABI used to generate the binding from. +// Deprecated: Use StrategyBaseTVLLimitsMetaData.ABI instead. +var StrategyBaseTVLLimitsABI = StrategyBaseTVLLimitsMetaData.ABI + +// StrategyBaseTVLLimitsBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use StrategyBaseTVLLimitsMetaData.Bin instead. +var StrategyBaseTVLLimitsBin = StrategyBaseTVLLimitsMetaData.Bin + +// DeployStrategyBaseTVLLimits deploys a new Ethereum contract, binding an instance of StrategyBaseTVLLimits to it. +func DeployStrategyBaseTVLLimits(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address) (common.Address, *types.Transaction, *StrategyBaseTVLLimits, error) { + parsed, err := StrategyBaseTVLLimitsMetaData.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(StrategyBaseTVLLimitsBin), backend, _strategyManager) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &StrategyBaseTVLLimits{StrategyBaseTVLLimitsCaller: StrategyBaseTVLLimitsCaller{contract: contract}, StrategyBaseTVLLimitsTransactor: StrategyBaseTVLLimitsTransactor{contract: contract}, StrategyBaseTVLLimitsFilterer: StrategyBaseTVLLimitsFilterer{contract: contract}}, nil +} + +// StrategyBaseTVLLimits is an auto generated Go binding around an Ethereum contract. +type StrategyBaseTVLLimits struct { + StrategyBaseTVLLimitsCaller // Read-only binding to the contract + StrategyBaseTVLLimitsTransactor // Write-only binding to the contract + StrategyBaseTVLLimitsFilterer // Log filterer for contract events +} + +// StrategyBaseTVLLimitsCaller is an auto generated read-only Go binding around an Ethereum contract. +type StrategyBaseTVLLimitsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StrategyBaseTVLLimitsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type StrategyBaseTVLLimitsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StrategyBaseTVLLimitsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type StrategyBaseTVLLimitsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StrategyBaseTVLLimitsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type StrategyBaseTVLLimitsSession struct { + Contract *StrategyBaseTVLLimits // 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 +} + +// StrategyBaseTVLLimitsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type StrategyBaseTVLLimitsCallerSession struct { + Contract *StrategyBaseTVLLimitsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// StrategyBaseTVLLimitsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type StrategyBaseTVLLimitsTransactorSession struct { + Contract *StrategyBaseTVLLimitsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// StrategyBaseTVLLimitsRaw is an auto generated low-level Go binding around an Ethereum contract. +type StrategyBaseTVLLimitsRaw struct { + Contract *StrategyBaseTVLLimits // Generic contract binding to access the raw methods on +} + +// StrategyBaseTVLLimitsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type StrategyBaseTVLLimitsCallerRaw struct { + Contract *StrategyBaseTVLLimitsCaller // Generic read-only contract binding to access the raw methods on +} + +// StrategyBaseTVLLimitsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type StrategyBaseTVLLimitsTransactorRaw struct { + Contract *StrategyBaseTVLLimitsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewStrategyBaseTVLLimits creates a new instance of StrategyBaseTVLLimits, bound to a specific deployed contract. +func NewStrategyBaseTVLLimits(address common.Address, backend bind.ContractBackend) (*StrategyBaseTVLLimits, error) { + contract, err := bindStrategyBaseTVLLimits(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &StrategyBaseTVLLimits{StrategyBaseTVLLimitsCaller: StrategyBaseTVLLimitsCaller{contract: contract}, StrategyBaseTVLLimitsTransactor: StrategyBaseTVLLimitsTransactor{contract: contract}, StrategyBaseTVLLimitsFilterer: StrategyBaseTVLLimitsFilterer{contract: contract}}, nil +} + +// NewStrategyBaseTVLLimitsCaller creates a new read-only instance of StrategyBaseTVLLimits, bound to a specific deployed contract. +func NewStrategyBaseTVLLimitsCaller(address common.Address, caller bind.ContractCaller) (*StrategyBaseTVLLimitsCaller, error) { + contract, err := bindStrategyBaseTVLLimits(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &StrategyBaseTVLLimitsCaller{contract: contract}, nil +} + +// NewStrategyBaseTVLLimitsTransactor creates a new write-only instance of StrategyBaseTVLLimits, bound to a specific deployed contract. +func NewStrategyBaseTVLLimitsTransactor(address common.Address, transactor bind.ContractTransactor) (*StrategyBaseTVLLimitsTransactor, error) { + contract, err := bindStrategyBaseTVLLimits(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &StrategyBaseTVLLimitsTransactor{contract: contract}, nil +} + +// NewStrategyBaseTVLLimitsFilterer creates a new log filterer instance of StrategyBaseTVLLimits, bound to a specific deployed contract. +func NewStrategyBaseTVLLimitsFilterer(address common.Address, filterer bind.ContractFilterer) (*StrategyBaseTVLLimitsFilterer, error) { + contract, err := bindStrategyBaseTVLLimits(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &StrategyBaseTVLLimitsFilterer{contract: contract}, nil +} + +// bindStrategyBaseTVLLimits binds a generic wrapper to an already deployed contract. +func bindStrategyBaseTVLLimits(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := StrategyBaseTVLLimitsMetaData.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StrategyBaseTVLLimits.Contract.StrategyBaseTVLLimitsCaller.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.StrategyBaseTVLLimitsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.StrategyBaseTVLLimitsTransactor.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StrategyBaseTVLLimits.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.contract.Transact(opts, method, params...) +} + +// Explanation is a free data retrieval call binding the contract method 0xab5921e1. +// +// Solidity: function explanation() pure returns(string) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) Explanation(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.contract.Call(opts, &out, "explanation") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Explanation is a free data retrieval call binding the contract method 0xab5921e1. +// +// Solidity: function explanation() pure returns(string) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) Explanation() (string, error) { + return _StrategyBaseTVLLimits.Contract.Explanation(&_StrategyBaseTVLLimits.CallOpts) +} + +// Explanation is a free data retrieval call binding the contract method 0xab5921e1. +// +// Solidity: function explanation() pure returns(string) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) Explanation() (string, error) { + return _StrategyBaseTVLLimits.Contract.Explanation(&_StrategyBaseTVLLimits.CallOpts) +} + +// GetTVLLimits is a free data retrieval call binding the contract method 0xdf6fadc1. +// +// Solidity: function getTVLLimits() view returns(uint256, uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) GetTVLLimits(opts *bind.CallOpts) (*big.Int, *big.Int, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.contract.Call(opts, &out, "getTVLLimits") + + if err != nil { + return *new(*big.Int), *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return out0, out1, err + +} + +// GetTVLLimits is a free data retrieval call binding the contract method 0xdf6fadc1. +// +// Solidity: function getTVLLimits() view returns(uint256, uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) GetTVLLimits() (*big.Int, *big.Int, error) { + return _StrategyBaseTVLLimits.Contract.GetTVLLimits(&_StrategyBaseTVLLimits.CallOpts) +} + +// GetTVLLimits is a free data retrieval call binding the contract method 0xdf6fadc1. +// +// Solidity: function getTVLLimits() view returns(uint256, uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) GetTVLLimits() (*big.Int, *big.Int, error) { + return _StrategyBaseTVLLimits.Contract.GetTVLLimits(&_StrategyBaseTVLLimits.CallOpts) +} + +// MaxPerDeposit is a free data retrieval call binding the contract method 0x43fe08b0. +// +// Solidity: function maxPerDeposit() view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) MaxPerDeposit(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.contract.Call(opts, &out, "maxPerDeposit") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MaxPerDeposit is a free data retrieval call binding the contract method 0x43fe08b0. +// +// Solidity: function maxPerDeposit() view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) MaxPerDeposit() (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.MaxPerDeposit(&_StrategyBaseTVLLimits.CallOpts) +} + +// MaxPerDeposit is a free data retrieval call binding the contract method 0x43fe08b0. +// +// Solidity: function maxPerDeposit() view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) MaxPerDeposit() (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.MaxPerDeposit(&_StrategyBaseTVLLimits.CallOpts) +} + +// MaxTotalDeposits is a free data retrieval call binding the contract method 0x61b01b5d. +// +// Solidity: function maxTotalDeposits() view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) MaxTotalDeposits(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.contract.Call(opts, &out, "maxTotalDeposits") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MaxTotalDeposits is a free data retrieval call binding the contract method 0x61b01b5d. +// +// Solidity: function maxTotalDeposits() view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) MaxTotalDeposits() (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.MaxTotalDeposits(&_StrategyBaseTVLLimits.CallOpts) +} + +// MaxTotalDeposits is a free data retrieval call binding the contract method 0x61b01b5d. +// +// Solidity: function maxTotalDeposits() view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) MaxTotalDeposits() (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.MaxTotalDeposits(&_StrategyBaseTVLLimits.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) Paused(index uint8) (bool, error) { + return _StrategyBaseTVLLimits.Contract.Paused(&_StrategyBaseTVLLimits.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) Paused(index uint8) (bool, error) { + return _StrategyBaseTVLLimits.Contract.Paused(&_StrategyBaseTVLLimits.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) Paused0() (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.Paused0(&_StrategyBaseTVLLimits.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) Paused0() (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.Paused0(&_StrategyBaseTVLLimits.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) PauserRegistry() (common.Address, error) { + return _StrategyBaseTVLLimits.Contract.PauserRegistry(&_StrategyBaseTVLLimits.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) PauserRegistry() (common.Address, error) { + return _StrategyBaseTVLLimits.Contract.PauserRegistry(&_StrategyBaseTVLLimits.CallOpts) +} + +// Shares is a free data retrieval call binding the contract method 0xce7c2ac2. +// +// Solidity: function shares(address user) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) Shares(opts *bind.CallOpts, user common.Address) (*big.Int, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.contract.Call(opts, &out, "shares", user) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Shares is a free data retrieval call binding the contract method 0xce7c2ac2. +// +// Solidity: function shares(address user) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) Shares(user common.Address) (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.Shares(&_StrategyBaseTVLLimits.CallOpts, user) +} + +// Shares is a free data retrieval call binding the contract method 0xce7c2ac2. +// +// Solidity: function shares(address user) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) Shares(user common.Address) (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.Shares(&_StrategyBaseTVLLimits.CallOpts, user) +} + +// SharesToUnderlying is a free data retrieval call binding the contract method 0xf3e73875. +// +// Solidity: function sharesToUnderlying(uint256 amountShares) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) SharesToUnderlying(opts *bind.CallOpts, amountShares *big.Int) (*big.Int, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.contract.Call(opts, &out, "sharesToUnderlying", amountShares) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SharesToUnderlying is a free data retrieval call binding the contract method 0xf3e73875. +// +// Solidity: function sharesToUnderlying(uint256 amountShares) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) SharesToUnderlying(amountShares *big.Int) (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.SharesToUnderlying(&_StrategyBaseTVLLimits.CallOpts, amountShares) +} + +// SharesToUnderlying is a free data retrieval call binding the contract method 0xf3e73875. +// +// Solidity: function sharesToUnderlying(uint256 amountShares) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) SharesToUnderlying(amountShares *big.Int) (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.SharesToUnderlying(&_StrategyBaseTVLLimits.CallOpts, amountShares) +} + +// SharesToUnderlyingView is a free data retrieval call binding the contract method 0x7a8b2637. +// +// Solidity: function sharesToUnderlyingView(uint256 amountShares) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) SharesToUnderlyingView(opts *bind.CallOpts, amountShares *big.Int) (*big.Int, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.contract.Call(opts, &out, "sharesToUnderlyingView", amountShares) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SharesToUnderlyingView is a free data retrieval call binding the contract method 0x7a8b2637. +// +// Solidity: function sharesToUnderlyingView(uint256 amountShares) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) SharesToUnderlyingView(amountShares *big.Int) (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.SharesToUnderlyingView(&_StrategyBaseTVLLimits.CallOpts, amountShares) +} + +// SharesToUnderlyingView is a free data retrieval call binding the contract method 0x7a8b2637. +// +// Solidity: function sharesToUnderlyingView(uint256 amountShares) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) SharesToUnderlyingView(amountShares *big.Int) (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.SharesToUnderlyingView(&_StrategyBaseTVLLimits.CallOpts, amountShares) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.contract.Call(opts, &out, "strategyManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) StrategyManager() (common.Address, error) { + return _StrategyBaseTVLLimits.Contract.StrategyManager(&_StrategyBaseTVLLimits.CallOpts) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) StrategyManager() (common.Address, error) { + return _StrategyBaseTVLLimits.Contract.StrategyManager(&_StrategyBaseTVLLimits.CallOpts) +} + +// TotalShares is a free data retrieval call binding the contract method 0x3a98ef39. +// +// Solidity: function totalShares() view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) TotalShares(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.contract.Call(opts, &out, "totalShares") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalShares is a free data retrieval call binding the contract method 0x3a98ef39. +// +// Solidity: function totalShares() view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) TotalShares() (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.TotalShares(&_StrategyBaseTVLLimits.CallOpts) +} + +// TotalShares is a free data retrieval call binding the contract method 0x3a98ef39. +// +// Solidity: function totalShares() view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) TotalShares() (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.TotalShares(&_StrategyBaseTVLLimits.CallOpts) +} + +// UnderlyingToShares is a free data retrieval call binding the contract method 0x8c871019. +// +// Solidity: function underlyingToShares(uint256 amountUnderlying) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) UnderlyingToShares(opts *bind.CallOpts, amountUnderlying *big.Int) (*big.Int, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.contract.Call(opts, &out, "underlyingToShares", amountUnderlying) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// UnderlyingToShares is a free data retrieval call binding the contract method 0x8c871019. +// +// Solidity: function underlyingToShares(uint256 amountUnderlying) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) UnderlyingToShares(amountUnderlying *big.Int) (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.UnderlyingToShares(&_StrategyBaseTVLLimits.CallOpts, amountUnderlying) +} + +// UnderlyingToShares is a free data retrieval call binding the contract method 0x8c871019. +// +// Solidity: function underlyingToShares(uint256 amountUnderlying) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) UnderlyingToShares(amountUnderlying *big.Int) (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.UnderlyingToShares(&_StrategyBaseTVLLimits.CallOpts, amountUnderlying) +} + +// UnderlyingToSharesView is a free data retrieval call binding the contract method 0xe3dae51c. +// +// Solidity: function underlyingToSharesView(uint256 amountUnderlying) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) UnderlyingToSharesView(opts *bind.CallOpts, amountUnderlying *big.Int) (*big.Int, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.contract.Call(opts, &out, "underlyingToSharesView", amountUnderlying) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// UnderlyingToSharesView is a free data retrieval call binding the contract method 0xe3dae51c. +// +// Solidity: function underlyingToSharesView(uint256 amountUnderlying) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) UnderlyingToSharesView(amountUnderlying *big.Int) (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.UnderlyingToSharesView(&_StrategyBaseTVLLimits.CallOpts, amountUnderlying) +} + +// UnderlyingToSharesView is a free data retrieval call binding the contract method 0xe3dae51c. +// +// Solidity: function underlyingToSharesView(uint256 amountUnderlying) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) UnderlyingToSharesView(amountUnderlying *big.Int) (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.UnderlyingToSharesView(&_StrategyBaseTVLLimits.CallOpts, amountUnderlying) +} + +// UnderlyingToken is a free data retrieval call binding the contract method 0x2495a599. +// +// Solidity: function underlyingToken() view returns(address) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) UnderlyingToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.contract.Call(opts, &out, "underlyingToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// UnderlyingToken is a free data retrieval call binding the contract method 0x2495a599. +// +// Solidity: function underlyingToken() view returns(address) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) UnderlyingToken() (common.Address, error) { + return _StrategyBaseTVLLimits.Contract.UnderlyingToken(&_StrategyBaseTVLLimits.CallOpts) +} + +// UnderlyingToken is a free data retrieval call binding the contract method 0x2495a599. +// +// Solidity: function underlyingToken() view returns(address) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) UnderlyingToken() (common.Address, error) { + return _StrategyBaseTVLLimits.Contract.UnderlyingToken(&_StrategyBaseTVLLimits.CallOpts) +} + +// UserUnderlyingView is a free data retrieval call binding the contract method 0x553ca5f8. +// +// Solidity: function userUnderlyingView(address user) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) UserUnderlyingView(opts *bind.CallOpts, user common.Address) (*big.Int, error) { + var out []interface{} + err := _StrategyBaseTVLLimits.contract.Call(opts, &out, "userUnderlyingView", user) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// UserUnderlyingView is a free data retrieval call binding the contract method 0x553ca5f8. +// +// Solidity: function userUnderlyingView(address user) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) UserUnderlyingView(user common.Address) (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.UserUnderlyingView(&_StrategyBaseTVLLimits.CallOpts, user) +} + +// UserUnderlyingView is a free data retrieval call binding the contract method 0x553ca5f8. +// +// Solidity: function userUnderlyingView(address user) view returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) UserUnderlyingView(user common.Address) (*big.Int, error) { + return _StrategyBaseTVLLimits.Contract.UserUnderlyingView(&_StrategyBaseTVLLimits.CallOpts, user) +} + +// Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. +// +// Solidity: function deposit(address token, uint256 amount) returns(uint256 newShares) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactor) Deposit(opts *bind.TransactOpts, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.contract.Transact(opts, "deposit", token, amount) +} + +// Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. +// +// Solidity: function deposit(address token, uint256 amount) returns(uint256 newShares) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) Deposit(token common.Address, amount *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.Deposit(&_StrategyBaseTVLLimits.TransactOpts, token, amount) +} + +// Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. +// +// Solidity: function deposit(address token, uint256 amount) returns(uint256 newShares) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactorSession) Deposit(token common.Address, amount *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.Deposit(&_StrategyBaseTVLLimits.TransactOpts, token, amount) +} + +// Initialize is a paid mutator transaction binding the contract method 0x019e2729. +// +// Solidity: function initialize(uint256 _maxPerDeposit, uint256 _maxTotalDeposits, address _underlyingToken, address _pauserRegistry) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactor) Initialize(opts *bind.TransactOpts, _maxPerDeposit *big.Int, _maxTotalDeposits *big.Int, _underlyingToken common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.contract.Transact(opts, "initialize", _maxPerDeposit, _maxTotalDeposits, _underlyingToken, _pauserRegistry) +} + +// Initialize is a paid mutator transaction binding the contract method 0x019e2729. +// +// Solidity: function initialize(uint256 _maxPerDeposit, uint256 _maxTotalDeposits, address _underlyingToken, address _pauserRegistry) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) Initialize(_maxPerDeposit *big.Int, _maxTotalDeposits *big.Int, _underlyingToken common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.Initialize(&_StrategyBaseTVLLimits.TransactOpts, _maxPerDeposit, _maxTotalDeposits, _underlyingToken, _pauserRegistry) +} + +// Initialize is a paid mutator transaction binding the contract method 0x019e2729. +// +// Solidity: function initialize(uint256 _maxPerDeposit, uint256 _maxTotalDeposits, address _underlyingToken, address _pauserRegistry) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactorSession) Initialize(_maxPerDeposit *big.Int, _maxTotalDeposits *big.Int, _underlyingToken common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.Initialize(&_StrategyBaseTVLLimits.TransactOpts, _maxPerDeposit, _maxTotalDeposits, _underlyingToken, _pauserRegistry) +} + +// Initialize0 is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _underlyingToken, address _pauserRegistry) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactor) Initialize0(opts *bind.TransactOpts, _underlyingToken common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.contract.Transact(opts, "initialize0", _underlyingToken, _pauserRegistry) +} + +// Initialize0 is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _underlyingToken, address _pauserRegistry) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) Initialize0(_underlyingToken common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.Initialize0(&_StrategyBaseTVLLimits.TransactOpts, _underlyingToken, _pauserRegistry) +} + +// Initialize0 is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _underlyingToken, address _pauserRegistry) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactorSession) Initialize0(_underlyingToken common.Address, _pauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.Initialize0(&_StrategyBaseTVLLimits.TransactOpts, _underlyingToken, _pauserRegistry) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.Pause(&_StrategyBaseTVLLimits.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.Pause(&_StrategyBaseTVLLimits.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) PauseAll() (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.PauseAll(&_StrategyBaseTVLLimits.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactorSession) PauseAll() (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.PauseAll(&_StrategyBaseTVLLimits.TransactOpts) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.SetPauserRegistry(&_StrategyBaseTVLLimits.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.SetPauserRegistry(&_StrategyBaseTVLLimits.TransactOpts, newPauserRegistry) +} + +// SetTVLLimits is a paid mutator transaction binding the contract method 0x11c70c9d. +// +// Solidity: function setTVLLimits(uint256 newMaxPerDeposit, uint256 newMaxTotalDeposits) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactor) SetTVLLimits(opts *bind.TransactOpts, newMaxPerDeposit *big.Int, newMaxTotalDeposits *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.contract.Transact(opts, "setTVLLimits", newMaxPerDeposit, newMaxTotalDeposits) +} + +// SetTVLLimits is a paid mutator transaction binding the contract method 0x11c70c9d. +// +// Solidity: function setTVLLimits(uint256 newMaxPerDeposit, uint256 newMaxTotalDeposits) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) SetTVLLimits(newMaxPerDeposit *big.Int, newMaxTotalDeposits *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.SetTVLLimits(&_StrategyBaseTVLLimits.TransactOpts, newMaxPerDeposit, newMaxTotalDeposits) +} + +// SetTVLLimits is a paid mutator transaction binding the contract method 0x11c70c9d. +// +// Solidity: function setTVLLimits(uint256 newMaxPerDeposit, uint256 newMaxTotalDeposits) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactorSession) SetTVLLimits(newMaxPerDeposit *big.Int, newMaxTotalDeposits *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.SetTVLLimits(&_StrategyBaseTVLLimits.TransactOpts, newMaxPerDeposit, newMaxTotalDeposits) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.Unpause(&_StrategyBaseTVLLimits.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.Unpause(&_StrategyBaseTVLLimits.TransactOpts, newPausedStatus) +} + +// UserUnderlying is a paid mutator transaction binding the contract method 0x8f6a6240. +// +// Solidity: function userUnderlying(address user) returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactor) UserUnderlying(opts *bind.TransactOpts, user common.Address) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.contract.Transact(opts, "userUnderlying", user) +} + +// UserUnderlying is a paid mutator transaction binding the contract method 0x8f6a6240. +// +// Solidity: function userUnderlying(address user) returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) UserUnderlying(user common.Address) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.UserUnderlying(&_StrategyBaseTVLLimits.TransactOpts, user) +} + +// UserUnderlying is a paid mutator transaction binding the contract method 0x8f6a6240. +// +// Solidity: function userUnderlying(address user) returns(uint256) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactorSession) UserUnderlying(user common.Address) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.UserUnderlying(&_StrategyBaseTVLLimits.TransactOpts, user) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address recipient, address token, uint256 amountShares) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactor) Withdraw(opts *bind.TransactOpts, recipient common.Address, token common.Address, amountShares *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.contract.Transact(opts, "withdraw", recipient, token, amountShares) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address recipient, address token, uint256 amountShares) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) Withdraw(recipient common.Address, token common.Address, amountShares *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.Withdraw(&_StrategyBaseTVLLimits.TransactOpts, recipient, token, amountShares) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. +// +// Solidity: function withdraw(address recipient, address token, uint256 amountShares) returns() +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsTransactorSession) Withdraw(recipient common.Address, token common.Address, amountShares *big.Int) (*types.Transaction, error) { + return _StrategyBaseTVLLimits.Contract.Withdraw(&_StrategyBaseTVLLimits.TransactOpts, recipient, token, amountShares) +} + +// StrategyBaseTVLLimitsInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the StrategyBaseTVLLimits contract. +type StrategyBaseTVLLimitsInitializedIterator struct { + Event *StrategyBaseTVLLimitsInitialized // 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 *StrategyBaseTVLLimitsInitializedIterator) 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(StrategyBaseTVLLimitsInitialized) + 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(StrategyBaseTVLLimitsInitialized) + 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 *StrategyBaseTVLLimitsInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyBaseTVLLimitsInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyBaseTVLLimitsInitialized represents a Initialized event raised by the StrategyBaseTVLLimits contract. +type StrategyBaseTVLLimitsInitialized 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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) FilterInitialized(opts *bind.FilterOpts) (*StrategyBaseTVLLimitsInitializedIterator, error) { + + logs, sub, err := _StrategyBaseTVLLimits.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &StrategyBaseTVLLimitsInitializedIterator{contract: _StrategyBaseTVLLimits.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *StrategyBaseTVLLimitsInitialized) (event.Subscription, error) { + + logs, sub, err := _StrategyBaseTVLLimits.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(StrategyBaseTVLLimitsInitialized) + if err := _StrategyBaseTVLLimits.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) ParseInitialized(log types.Log) (*StrategyBaseTVLLimitsInitialized, error) { + event := new(StrategyBaseTVLLimitsInitialized) + if err := _StrategyBaseTVLLimits.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyBaseTVLLimitsMaxPerDepositUpdatedIterator is returned from FilterMaxPerDepositUpdated and is used to iterate over the raw logs and unpacked data for MaxPerDepositUpdated events raised by the StrategyBaseTVLLimits contract. +type StrategyBaseTVLLimitsMaxPerDepositUpdatedIterator struct { + Event *StrategyBaseTVLLimitsMaxPerDepositUpdated // 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 *StrategyBaseTVLLimitsMaxPerDepositUpdatedIterator) 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(StrategyBaseTVLLimitsMaxPerDepositUpdated) + 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(StrategyBaseTVLLimitsMaxPerDepositUpdated) + 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 *StrategyBaseTVLLimitsMaxPerDepositUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyBaseTVLLimitsMaxPerDepositUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyBaseTVLLimitsMaxPerDepositUpdated represents a MaxPerDepositUpdated event raised by the StrategyBaseTVLLimits contract. +type StrategyBaseTVLLimitsMaxPerDepositUpdated struct { + PreviousValue *big.Int + NewValue *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMaxPerDepositUpdated is a free log retrieval operation binding the contract event 0xf97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5. +// +// Solidity: event MaxPerDepositUpdated(uint256 previousValue, uint256 newValue) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) FilterMaxPerDepositUpdated(opts *bind.FilterOpts) (*StrategyBaseTVLLimitsMaxPerDepositUpdatedIterator, error) { + + logs, sub, err := _StrategyBaseTVLLimits.contract.FilterLogs(opts, "MaxPerDepositUpdated") + if err != nil { + return nil, err + } + return &StrategyBaseTVLLimitsMaxPerDepositUpdatedIterator{contract: _StrategyBaseTVLLimits.contract, event: "MaxPerDepositUpdated", logs: logs, sub: sub}, nil +} + +// WatchMaxPerDepositUpdated is a free log subscription operation binding the contract event 0xf97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5. +// +// Solidity: event MaxPerDepositUpdated(uint256 previousValue, uint256 newValue) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) WatchMaxPerDepositUpdated(opts *bind.WatchOpts, sink chan<- *StrategyBaseTVLLimitsMaxPerDepositUpdated) (event.Subscription, error) { + + logs, sub, err := _StrategyBaseTVLLimits.contract.WatchLogs(opts, "MaxPerDepositUpdated") + 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(StrategyBaseTVLLimitsMaxPerDepositUpdated) + if err := _StrategyBaseTVLLimits.contract.UnpackLog(event, "MaxPerDepositUpdated", 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 +} + +// ParseMaxPerDepositUpdated is a log parse operation binding the contract event 0xf97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5. +// +// Solidity: event MaxPerDepositUpdated(uint256 previousValue, uint256 newValue) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) ParseMaxPerDepositUpdated(log types.Log) (*StrategyBaseTVLLimitsMaxPerDepositUpdated, error) { + event := new(StrategyBaseTVLLimitsMaxPerDepositUpdated) + if err := _StrategyBaseTVLLimits.contract.UnpackLog(event, "MaxPerDepositUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyBaseTVLLimitsMaxTotalDepositsUpdatedIterator is returned from FilterMaxTotalDepositsUpdated and is used to iterate over the raw logs and unpacked data for MaxTotalDepositsUpdated events raised by the StrategyBaseTVLLimits contract. +type StrategyBaseTVLLimitsMaxTotalDepositsUpdatedIterator struct { + Event *StrategyBaseTVLLimitsMaxTotalDepositsUpdated // 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 *StrategyBaseTVLLimitsMaxTotalDepositsUpdatedIterator) 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(StrategyBaseTVLLimitsMaxTotalDepositsUpdated) + 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(StrategyBaseTVLLimitsMaxTotalDepositsUpdated) + 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 *StrategyBaseTVLLimitsMaxTotalDepositsUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyBaseTVLLimitsMaxTotalDepositsUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyBaseTVLLimitsMaxTotalDepositsUpdated represents a MaxTotalDepositsUpdated event raised by the StrategyBaseTVLLimits contract. +type StrategyBaseTVLLimitsMaxTotalDepositsUpdated struct { + PreviousValue *big.Int + NewValue *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMaxTotalDepositsUpdated is a free log retrieval operation binding the contract event 0x6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452. +// +// Solidity: event MaxTotalDepositsUpdated(uint256 previousValue, uint256 newValue) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) FilterMaxTotalDepositsUpdated(opts *bind.FilterOpts) (*StrategyBaseTVLLimitsMaxTotalDepositsUpdatedIterator, error) { + + logs, sub, err := _StrategyBaseTVLLimits.contract.FilterLogs(opts, "MaxTotalDepositsUpdated") + if err != nil { + return nil, err + } + return &StrategyBaseTVLLimitsMaxTotalDepositsUpdatedIterator{contract: _StrategyBaseTVLLimits.contract, event: "MaxTotalDepositsUpdated", logs: logs, sub: sub}, nil +} + +// WatchMaxTotalDepositsUpdated is a free log subscription operation binding the contract event 0x6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452. +// +// Solidity: event MaxTotalDepositsUpdated(uint256 previousValue, uint256 newValue) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) WatchMaxTotalDepositsUpdated(opts *bind.WatchOpts, sink chan<- *StrategyBaseTVLLimitsMaxTotalDepositsUpdated) (event.Subscription, error) { + + logs, sub, err := _StrategyBaseTVLLimits.contract.WatchLogs(opts, "MaxTotalDepositsUpdated") + 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(StrategyBaseTVLLimitsMaxTotalDepositsUpdated) + if err := _StrategyBaseTVLLimits.contract.UnpackLog(event, "MaxTotalDepositsUpdated", 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 +} + +// ParseMaxTotalDepositsUpdated is a log parse operation binding the contract event 0x6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452. +// +// Solidity: event MaxTotalDepositsUpdated(uint256 previousValue, uint256 newValue) +func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) ParseMaxTotalDepositsUpdated(log types.Log) (*StrategyBaseTVLLimitsMaxTotalDepositsUpdated, error) { + event := new(StrategyBaseTVLLimitsMaxTotalDepositsUpdated) + if err := _StrategyBaseTVLLimits.contract.UnpackLog(event, "MaxTotalDepositsUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyBaseTVLLimitsPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the StrategyBaseTVLLimits contract. +type StrategyBaseTVLLimitsPausedIterator struct { + Event *StrategyBaseTVLLimitsPaused // 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 *StrategyBaseTVLLimitsPausedIterator) 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(StrategyBaseTVLLimitsPaused) + 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(StrategyBaseTVLLimitsPaused) + 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 *StrategyBaseTVLLimitsPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyBaseTVLLimitsPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyBaseTVLLimitsPaused represents a Paused event raised by the StrategyBaseTVLLimits contract. +type StrategyBaseTVLLimitsPaused 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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*StrategyBaseTVLLimitsPausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _StrategyBaseTVLLimits.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &StrategyBaseTVLLimitsPausedIterator{contract: _StrategyBaseTVLLimits.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *StrategyBaseTVLLimitsPaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _StrategyBaseTVLLimits.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(StrategyBaseTVLLimitsPaused) + if err := _StrategyBaseTVLLimits.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) ParsePaused(log types.Log) (*StrategyBaseTVLLimitsPaused, error) { + event := new(StrategyBaseTVLLimitsPaused) + if err := _StrategyBaseTVLLimits.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyBaseTVLLimitsPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the StrategyBaseTVLLimits contract. +type StrategyBaseTVLLimitsPauserRegistrySetIterator struct { + Event *StrategyBaseTVLLimitsPauserRegistrySet // 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 *StrategyBaseTVLLimitsPauserRegistrySetIterator) 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(StrategyBaseTVLLimitsPauserRegistrySet) + 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(StrategyBaseTVLLimitsPauserRegistrySet) + 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 *StrategyBaseTVLLimitsPauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyBaseTVLLimitsPauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyBaseTVLLimitsPauserRegistrySet represents a PauserRegistrySet event raised by the StrategyBaseTVLLimits contract. +type StrategyBaseTVLLimitsPauserRegistrySet 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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*StrategyBaseTVLLimitsPauserRegistrySetIterator, error) { + + logs, sub, err := _StrategyBaseTVLLimits.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &StrategyBaseTVLLimitsPauserRegistrySetIterator{contract: _StrategyBaseTVLLimits.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *StrategyBaseTVLLimitsPauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _StrategyBaseTVLLimits.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(StrategyBaseTVLLimitsPauserRegistrySet) + if err := _StrategyBaseTVLLimits.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) ParsePauserRegistrySet(log types.Log) (*StrategyBaseTVLLimitsPauserRegistrySet, error) { + event := new(StrategyBaseTVLLimitsPauserRegistrySet) + if err := _StrategyBaseTVLLimits.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyBaseTVLLimitsUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the StrategyBaseTVLLimits contract. +type StrategyBaseTVLLimitsUnpausedIterator struct { + Event *StrategyBaseTVLLimitsUnpaused // 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 *StrategyBaseTVLLimitsUnpausedIterator) 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(StrategyBaseTVLLimitsUnpaused) + 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(StrategyBaseTVLLimitsUnpaused) + 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 *StrategyBaseTVLLimitsUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyBaseTVLLimitsUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyBaseTVLLimitsUnpaused represents a Unpaused event raised by the StrategyBaseTVLLimits contract. +type StrategyBaseTVLLimitsUnpaused 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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*StrategyBaseTVLLimitsUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _StrategyBaseTVLLimits.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &StrategyBaseTVLLimitsUnpausedIterator{contract: _StrategyBaseTVLLimits.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *StrategyBaseTVLLimitsUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _StrategyBaseTVLLimits.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(StrategyBaseTVLLimitsUnpaused) + if err := _StrategyBaseTVLLimits.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 (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsFilterer) ParseUnpaused(log types.Log) (*StrategyBaseTVLLimitsUnpaused, error) { + event := new(StrategyBaseTVLLimitsUnpaused) + if err := _StrategyBaseTVLLimits.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/StrategyBaseTVLLimits/tmp.abi b/pkg/bindings/StrategyBaseTVLLimits/tmp.abi new file mode 100644 index 000000000..2d1212b3b --- /dev/null +++ b/pkg/bindings/StrategyBaseTVLLimits/tmp.abi @@ -0,0 +1,552 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_strategyManager", + "type": "address", + "internalType": "contract IStrategyManager" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "deposit", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "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": "contract IERC20" + }, + { + "name": "_pauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_underlyingToken", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "_pauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "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": "contract IPauserRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setPauserRegistry", + "inputs": [ + { + "name": "newPauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "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": "contract IStrategyManager" + } + ], + "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": "contract IERC20" + } + ], + "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": "contract IERC20" + }, + { + "name": "amountShares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "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": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "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 + } +] diff --git a/pkg/bindings/StrategyBaseTVLLimits/tmp.bin b/pkg/bindings/StrategyBaseTVLLimits/tmp.bin new file mode 100644 index 000000000..c10645bce --- /dev/null +++ b/pkg/bindings/StrategyBaseTVLLimits/tmp.bin @@ -0,0 +1 @@ +0x60a06040523480156200001157600080fd5b5060405162001d5c38038062001d5c833981016040819052620000349162000116565b6001600160a01b038116608052806200004c62000054565b505062000148565b600054610100900460ff1615620000c15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000114576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012957600080fd5b81516001600160a01b03811681146200014157600080fd5b9392505050565b608051611be36200017960003960008181610216015281816107a901528181610b470152610c120152611be36000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a13660046117b8565b6103ba565b005b6101a66101b6366004611802565b61049d565b6101a66101c936600461181f565b610550565b6101a66101dc366004611841565b610605565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b61024160335481565b604051908152602001610208565b61024160645481565b61024161026636600461185a565b610749565b6101a6610279366004611886565b6108ed565b61024161028c366004611802565b6109bb565b6101a66109cf565b6102b86102a73660046118bf565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e7366004611841565b610a9b565b6000546101f4906201000090046001600160a01b031681565b610241610313366004611841565b610ae6565b610241610326366004611802565b610af1565b610333610aff565b6040516102089190611912565b61024161034e366004611802565b610b1f565b6101a6610361366004611945565b610bb4565b60645460655460408051928352602083019190915201610208565b61024161038f366004611841565b610d7d565b6102416103a2366004611841565b610db6565b6101a66103b5366004611841565b610dc1565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b815260040161041090611986565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b6104468585610f1d565b610450838361102a565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906119d4565b6001600160a01b0316336001600160a01b0316146105445760405162461bcd60e51b8152600401610410906119f1565b61054d816110bb565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c791906119d4565b6001600160a01b0316336001600160a01b0316146105f75760405162461bcd60e51b8152600401610410906119f1565b6106018282610f1d565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106769190611a3b565b6106925760405162461bcd60e51b815260040161041090611a5d565b6001548181161461070b5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116141561079e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108165760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b61082084846111c0565b60335460006108316103e883611abb565b905060006103e86108406112a2565b61084a9190611abb565b905060006108588783611ad3565b9050806108658489611aea565b61086f9190611b09565b9550856108d55760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b6064820152608401610410565b6108df8685611abb565b603355505050505092915050565b600054610100900460ff161580801561090d5750600054600160ff909116105b806109275750303b158015610927575060005460ff166001145b6109435760405162461bcd60e51b815260040161041090611986565b6000805460ff191660011790558015610966576000805461ff0019166101001790555b610970838361102a565b80156109b6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006109c96102e783610b1f565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a409190611a3b565b610a5c5760405162461bcd60e51b815260040161041090611a5d565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610aae9190611abb565b905060006103e8610abd6112a2565b610ac79190611abb565b905081610ad48583611aea565b610ade9190611b09565b949350505050565b60006109c982610d7d565b60006109c96103a283610b1f565b60606040518060800160405280604d8152602001611b61604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa158015610b90573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190611b2b565b6001805460029081161415610c075760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c7f5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b610c8a848484611314565b60335480831115610d195760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a401610410565b6000610d276103e883611abb565b905060006103e8610d366112a2565b610d409190611abb565b9050600082610d4f8784611aea565b610d599190611b09565b9050610d658685611ad3565b603355610d73888883611397565b5050505050505050565b6000806103e8603354610d909190611abb565b905060006103e8610d9f6112a2565b610da99190611abb565b905080610ad48386611aea565b60006109c982610a9b565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3891906119d4565b6001600160a01b0316336001600160a01b031614610e685760405162461bcd60e51b8152600401610410906119f1565b600154198119600154191614610ee65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161073e565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a18082111561101f5760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794261736554564c4c696d6974732e5f73657454564c4c696d60448201527f6974733a206d61785065724465706f7369742065786365656473206d6178546f60648201526a74616c4465706f7369747360a81b608482015260a401610410565b606491909155606555565b600054610100900460ff166110955760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b0384161790556106018160006113ab565b6001600160a01b0381166111495760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610410565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60645481111561122a5760405162461bcd60e51b815260206004820152602f60248201527f53747261746567794261736554564c4c696d6974733a206d617820706572206460448201526e195c1bdcda5d08195e18d959591959608a1b6064820152608401610410565b6065546112356112a2565b11156112985760405162461bcd60e51b815260206004820152602c60248201527f53747261746567794261736554564c4c696d6974733a206d6178206465706f7360448201526b1a5d1cc8195e18d95959195960a21b6064820152608401610410565b6106018282611497565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156112eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130f9190611b2b565b905090565b6032546001600160a01b038381169116146109b65760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e00000000006064820152608401610410565b6109b66001600160a01b0383168483611513565b6000546201000090046001600160a01b03161580156113d257506001600160a01b03821615155b6114545760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610601826110bb565b6032546001600160a01b038381169116146106015760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b6064820152608401610410565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526109b6928692916000916115a3918516908490611620565b8051909150156109b657808060200190518101906115c19190611a3b565b6109b65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b606061162f8484600085611639565b90505b9392505050565b60608247101561169a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6116f15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b0316858760405161170d9190611b44565b60006040518083038185875af1925050503d806000811461174a576040519150601f19603f3d011682016040523d82523d6000602084013e61174f565b606091505b509150915061175f82828661176a565b979650505050505050565b60608315611779575081611632565b8251156117895782518084602001fd5b8160405162461bcd60e51b81526004016104109190611912565b6001600160a01b038116811461054d57600080fd5b600080600080608085870312156117ce57600080fd5b843593506020850135925060408501356117e7816117a3565b915060608501356117f7816117a3565b939692955090935050565b60006020828403121561181457600080fd5b8135611632816117a3565b6000806040838503121561183257600080fd5b50508035926020909101359150565b60006020828403121561185357600080fd5b5035919050565b6000806040838503121561186d57600080fd5b8235611878816117a3565b946020939093013593505050565b6000806040838503121561189957600080fd5b82356118a4816117a3565b915060208301356118b4816117a3565b809150509250929050565b6000602082840312156118d157600080fd5b813560ff8116811461163257600080fd5b60005b838110156118fd5781810151838201526020016118e5565b8381111561190c576000848401525b50505050565b60208152600082518060208401526119318160408501602087016118e2565b601f01601f19169190910160400192915050565b60008060006060848603121561195a57600080fd5b8335611965816117a3565b92506020840135611975816117a3565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156119e657600080fd5b8151611632816117a3565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611a4d57600080fd5b8151801515811461163257600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611ace57611ace611aa5565b500190565b600082821015611ae557611ae5611aa5565b500390565b6000816000190483118215151615611b0457611b04611aa5565b500290565b600082611b2657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611b3d57600080fd5b5051919050565b60008251611b568184602087016118e2565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220bf389db3491a2f23838ec5529dd6a239eccfd6e2a7339d2c20a628a7894e9feb64736f6c634300080c0033 diff --git a/pkg/bindings/StrategyManager/binding.go b/pkg/bindings/StrategyManager/binding.go new file mode 100644 index 000000000..18c47cc3a --- /dev/null +++ b/pkg/bindings/StrategyManager/binding.go @@ -0,0 +1,2584 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package StrategyManager + +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 +) + +// IStrategyManagerDeprecatedStructQueuedWithdrawal is an auto generated low-level Go binding around an user-defined struct. +type IStrategyManagerDeprecatedStructQueuedWithdrawal struct { + Strategies []common.Address + Shares []*big.Int + Staker common.Address + WithdrawerAndNonce IStrategyManagerDeprecatedStructWithdrawerAndNonce + WithdrawalStartBlock uint32 + DelegatedAddress common.Address +} + +// IStrategyManagerDeprecatedStructWithdrawerAndNonce is an auto generated low-level Go binding around an user-defined struct. +type IStrategyManagerDeprecatedStructWithdrawerAndNonce struct { + Withdrawer common.Address + Nonce *big.Int +} + +// 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\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"queuedWithdrawal\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_QueuedWithdrawal\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawerAndNonce\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_WithdrawerAndNonce\",\"components\":[{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"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\":\"migrateQueuedWithdrawal\",\"inputs\":[{\"name\":\"queuedWithdrawal\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_QueuedWithdrawal\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawerAndNonce\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_WithdrawerAndNonce\",\"components\":[{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"function\",\"name\":\"withdrawalRootPending\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"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: "0x6101006040523480156200001257600080fd5b506040516200382938038062003829833981016040819052620000359162000140565b6001600160a01b0380841660805280831660a052811660c0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e051613638620001f1600039600061161d0152600061048f015260006102a601526000818161059b01528181610c0501528181610f9f01528181610ff3015281816110f70152611bd301526136386000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806394f649dd11610130578063c6656702116100b8578063df5cf7231161007c578063df5cf72314610596578063e7a050aa146105bd578063f2fde38b146105d0578063f698da25146105e3578063fabc1cbc146105eb57600080fd5b8063c665670214610520578063cbc2bd6214610533578063cd293f6f14610546578063cf756fdf14610570578063df5b35471461058357600080fd5b8063b43b514b116100ff578063b43b514b146104b1578063b5d8b5b8146104c4578063c3c6b3a9146104d7578063c4623ea1146104fa578063c608c7f31461050d57600080fd5b806394f649dd14610433578063967fc0d2146104545780639b4da03d14610467578063b13442711461048a57600080fd5b80635c975abb116101b35780637ecebe00116101825780637ecebe00146103b3578063886f1195146103d35780638b8aac3c146103e65780638c80d4e51461040f5780638da5cb5b1461042257600080fd5b80635c975abb14610355578063663c1de41461035d578063715018a6146103805780637a7e0d921461038857600080fd5b80634665bcda116101fa5780634665bcda146102a157806348825e94146102e05780634e5a426314610307578063595c6a671461031a5780635ac86ab71461032257600080fd5b806310d67a2f1461022c578063136439dd1461024157806320606b701461025457806332e89ace1461028e575b600080fd5b61023f61023a366004612b4a565b6105fe565b005b61023f61024f366004612b67565b6106ba565b61027b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61027b61029c366004612c00565b6107f9565b6102c87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610285565b61027b7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61023f610315366004612ced565b610ae7565b61023f610b1f565b610345610330366004612d26565b609854600160ff9092169190911b9081161490565b6040519015158152602001610285565b60985461027b565b61034561036b366004612b4a565b60d16020526000908152604090205460ff1681565b61023f610be6565b61027b610396366004612d49565b60cd60209081526000928352604080842090915290825290205481565b61027b6103c1366004612b4a565b60ca6020526000908152604090205481565b6097546102c8906001600160a01b031681565b61027b6103f4366004612b4a565b6001600160a01b0316600090815260ce602052604090205490565b61023f61041d366004612d77565b610bfa565b6033546001600160a01b03166102c8565b610446610441366004612b4a565b610c53565b604051610285929190612e2c565b60cb546102c8906001600160a01b031681565b610345610475366004612b4a565b60d36020526000908152604090205460ff1681565b6102c87f000000000000000000000000000000000000000000000000000000000000000081565b61027b6104bf366004612fd5565b610dd3565b61023f6104d23660046130f0565b610e20565b6103456104e5366004612b67565b60cf6020526000908152604090205460ff1681565b61023f610508366004613132565b610f94565b61023f61051b366004613183565b610fe8565b61023f61052e366004612b4a565b6110a0565b6102c86105413660046131d6565b6110b1565b610559610554366004612fd5565b6110e9565b604080519215158352602083019190915201610285565b61023f61057e366004613132565b61117d565b61023f610591366004613202565b6112b1565b6102c87f000000000000000000000000000000000000000000000000000000000000000081565b61027b6105cb366004612d77565b6114da565b61023f6105de366004612b4a565b6115a3565b61027b611619565b61023f6105f9366004612b67565b611657565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610651573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610675919061326e565b6001600160a01b0316336001600160a01b0316146106ae5760405162461bcd60e51b81526004016106a59061328b565b60405180910390fd5b6106b7816117b3565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610702573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072691906132d5565b6107425760405162461bcd60e51b81526004016106a5906132f2565b609854818116146107bb5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016106a5565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6098546000908190600190811614156108505760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016106a5565b600260655414156108a35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a5565b60026065556001600160a01b038816600090815260d3602052604090205460ff161561094a5760405162461bcd60e51b815260206004820152604a60248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207468697264207472616e736665726064820152691cc8191a5cd8589b195960b21b608482015260a4016106a5565b428410156109cc5760405162461bcd60e51b815260206004820152604360248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207369676e617475726520657870696064820152621c995960ea1b608482015260a4016106a5565b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca9093529082206001850190559150610a84611619565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050610ac78882886118aa565b610ad3888c8c8c611a69565b60016065559b9a5050505050505050505050565b60cb546001600160a01b03163314610b115760405162461bcd60e51b81526004016106a59061333a565b610b1b8282611c38565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8b91906132d5565b610ba75760405162461bcd60e51b81526004016106a5906132f2565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610bee611ca6565b610bf86000611d00565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c425760405162461bcd60e51b81526004016106a5906133a4565b610c4d838383611d52565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610c8b57610c8b612b90565b604051908082528060200260200182016040528015610cb4578160200160208202803683370190505b50905060005b82811015610d45576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610cf957610cf9613402565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610d3257610d32613402565b6020908102919091010152600101610cba565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610dc157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610da3575b50505050509150935093505050915091565b80516020808301516040808501516060860151608087015160a08801519351600097610e03979096959101613418565b604051602081830303815290604052805190602001209050919050565b60cb546001600160a01b03163314610e4a5760405162461bcd60e51b81526004016106a59061333a565b8060005b81811015610c4d5760d16000858584818110610e6c57610e6c613402565b9050602002016020810190610e819190612b4a565b6001600160a01b0316815260208101919091526040016000205460ff1615610f8c57600060d16000868685818110610ebb57610ebb613402565b9050602002016020810190610ed09190612b4a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610f2b57610f2b613402565b9050602002016020810190610f409190612b4a565b6040516001600160a01b03909116815260200160405180910390a1610f8c848483818110610f7057610f70613402565b9050602002016020810190610f859190612b4a565b6000611c38565b600101610e4e565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdc5760405162461bcd60e51b81526004016106a5906133a4565b610c4d84848484611eae565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110305760405162461bcd60e51b81526004016106a5906133a4565b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b15801561108257600080fd5b505af1158015611096573d6000803e3d6000fd5b5050505050505050565b6110a8611ca6565b6106b78161213b565b60ce60205281600052604060002081815481106110cd57600080fd5b6000918252602090912001546001600160a01b03169150829050565b600080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111345760405162461bcd60e51b81526004016106a5906133a4565b600061113f84610dd3565b600081815260cf60205260408120549192509060ff16156111745750600081815260cf60205260409020805460ff1916905560015b92509050915091565b600054610100900460ff161580801561119d5750600054600160ff909116105b806111b75750303b1580156111b7575060005460ff166001145b61121a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a5565b6000805460ff19166001179055801561123d576000805461ff0019166101001790555b6112456121a4565b60c955611252838361223b565b61125b85611d00565b6112648461213b565b80156112aa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b031633146112db5760405162461bcd60e51b81526004016106a59061333a565b8281146113645760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794d616e616765722e61646453747261746567696573546f4460448201527f65706f73697457686974656c6973743a206172726179206c656e67746873206460648201526a0de40dcdee840dac2e8c6d60ab1b608482015260a4016106a5565b8260005b818110156114d25760d1600087878481811061138657611386613402565b905060200201602081019061139b9190612b4a565b6001600160a01b0316815260208101919091526040016000205460ff166114ca57600160d160008888858181106113d4576113d4613402565b90506020020160208101906113e99190612b4a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe86868381811061144457611444613402565b90506020020160208101906114599190612b4a565b6040516001600160a01b03909116815260200160405180910390a16114ca86868381811061148957611489613402565b905060200201602081019061149e9190612b4a565b8585848181106114b0576114b0613402565b90506020020160208101906114c59190613491565b611c38565b600101611368565b505050505050565b6098546000908190600190811614156115315760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016106a5565b600260655414156115845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a5565b600260655561159533868686611a69565b600160655595945050505050565b6115ab611ca6565b6001600160a01b0381166116105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a5565b6106b781611d00565b60007f000000000000000000000000000000000000000000000000000000000000000046141561164a575060c95490565b6116526121a4565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ce919061326e565b6001600160a01b0316336001600160a01b0316146116fe5760405162461bcd60e51b81526004016106a59061328b565b60985419811960985419161461177c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016106a5565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107ee565b6001600160a01b0381166118415760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016106a5565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b156119c957604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906118ea9086908690600401613506565b602060405180830381865afa158015611907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192b919061351f565b6001600160e01b031916146119c45760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a4016106a5565b505050565b826001600160a01b03166119dd8383612321565b6001600160a01b0316146119c45760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a4016106a5565b6001600160a01b038316600090815260d16020526040812054849060ff16611b0f5760405162461bcd60e51b815260206004820152604d60248201527f53747261746567794d616e616765722e6f6e6c7953747261746567696573576860448201527f6974656c6973746564466f724465706f7369743a207374726174656779206e6f60648201526c1d081dda1a5d195b1a5cdd1959609a1b608482015260a4016106a5565b611b246001600160a01b038516338786612345565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b979190613549565b9150611ba586858785611eae565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b158015611c1757600080fd5b505af1158015611c2b573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610bf85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081611dc75760405162461bcd60e51b815260206004820152603e60248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a207360448201527f68617265416d6f756e742073686f756c64206e6f74206265207a65726f21000060648201526084016106a5565b6001600160a01b03808516600090815260cd602090815260408083209387168352929052205480831115611e595760405162461bcd60e51b815260206004820152603360248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a20736044820152720d0c2e4ca82dadeeadce840e8dede40d0d2ced606b1b60648201526084016106a5565b6001600160a01b03808616600090815260cd602090815260408083209388168352929052208382039081905590831415611ea157611e97858561239f565b6001915050611ea7565b60009150505b9392505050565b6001600160a01b038416611f2a5760405162461bcd60e51b815260206004820152603960248201527f53747261746567794d616e616765722e5f6164645368617265733a207374616b60448201527f65722063616e6e6f74206265207a65726f20616464726573730000000000000060648201526084016106a5565b80611f965760405162461bcd60e51b815260206004820152603660248201527f53747261746567794d616e616765722e5f6164645368617265733a207368617260448201527565732073686f756c64206e6f74206265207a65726f2160501b60648201526084016106a5565b6001600160a01b03808516600090815260cd60209081526040808320938616835292905220546120a7576001600160a01b038416600090815260ce6020908152604090912054106120685760405162461bcd60e51b815260206004820152605060248201527f53747261746567794d616e616765722e5f6164645368617265733a206465706f60448201527f73697420776f756c6420657863656564204d41585f5354414b45525f5354524160648201526f0a88a8eb2be9892a6a8be988a9c8ea8960831b608482015260a4016106a5565b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd60209081526040808320938616835292905290812080548392906120de908490613578565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b031615801561225c57506001600160a01b03821615155b6122de5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016106a5565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610b1b826117b3565b60008060006123308585612591565b9150915061233d81612601565b509392505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610c4d9085906127bc565b6001600160a01b038216600090815260ce6020526040812054905b818110156124ba576001600160a01b03848116600090815260ce60205260409020805491851691839081106123f1576123f1613402565b6000918252602090912001546001600160a01b031614156124b2576001600160a01b038416600090815260ce60205260409020805461243290600190613590565b8154811061244257612442613402565b60009182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061247f5761247f613402565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506124ba565b6001016123ba565b818114156125425760405162461bcd60e51b815260206004820152604960248201527f53747261746567794d616e616765722e5f72656d6f766553747261746567794660448201527f726f6d5374616b657253747261746567794c6973743a207374726174656779206064820152681b9bdd08199bdd5b9960ba1b608482015260a4016106a5565b6001600160a01b038416600090815260ce60205260409020805480612569576125696135a7565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604114156125c85760208301516040840151606085015160001a6125bc8782858561288e565b945094505050506125fa565b8251604014156125f257602083015160408401516125e786838361297b565b9350935050506125fa565b506000905060025b9250929050565b6000816004811115612615576126156135bd565b141561261e5750565b6001816004811115612632576126326135bd565b14156126805760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106a5565b6002816004811115612694576126946135bd565b14156126e25760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106a5565b60038160048111156126f6576126f66135bd565b141561274f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106a5565b6004816004811115612763576127636135bd565b14156106b75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106a5565b6000612811826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129b49092919063ffffffff16565b8051909150156119c4578080602001905181019061282f91906132d5565b6119c45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a5565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128c55750600090506003612972565b8460ff16601b141580156128dd57508460ff16601c14155b156128ee5750600090506004612972565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612942573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661296b57600060019250925050612972565b9150600090505b94509492505050565b6000806001600160ff1b0383168161299860ff86901c601b613578565b90506129a68782888561288e565b935093505050935093915050565b60606129c384846000856129cb565b949350505050565b606082471015612a2c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a5565b6001600160a01b0385163b612a835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a5565b600080866001600160a01b03168587604051612a9f91906135d3565b60006040518083038185875af1925050503d8060008114612adc576040519150601f19603f3d011682016040523d82523d6000602084013e612ae1565b606091505b5091509150612af1828286612afc565b979650505050505050565b60608315612b0b575081611ea7565b825115612b1b5782518084602001fd5b8160405162461bcd60e51b81526004016106a591906135ef565b6001600160a01b03811681146106b757600080fd5b600060208284031215612b5c57600080fd5b8135611ea781612b35565b600060208284031215612b7957600080fd5b5035919050565b8035612b8b81612b35565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612bc957612bc9612b90565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612bf857612bf8612b90565b604052919050565b60008060008060008060c08789031215612c1957600080fd5b8635612c2481612b35565b9550602087810135612c3581612b35565b9550604088013594506060880135612c4c81612b35565b93506080880135925060a088013567ffffffffffffffff80821115612c7057600080fd5b818a0191508a601f830112612c8457600080fd5b813581811115612c9657612c96612b90565b612ca8601f8201601f19168501612bcf565b91508082528b84828501011115612cbe57600080fd5b80848401858401376000848284010152508093505050509295509295509295565b80151581146106b757600080fd5b60008060408385031215612d0057600080fd5b8235612d0b81612b35565b91506020830135612d1b81612cdf565b809150509250929050565b600060208284031215612d3857600080fd5b813560ff81168114611ea757600080fd5b60008060408385031215612d5c57600080fd5b8235612d6781612b35565b91506020830135612d1b81612b35565b600080600060608486031215612d8c57600080fd5b8335612d9781612b35565b92506020840135612da781612b35565b929592945050506040919091013590565b600081518084526020808501945080840160005b83811015612df15781516001600160a01b031687529582019590820190600101612dcc565b509495945050505050565b600081518084526020808501945080840160005b83811015612df157815187529582019590820190600101612e10565b604081526000612e3f6040830185612db8565b8281036020840152612e518185612dfc565b95945050505050565b600067ffffffffffffffff821115612e7457612e74612b90565b5060051b60200190565b600082601f830112612e8f57600080fd5b81356020612ea4612e9f83612e5a565b612bcf565b82815260059290921b84018101918181019086841115612ec357600080fd5b8286015b84811015612ee7578035612eda81612b35565b8352918301918301612ec7565b509695505050505050565b600082601f830112612f0357600080fd5b81356020612f13612e9f83612e5a565b82815260059290921b84018101918181019086841115612f3257600080fd5b8286015b84811015612ee75780358352918301918301612f36565b600060408284031215612f5f57600080fd5b6040516040810181811067ffffffffffffffff82111715612f8257612f82612b90565b6040529050808235612f9381612b35565b815260208301356bffffffffffffffffffffffff81168114612fb457600080fd5b6020919091015292915050565b803563ffffffff81168114612b8b57600080fd5b600060208284031215612fe757600080fd5b813567ffffffffffffffff80821115612fff57600080fd5b9083019060e0828603121561301357600080fd5b61301b612ba6565b82358281111561302a57600080fd5b61303687828601612e7e565b82525060208301358281111561304b57600080fd5b61305787828601612ef2565b60208301525061306960408401612b80565b604082015261307b8660608501612f4d565b606082015261308c60a08401612fc1565b608082015261309d60c08401612b80565b60a082015295945050505050565b60008083601f8401126130bd57600080fd5b50813567ffffffffffffffff8111156130d557600080fd5b6020830191508360208260051b85010111156125fa57600080fd5b6000806020838503121561310357600080fd5b823567ffffffffffffffff81111561311a57600080fd5b613126858286016130ab565b90969095509350505050565b6000806000806080858703121561314857600080fd5b843561315381612b35565b9350602085013561316381612b35565b9250604085013561317381612b35565b9396929550929360600135925050565b6000806000806080858703121561319957600080fd5b84356131a481612b35565b935060208501356131b481612b35565b92506040850135915060608501356131cb81612b35565b939692955090935050565b600080604083850312156131e957600080fd5b82356131f481612b35565b946020939093013593505050565b6000806000806040858703121561321857600080fd5b843567ffffffffffffffff8082111561323057600080fd5b61323c888389016130ab565b9096509450602087013591508082111561325557600080fd5b50613262878288016130ab565b95989497509550505050565b60006020828403121561328057600080fd5b8151611ea781612b35565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156132e757600080fd5b8151611ea781612cdf565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526044908201527f53747261746567794d616e616765722e6f6e6c7953747261746567795768697460408201527f656c69737465723a206e6f742074686520737472617465677957686974656c6960608201526339ba32b960e11b608082015260a00190565b602080825260409082018190527f53747261746567794d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60e08152600061342b60e0830189612db8565b828103602084015261343d8189612dfc565b6001600160a01b0397881660408501528651881660608501526020909601516bffffffffffffffffffffffff166080840152505063ffffffff9290921660a083015290921660c09092019190915292915050565b6000602082840312156134a357600080fd5b8135611ea781612cdf565b60005b838110156134c95781810151838201526020016134b1565b83811115610c4d5750506000910152565b600081518084526134f28160208601602086016134ae565b601f01601f19169290920160200192915050565b8281526040602082015260006129c360408301846134da565b60006020828403121561353157600080fd5b81516001600160e01b031981168114611ea757600080fd5b60006020828403121561355b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561358b5761358b613562565b500190565b6000828210156135a2576135a2613562565b500390565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600082516135e58184602087016134ae565b9190910192915050565b602081526000611ea760208301846134da56fea2646970667358221220abc36fd2ee49ca4102e163b1f97cb4379664d06b78743a638a212906db6072d764736f6c634300080c0033", +} + +// StrategyManagerABI is the input ABI used to generate the binding from. +// Deprecated: Use StrategyManagerMetaData.ABI instead. +var StrategyManagerABI = StrategyManagerMetaData.ABI + +// StrategyManagerBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use StrategyManagerMetaData.Bin instead. +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) { + parsed, err := StrategyManagerMetaData.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(StrategyManagerBin), backend, _delegation, _eigenPodManager, _slasher) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &StrategyManager{StrategyManagerCaller: StrategyManagerCaller{contract: contract}, StrategyManagerTransactor: StrategyManagerTransactor{contract: contract}, StrategyManagerFilterer: StrategyManagerFilterer{contract: contract}}, nil +} + +// StrategyManager is an auto generated Go binding around an Ethereum contract. +type StrategyManager struct { + StrategyManagerCaller // Read-only binding to the contract + StrategyManagerTransactor // Write-only binding to the contract + StrategyManagerFilterer // Log filterer for contract events +} + +// StrategyManagerCaller is an auto generated read-only Go binding around an Ethereum contract. +type StrategyManagerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StrategyManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type StrategyManagerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StrategyManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type StrategyManagerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StrategyManagerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type StrategyManagerSession struct { + Contract *StrategyManager // 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 +} + +// StrategyManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type StrategyManagerCallerSession struct { + Contract *StrategyManagerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// StrategyManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type StrategyManagerTransactorSession struct { + Contract *StrategyManagerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// StrategyManagerRaw is an auto generated low-level Go binding around an Ethereum contract. +type StrategyManagerRaw struct { + Contract *StrategyManager // Generic contract binding to access the raw methods on +} + +// StrategyManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type StrategyManagerCallerRaw struct { + Contract *StrategyManagerCaller // Generic read-only contract binding to access the raw methods on +} + +// StrategyManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type StrategyManagerTransactorRaw struct { + Contract *StrategyManagerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewStrategyManager creates a new instance of StrategyManager, bound to a specific deployed contract. +func NewStrategyManager(address common.Address, backend bind.ContractBackend) (*StrategyManager, error) { + contract, err := bindStrategyManager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &StrategyManager{StrategyManagerCaller: StrategyManagerCaller{contract: contract}, StrategyManagerTransactor: StrategyManagerTransactor{contract: contract}, StrategyManagerFilterer: StrategyManagerFilterer{contract: contract}}, nil +} + +// NewStrategyManagerCaller creates a new read-only instance of StrategyManager, bound to a specific deployed contract. +func NewStrategyManagerCaller(address common.Address, caller bind.ContractCaller) (*StrategyManagerCaller, error) { + contract, err := bindStrategyManager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &StrategyManagerCaller{contract: contract}, nil +} + +// NewStrategyManagerTransactor creates a new write-only instance of StrategyManager, bound to a specific deployed contract. +func NewStrategyManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*StrategyManagerTransactor, error) { + contract, err := bindStrategyManager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &StrategyManagerTransactor{contract: contract}, nil +} + +// NewStrategyManagerFilterer creates a new log filterer instance of StrategyManager, bound to a specific deployed contract. +func NewStrategyManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*StrategyManagerFilterer, error) { + contract, err := bindStrategyManager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &StrategyManagerFilterer{contract: contract}, nil +} + +// bindStrategyManager binds a generic wrapper to an already deployed contract. +func bindStrategyManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := StrategyManagerMetaData.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 (_StrategyManager *StrategyManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StrategyManager.Contract.StrategyManagerCaller.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 (_StrategyManager *StrategyManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StrategyManager.Contract.StrategyManagerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StrategyManager *StrategyManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StrategyManager.Contract.StrategyManagerTransactor.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 (_StrategyManager *StrategyManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StrategyManager.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 (_StrategyManager *StrategyManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StrategyManager.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StrategyManager *StrategyManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StrategyManager.Contract.contract.Transact(opts, method, params...) +} + +// DEPOSITTYPEHASH is a free data retrieval call binding the contract method 0x48825e94. +// +// Solidity: function DEPOSIT_TYPEHASH() view returns(bytes32) +func (_StrategyManager *StrategyManagerCaller) DEPOSITTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "DEPOSIT_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEPOSITTYPEHASH is a free data retrieval call binding the contract method 0x48825e94. +// +// Solidity: function DEPOSIT_TYPEHASH() view returns(bytes32) +func (_StrategyManager *StrategyManagerSession) DEPOSITTYPEHASH() ([32]byte, error) { + return _StrategyManager.Contract.DEPOSITTYPEHASH(&_StrategyManager.CallOpts) +} + +// DEPOSITTYPEHASH is a free data retrieval call binding the contract method 0x48825e94. +// +// Solidity: function DEPOSIT_TYPEHASH() view returns(bytes32) +func (_StrategyManager *StrategyManagerCallerSession) DEPOSITTYPEHASH() ([32]byte, error) { + return _StrategyManager.Contract.DEPOSITTYPEHASH(&_StrategyManager.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_StrategyManager *StrategyManagerCaller) DOMAINTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "DOMAIN_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_StrategyManager *StrategyManagerSession) DOMAINTYPEHASH() ([32]byte, error) { + return _StrategyManager.Contract.DOMAINTYPEHASH(&_StrategyManager.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_StrategyManager *StrategyManagerCallerSession) DOMAINTYPEHASH() ([32]byte, error) { + return _StrategyManager.Contract.DOMAINTYPEHASH(&_StrategyManager.CallOpts) +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0xb43b514b. +// +// Solidity: function calculateWithdrawalRoot((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) pure returns(bytes32) +func (_StrategyManager *StrategyManagerCaller) CalculateWithdrawalRoot(opts *bind.CallOpts, queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) ([32]byte, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "calculateWithdrawalRoot", queuedWithdrawal) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0xb43b514b. +// +// Solidity: function calculateWithdrawalRoot((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) pure returns(bytes32) +func (_StrategyManager *StrategyManagerSession) CalculateWithdrawalRoot(queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) ([32]byte, error) { + return _StrategyManager.Contract.CalculateWithdrawalRoot(&_StrategyManager.CallOpts, queuedWithdrawal) +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0xb43b514b. +// +// Solidity: function calculateWithdrawalRoot((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) pure returns(bytes32) +func (_StrategyManager *StrategyManagerCallerSession) CalculateWithdrawalRoot(queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) ([32]byte, error) { + return _StrategyManager.Contract.CalculateWithdrawalRoot(&_StrategyManager.CallOpts, queuedWithdrawal) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_StrategyManager *StrategyManagerCaller) Delegation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "delegation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_StrategyManager *StrategyManagerSession) Delegation() (common.Address, error) { + return _StrategyManager.Contract.Delegation(&_StrategyManager.CallOpts) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_StrategyManager *StrategyManagerCallerSession) Delegation() (common.Address, error) { + return _StrategyManager.Contract.Delegation(&_StrategyManager.CallOpts) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_StrategyManager *StrategyManagerCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StrategyManager.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 + +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_StrategyManager *StrategyManagerSession) DomainSeparator() ([32]byte, error) { + return _StrategyManager.Contract.DomainSeparator(&_StrategyManager.CallOpts) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_StrategyManager *StrategyManagerCallerSession) DomainSeparator() ([32]byte, error) { + return _StrategyManager.Contract.DomainSeparator(&_StrategyManager.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_StrategyManager *StrategyManagerCaller) EigenPodManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyManager.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 (_StrategyManager *StrategyManagerSession) EigenPodManager() (common.Address, error) { + return _StrategyManager.Contract.EigenPodManager(&_StrategyManager.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_StrategyManager *StrategyManagerCallerSession) EigenPodManager() (common.Address, error) { + return _StrategyManager.Contract.EigenPodManager(&_StrategyManager.CallOpts) +} + +// GetDeposits is a free data retrieval call binding the contract method 0x94f649dd. +// +// Solidity: function getDeposits(address staker) view returns(address[], uint256[]) +func (_StrategyManager *StrategyManagerCaller) GetDeposits(opts *bind.CallOpts, staker common.Address) ([]common.Address, []*big.Int, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "getDeposits", staker) + + if err != nil { + return *new([]common.Address), *new([]*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + out1 := *abi.ConvertType(out[1], new([]*big.Int)).(*[]*big.Int) + + return out0, out1, err + +} + +// GetDeposits is a free data retrieval call binding the contract method 0x94f649dd. +// +// Solidity: function getDeposits(address staker) view returns(address[], uint256[]) +func (_StrategyManager *StrategyManagerSession) GetDeposits(staker common.Address) ([]common.Address, []*big.Int, error) { + return _StrategyManager.Contract.GetDeposits(&_StrategyManager.CallOpts, staker) +} + +// GetDeposits is a free data retrieval call binding the contract method 0x94f649dd. +// +// Solidity: function getDeposits(address staker) view returns(address[], uint256[]) +func (_StrategyManager *StrategyManagerCallerSession) GetDeposits(staker common.Address) ([]common.Address, []*big.Int, error) { + return _StrategyManager.Contract.GetDeposits(&_StrategyManager.CallOpts, staker) +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address ) view returns(uint256) +func (_StrategyManager *StrategyManagerCaller) Nonces(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "nonces", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address ) view returns(uint256) +func (_StrategyManager *StrategyManagerSession) Nonces(arg0 common.Address) (*big.Int, error) { + return _StrategyManager.Contract.Nonces(&_StrategyManager.CallOpts, arg0) +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address ) view returns(uint256) +func (_StrategyManager *StrategyManagerCallerSession) Nonces(arg0 common.Address) (*big.Int, error) { + return _StrategyManager.Contract.Nonces(&_StrategyManager.CallOpts, arg0) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_StrategyManager *StrategyManagerCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyManager.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 (_StrategyManager *StrategyManagerSession) Owner() (common.Address, error) { + return _StrategyManager.Contract.Owner(&_StrategyManager.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_StrategyManager *StrategyManagerCallerSession) Owner() (common.Address, error) { + return _StrategyManager.Contract.Owner(&_StrategyManager.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_StrategyManager *StrategyManagerCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _StrategyManager.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 (_StrategyManager *StrategyManagerSession) Paused(index uint8) (bool, error) { + return _StrategyManager.Contract.Paused(&_StrategyManager.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_StrategyManager *StrategyManagerCallerSession) Paused(index uint8) (bool, error) { + return _StrategyManager.Contract.Paused(&_StrategyManager.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_StrategyManager *StrategyManagerCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StrategyManager.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 (_StrategyManager *StrategyManagerSession) Paused0() (*big.Int, error) { + return _StrategyManager.Contract.Paused0(&_StrategyManager.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_StrategyManager *StrategyManagerCallerSession) Paused0() (*big.Int, error) { + return _StrategyManager.Contract.Paused0(&_StrategyManager.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_StrategyManager *StrategyManagerCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyManager.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 (_StrategyManager *StrategyManagerSession) PauserRegistry() (common.Address, error) { + return _StrategyManager.Contract.PauserRegistry(&_StrategyManager.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_StrategyManager *StrategyManagerCallerSession) PauserRegistry() (common.Address, error) { + return _StrategyManager.Contract.PauserRegistry(&_StrategyManager.CallOpts) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_StrategyManager *StrategyManagerCaller) Slasher(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "slasher") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_StrategyManager *StrategyManagerSession) Slasher() (common.Address, error) { + return _StrategyManager.Contract.Slasher(&_StrategyManager.CallOpts) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_StrategyManager *StrategyManagerCallerSession) Slasher() (common.Address, error) { + return _StrategyManager.Contract.Slasher(&_StrategyManager.CallOpts) +} + +// StakerStrategyList is a free data retrieval call binding the contract method 0xcbc2bd62. +// +// Solidity: function stakerStrategyList(address , uint256 ) view returns(address) +func (_StrategyManager *StrategyManagerCaller) StakerStrategyList(opts *bind.CallOpts, arg0 common.Address, arg1 *big.Int) (common.Address, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "stakerStrategyList", arg0, arg1) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StakerStrategyList is a free data retrieval call binding the contract method 0xcbc2bd62. +// +// Solidity: function stakerStrategyList(address , uint256 ) view returns(address) +func (_StrategyManager *StrategyManagerSession) StakerStrategyList(arg0 common.Address, arg1 *big.Int) (common.Address, error) { + return _StrategyManager.Contract.StakerStrategyList(&_StrategyManager.CallOpts, arg0, arg1) +} + +// StakerStrategyList is a free data retrieval call binding the contract method 0xcbc2bd62. +// +// Solidity: function stakerStrategyList(address , uint256 ) view returns(address) +func (_StrategyManager *StrategyManagerCallerSession) StakerStrategyList(arg0 common.Address, arg1 *big.Int) (common.Address, error) { + return _StrategyManager.Contract.StakerStrategyList(&_StrategyManager.CallOpts, arg0, arg1) +} + +// StakerStrategyListLength is a free data retrieval call binding the contract method 0x8b8aac3c. +// +// Solidity: function stakerStrategyListLength(address staker) view returns(uint256) +func (_StrategyManager *StrategyManagerCaller) StakerStrategyListLength(opts *bind.CallOpts, staker common.Address) (*big.Int, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "stakerStrategyListLength", staker) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerStrategyListLength is a free data retrieval call binding the contract method 0x8b8aac3c. +// +// Solidity: function stakerStrategyListLength(address staker) view returns(uint256) +func (_StrategyManager *StrategyManagerSession) StakerStrategyListLength(staker common.Address) (*big.Int, error) { + return _StrategyManager.Contract.StakerStrategyListLength(&_StrategyManager.CallOpts, staker) +} + +// StakerStrategyListLength is a free data retrieval call binding the contract method 0x8b8aac3c. +// +// Solidity: function stakerStrategyListLength(address staker) view returns(uint256) +func (_StrategyManager *StrategyManagerCallerSession) StakerStrategyListLength(staker common.Address) (*big.Int, error) { + return _StrategyManager.Contract.StakerStrategyListLength(&_StrategyManager.CallOpts, staker) +} + +// StakerStrategyShares is a free data retrieval call binding the contract method 0x7a7e0d92. +// +// Solidity: function stakerStrategyShares(address , address ) view returns(uint256) +func (_StrategyManager *StrategyManagerCaller) StakerStrategyShares(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "stakerStrategyShares", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerStrategyShares is a free data retrieval call binding the contract method 0x7a7e0d92. +// +// Solidity: function stakerStrategyShares(address , address ) view returns(uint256) +func (_StrategyManager *StrategyManagerSession) StakerStrategyShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _StrategyManager.Contract.StakerStrategyShares(&_StrategyManager.CallOpts, arg0, arg1) +} + +// StakerStrategyShares is a free data retrieval call binding the contract method 0x7a7e0d92. +// +// Solidity: function stakerStrategyShares(address , address ) view returns(uint256) +func (_StrategyManager *StrategyManagerCallerSession) StakerStrategyShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _StrategyManager.Contract.StakerStrategyShares(&_StrategyManager.CallOpts, arg0, arg1) +} + +// StrategyIsWhitelistedForDeposit is a free data retrieval call binding the contract method 0x663c1de4. +// +// Solidity: function strategyIsWhitelistedForDeposit(address ) view returns(bool) +func (_StrategyManager *StrategyManagerCaller) StrategyIsWhitelistedForDeposit(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "strategyIsWhitelistedForDeposit", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// StrategyIsWhitelistedForDeposit is a free data retrieval call binding the contract method 0x663c1de4. +// +// Solidity: function strategyIsWhitelistedForDeposit(address ) view returns(bool) +func (_StrategyManager *StrategyManagerSession) StrategyIsWhitelistedForDeposit(arg0 common.Address) (bool, error) { + return _StrategyManager.Contract.StrategyIsWhitelistedForDeposit(&_StrategyManager.CallOpts, arg0) +} + +// StrategyIsWhitelistedForDeposit is a free data retrieval call binding the contract method 0x663c1de4. +// +// Solidity: function strategyIsWhitelistedForDeposit(address ) view returns(bool) +func (_StrategyManager *StrategyManagerCallerSession) StrategyIsWhitelistedForDeposit(arg0 common.Address) (bool, error) { + return _StrategyManager.Contract.StrategyIsWhitelistedForDeposit(&_StrategyManager.CallOpts, arg0) +} + +// StrategyWhitelister is a free data retrieval call binding the contract method 0x967fc0d2. +// +// Solidity: function strategyWhitelister() view returns(address) +func (_StrategyManager *StrategyManagerCaller) StrategyWhitelister(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "strategyWhitelister") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StrategyWhitelister is a free data retrieval call binding the contract method 0x967fc0d2. +// +// Solidity: function strategyWhitelister() view returns(address) +func (_StrategyManager *StrategyManagerSession) StrategyWhitelister() (common.Address, error) { + return _StrategyManager.Contract.StrategyWhitelister(&_StrategyManager.CallOpts) +} + +// StrategyWhitelister is a free data retrieval call binding the contract method 0x967fc0d2. +// +// Solidity: function strategyWhitelister() view returns(address) +func (_StrategyManager *StrategyManagerCallerSession) StrategyWhitelister() (common.Address, error) { + return _StrategyManager.Contract.StrategyWhitelister(&_StrategyManager.CallOpts) +} + +// ThirdPartyTransfersForbidden is a free data retrieval call binding the contract method 0x9b4da03d. +// +// Solidity: function thirdPartyTransfersForbidden(address ) view returns(bool) +func (_StrategyManager *StrategyManagerCaller) ThirdPartyTransfersForbidden(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "thirdPartyTransfersForbidden", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// ThirdPartyTransfersForbidden is a free data retrieval call binding the contract method 0x9b4da03d. +// +// Solidity: function thirdPartyTransfersForbidden(address ) view returns(bool) +func (_StrategyManager *StrategyManagerSession) ThirdPartyTransfersForbidden(arg0 common.Address) (bool, error) { + return _StrategyManager.Contract.ThirdPartyTransfersForbidden(&_StrategyManager.CallOpts, arg0) +} + +// ThirdPartyTransfersForbidden is a free data retrieval call binding the contract method 0x9b4da03d. +// +// Solidity: function thirdPartyTransfersForbidden(address ) view returns(bool) +func (_StrategyManager *StrategyManagerCallerSession) ThirdPartyTransfersForbidden(arg0 common.Address) (bool, error) { + return _StrategyManager.Contract.ThirdPartyTransfersForbidden(&_StrategyManager.CallOpts, arg0) +} + +// WithdrawalRootPending is a free data retrieval call binding the contract method 0xc3c6b3a9. +// +// Solidity: function withdrawalRootPending(bytes32 ) view returns(bool) +func (_StrategyManager *StrategyManagerCaller) WithdrawalRootPending(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "withdrawalRootPending", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// WithdrawalRootPending is a free data retrieval call binding the contract method 0xc3c6b3a9. +// +// Solidity: function withdrawalRootPending(bytes32 ) view returns(bool) +func (_StrategyManager *StrategyManagerSession) WithdrawalRootPending(arg0 [32]byte) (bool, error) { + return _StrategyManager.Contract.WithdrawalRootPending(&_StrategyManager.CallOpts, arg0) +} + +// WithdrawalRootPending is a free data retrieval call binding the contract method 0xc3c6b3a9. +// +// Solidity: function withdrawalRootPending(bytes32 ) view returns(bool) +func (_StrategyManager *StrategyManagerCallerSession) WithdrawalRootPending(arg0 [32]byte) (bool, error) { + return _StrategyManager.Contract.WithdrawalRootPending(&_StrategyManager.CallOpts, arg0) +} + +// AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. +// +// 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() +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() +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) +} + +// AddStrategiesToDepositWhitelist is a paid mutator transaction binding the contract method 0xdf5b3547. +// +// Solidity: function addStrategiesToDepositWhitelist(address[] strategiesToWhitelist, bool[] thirdPartyTransfersForbiddenValues) returns() +func (_StrategyManager *StrategyManagerTransactor) AddStrategiesToDepositWhitelist(opts *bind.TransactOpts, strategiesToWhitelist []common.Address, thirdPartyTransfersForbiddenValues []bool) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "addStrategiesToDepositWhitelist", strategiesToWhitelist, thirdPartyTransfersForbiddenValues) +} + +// AddStrategiesToDepositWhitelist is a paid mutator transaction binding the contract method 0xdf5b3547. +// +// Solidity: function addStrategiesToDepositWhitelist(address[] strategiesToWhitelist, bool[] thirdPartyTransfersForbiddenValues) returns() +func (_StrategyManager *StrategyManagerSession) AddStrategiesToDepositWhitelist(strategiesToWhitelist []common.Address, thirdPartyTransfersForbiddenValues []bool) (*types.Transaction, error) { + return _StrategyManager.Contract.AddStrategiesToDepositWhitelist(&_StrategyManager.TransactOpts, strategiesToWhitelist, thirdPartyTransfersForbiddenValues) +} + +// AddStrategiesToDepositWhitelist is a paid mutator transaction binding the contract method 0xdf5b3547. +// +// Solidity: function addStrategiesToDepositWhitelist(address[] strategiesToWhitelist, bool[] thirdPartyTransfersForbiddenValues) returns() +func (_StrategyManager *StrategyManagerTransactorSession) AddStrategiesToDepositWhitelist(strategiesToWhitelist []common.Address, thirdPartyTransfersForbiddenValues []bool) (*types.Transaction, error) { + return _StrategyManager.Contract.AddStrategiesToDepositWhitelist(&_StrategyManager.TransactOpts, strategiesToWhitelist, thirdPartyTransfersForbiddenValues) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xe7a050aa. +// +// Solidity: function depositIntoStrategy(address strategy, address token, uint256 amount) returns(uint256 shares) +func (_StrategyManager *StrategyManagerTransactor) DepositIntoStrategy(opts *bind.TransactOpts, strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "depositIntoStrategy", strategy, token, amount) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xe7a050aa. +// +// Solidity: function depositIntoStrategy(address strategy, address token, uint256 amount) returns(uint256 shares) +func (_StrategyManager *StrategyManagerSession) DepositIntoStrategy(strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _StrategyManager.Contract.DepositIntoStrategy(&_StrategyManager.TransactOpts, strategy, token, amount) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xe7a050aa. +// +// Solidity: function depositIntoStrategy(address strategy, address token, uint256 amount) returns(uint256 shares) +func (_StrategyManager *StrategyManagerTransactorSession) DepositIntoStrategy(strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _StrategyManager.Contract.DepositIntoStrategy(&_StrategyManager.TransactOpts, strategy, token, amount) +} + +// DepositIntoStrategyWithSignature is a paid mutator transaction binding the contract method 0x32e89ace. +// +// Solidity: function depositIntoStrategyWithSignature(address strategy, address token, uint256 amount, address staker, uint256 expiry, bytes signature) returns(uint256 shares) +func (_StrategyManager *StrategyManagerTransactor) DepositIntoStrategyWithSignature(opts *bind.TransactOpts, strategy common.Address, token common.Address, amount *big.Int, staker common.Address, expiry *big.Int, signature []byte) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "depositIntoStrategyWithSignature", strategy, token, amount, staker, expiry, signature) +} + +// DepositIntoStrategyWithSignature is a paid mutator transaction binding the contract method 0x32e89ace. +// +// Solidity: function depositIntoStrategyWithSignature(address strategy, address token, uint256 amount, address staker, uint256 expiry, bytes signature) returns(uint256 shares) +func (_StrategyManager *StrategyManagerSession) DepositIntoStrategyWithSignature(strategy common.Address, token common.Address, amount *big.Int, staker common.Address, expiry *big.Int, signature []byte) (*types.Transaction, error) { + return _StrategyManager.Contract.DepositIntoStrategyWithSignature(&_StrategyManager.TransactOpts, strategy, token, amount, staker, expiry, signature) +} + +// DepositIntoStrategyWithSignature is a paid mutator transaction binding the contract method 0x32e89ace. +// +// Solidity: function depositIntoStrategyWithSignature(address strategy, address token, uint256 amount, address staker, uint256 expiry, bytes signature) returns(uint256 shares) +func (_StrategyManager *StrategyManagerTransactorSession) DepositIntoStrategyWithSignature(strategy common.Address, token common.Address, amount *big.Int, staker common.Address, expiry *big.Int, signature []byte) (*types.Transaction, error) { + return _StrategyManager.Contract.DepositIntoStrategyWithSignature(&_StrategyManager.TransactOpts, strategy, token, amount, staker, expiry, signature) +} + +// Initialize is a paid mutator transaction binding the contract method 0xcf756fdf. +// +// Solidity: function initialize(address initialOwner, address initialStrategyWhitelister, address _pauserRegistry, uint256 initialPausedStatus) returns() +func (_StrategyManager *StrategyManagerTransactor) Initialize(opts *bind.TransactOpts, initialOwner common.Address, initialStrategyWhitelister common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "initialize", initialOwner, initialStrategyWhitelister, _pauserRegistry, initialPausedStatus) +} + +// Initialize is a paid mutator transaction binding the contract method 0xcf756fdf. +// +// Solidity: function initialize(address initialOwner, address initialStrategyWhitelister, address _pauserRegistry, uint256 initialPausedStatus) returns() +func (_StrategyManager *StrategyManagerSession) Initialize(initialOwner common.Address, initialStrategyWhitelister common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyManager.Contract.Initialize(&_StrategyManager.TransactOpts, initialOwner, initialStrategyWhitelister, _pauserRegistry, initialPausedStatus) +} + +// Initialize is a paid mutator transaction binding the contract method 0xcf756fdf. +// +// Solidity: function initialize(address initialOwner, address initialStrategyWhitelister, address _pauserRegistry, uint256 initialPausedStatus) returns() +func (_StrategyManager *StrategyManagerTransactorSession) Initialize(initialOwner common.Address, initialStrategyWhitelister common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyManager.Contract.Initialize(&_StrategyManager.TransactOpts, initialOwner, initialStrategyWhitelister, _pauserRegistry, initialPausedStatus) +} + +// MigrateQueuedWithdrawal is a paid mutator transaction binding the contract method 0xcd293f6f. +// +// Solidity: function migrateQueuedWithdrawal((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) returns(bool, bytes32) +func (_StrategyManager *StrategyManagerTransactor) MigrateQueuedWithdrawal(opts *bind.TransactOpts, queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "migrateQueuedWithdrawal", queuedWithdrawal) +} + +// MigrateQueuedWithdrawal is a paid mutator transaction binding the contract method 0xcd293f6f. +// +// Solidity: function migrateQueuedWithdrawal((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) returns(bool, bytes32) +func (_StrategyManager *StrategyManagerSession) MigrateQueuedWithdrawal(queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _StrategyManager.Contract.MigrateQueuedWithdrawal(&_StrategyManager.TransactOpts, queuedWithdrawal) +} + +// MigrateQueuedWithdrawal is a paid mutator transaction binding the contract method 0xcd293f6f. +// +// Solidity: function migrateQueuedWithdrawal((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) returns(bool, bytes32) +func (_StrategyManager *StrategyManagerTransactorSession) MigrateQueuedWithdrawal(queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _StrategyManager.Contract.MigrateQueuedWithdrawal(&_StrategyManager.TransactOpts, queuedWithdrawal) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_StrategyManager *StrategyManagerTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_StrategyManager *StrategyManagerSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyManager.Contract.Pause(&_StrategyManager.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_StrategyManager *StrategyManagerTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyManager.Contract.Pause(&_StrategyManager.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_StrategyManager *StrategyManagerTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_StrategyManager *StrategyManagerSession) PauseAll() (*types.Transaction, error) { + return _StrategyManager.Contract.PauseAll(&_StrategyManager.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_StrategyManager *StrategyManagerTransactorSession) PauseAll() (*types.Transaction, error) { + return _StrategyManager.Contract.PauseAll(&_StrategyManager.TransactOpts) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0x8c80d4e5. +// +// Solidity: function removeShares(address staker, address strategy, uint256 shares) returns() +func (_StrategyManager *StrategyManagerTransactor) RemoveShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "removeShares", staker, strategy, shares) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0x8c80d4e5. +// +// Solidity: function removeShares(address staker, address strategy, uint256 shares) returns() +func (_StrategyManager *StrategyManagerSession) RemoveShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _StrategyManager.Contract.RemoveShares(&_StrategyManager.TransactOpts, staker, strategy, shares) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0x8c80d4e5. +// +// Solidity: function removeShares(address staker, address strategy, uint256 shares) returns() +func (_StrategyManager *StrategyManagerTransactorSession) RemoveShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _StrategyManager.Contract.RemoveShares(&_StrategyManager.TransactOpts, staker, strategy, shares) +} + +// RemoveStrategiesFromDepositWhitelist is a paid mutator transaction binding the contract method 0xb5d8b5b8. +// +// Solidity: function removeStrategiesFromDepositWhitelist(address[] strategiesToRemoveFromWhitelist) returns() +func (_StrategyManager *StrategyManagerTransactor) RemoveStrategiesFromDepositWhitelist(opts *bind.TransactOpts, strategiesToRemoveFromWhitelist []common.Address) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "removeStrategiesFromDepositWhitelist", strategiesToRemoveFromWhitelist) +} + +// RemoveStrategiesFromDepositWhitelist is a paid mutator transaction binding the contract method 0xb5d8b5b8. +// +// Solidity: function removeStrategiesFromDepositWhitelist(address[] strategiesToRemoveFromWhitelist) returns() +func (_StrategyManager *StrategyManagerSession) RemoveStrategiesFromDepositWhitelist(strategiesToRemoveFromWhitelist []common.Address) (*types.Transaction, error) { + return _StrategyManager.Contract.RemoveStrategiesFromDepositWhitelist(&_StrategyManager.TransactOpts, strategiesToRemoveFromWhitelist) +} + +// RemoveStrategiesFromDepositWhitelist is a paid mutator transaction binding the contract method 0xb5d8b5b8. +// +// Solidity: function removeStrategiesFromDepositWhitelist(address[] strategiesToRemoveFromWhitelist) returns() +func (_StrategyManager *StrategyManagerTransactorSession) RemoveStrategiesFromDepositWhitelist(strategiesToRemoveFromWhitelist []common.Address) (*types.Transaction, error) { + return _StrategyManager.Contract.RemoveStrategiesFromDepositWhitelist(&_StrategyManager.TransactOpts, strategiesToRemoveFromWhitelist) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_StrategyManager *StrategyManagerTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_StrategyManager *StrategyManagerSession) RenounceOwnership() (*types.Transaction, error) { + return _StrategyManager.Contract.RenounceOwnership(&_StrategyManager.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_StrategyManager *StrategyManagerTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _StrategyManager.Contract.RenounceOwnership(&_StrategyManager.TransactOpts) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_StrategyManager *StrategyManagerTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_StrategyManager *StrategyManagerSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyManager.Contract.SetPauserRegistry(&_StrategyManager.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_StrategyManager *StrategyManagerTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _StrategyManager.Contract.SetPauserRegistry(&_StrategyManager.TransactOpts, newPauserRegistry) +} + +// SetStrategyWhitelister is a paid mutator transaction binding the contract method 0xc6656702. +// +// Solidity: function setStrategyWhitelister(address newStrategyWhitelister) returns() +func (_StrategyManager *StrategyManagerTransactor) SetStrategyWhitelister(opts *bind.TransactOpts, newStrategyWhitelister common.Address) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "setStrategyWhitelister", newStrategyWhitelister) +} + +// SetStrategyWhitelister is a paid mutator transaction binding the contract method 0xc6656702. +// +// Solidity: function setStrategyWhitelister(address newStrategyWhitelister) returns() +func (_StrategyManager *StrategyManagerSession) SetStrategyWhitelister(newStrategyWhitelister common.Address) (*types.Transaction, error) { + return _StrategyManager.Contract.SetStrategyWhitelister(&_StrategyManager.TransactOpts, newStrategyWhitelister) +} + +// SetStrategyWhitelister is a paid mutator transaction binding the contract method 0xc6656702. +// +// Solidity: function setStrategyWhitelister(address newStrategyWhitelister) returns() +func (_StrategyManager *StrategyManagerTransactorSession) SetStrategyWhitelister(newStrategyWhitelister common.Address) (*types.Transaction, error) { + return _StrategyManager.Contract.SetStrategyWhitelister(&_StrategyManager.TransactOpts, newStrategyWhitelister) +} + +// SetThirdPartyTransfersForbidden is a paid mutator transaction binding the contract method 0x4e5a4263. +// +// Solidity: function setThirdPartyTransfersForbidden(address strategy, bool value) returns() +func (_StrategyManager *StrategyManagerTransactor) SetThirdPartyTransfersForbidden(opts *bind.TransactOpts, strategy common.Address, value bool) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "setThirdPartyTransfersForbidden", strategy, value) +} + +// SetThirdPartyTransfersForbidden is a paid mutator transaction binding the contract method 0x4e5a4263. +// +// Solidity: function setThirdPartyTransfersForbidden(address strategy, bool value) returns() +func (_StrategyManager *StrategyManagerSession) SetThirdPartyTransfersForbidden(strategy common.Address, value bool) (*types.Transaction, error) { + return _StrategyManager.Contract.SetThirdPartyTransfersForbidden(&_StrategyManager.TransactOpts, strategy, value) +} + +// SetThirdPartyTransfersForbidden is a paid mutator transaction binding the contract method 0x4e5a4263. +// +// Solidity: function setThirdPartyTransfersForbidden(address strategy, bool value) returns() +func (_StrategyManager *StrategyManagerTransactorSession) SetThirdPartyTransfersForbidden(strategy common.Address, value bool) (*types.Transaction, error) { + return _StrategyManager.Contract.SetThirdPartyTransfersForbidden(&_StrategyManager.TransactOpts, strategy, value) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_StrategyManager *StrategyManagerTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_StrategyManager *StrategyManagerSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _StrategyManager.Contract.TransferOwnership(&_StrategyManager.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_StrategyManager *StrategyManagerTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _StrategyManager.Contract.TransferOwnership(&_StrategyManager.TransactOpts, newOwner) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_StrategyManager *StrategyManagerTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_StrategyManager *StrategyManagerSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyManager.Contract.Unpause(&_StrategyManager.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_StrategyManager *StrategyManagerTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _StrategyManager.Contract.Unpause(&_StrategyManager.TransactOpts, newPausedStatus) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0xc608c7f3. +// +// Solidity: function withdrawSharesAsTokens(address recipient, address strategy, uint256 shares, address token) returns() +func (_StrategyManager *StrategyManagerTransactor) WithdrawSharesAsTokens(opts *bind.TransactOpts, recipient common.Address, strategy common.Address, shares *big.Int, token common.Address) (*types.Transaction, error) { + return _StrategyManager.contract.Transact(opts, "withdrawSharesAsTokens", recipient, strategy, shares, token) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0xc608c7f3. +// +// Solidity: function withdrawSharesAsTokens(address recipient, address strategy, uint256 shares, address token) returns() +func (_StrategyManager *StrategyManagerSession) WithdrawSharesAsTokens(recipient common.Address, strategy common.Address, shares *big.Int, token common.Address) (*types.Transaction, error) { + return _StrategyManager.Contract.WithdrawSharesAsTokens(&_StrategyManager.TransactOpts, recipient, strategy, shares, token) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0xc608c7f3. +// +// Solidity: function withdrawSharesAsTokens(address recipient, address strategy, uint256 shares, address token) returns() +func (_StrategyManager *StrategyManagerTransactorSession) WithdrawSharesAsTokens(recipient common.Address, strategy common.Address, shares *big.Int, token common.Address) (*types.Transaction, error) { + return _StrategyManager.Contract.WithdrawSharesAsTokens(&_StrategyManager.TransactOpts, recipient, strategy, shares, token) +} + +// StrategyManagerDepositIterator is returned from FilterDeposit and is used to iterate over the raw logs and unpacked data for Deposit events raised by the StrategyManager contract. +type StrategyManagerDepositIterator struct { + Event *StrategyManagerDeposit // 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 *StrategyManagerDepositIterator) 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(StrategyManagerDeposit) + 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(StrategyManagerDeposit) + 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 *StrategyManagerDepositIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerDepositIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerDeposit represents a Deposit event raised by the StrategyManager contract. +type StrategyManagerDeposit struct { + Staker common.Address + Token common.Address + Strategy common.Address + Shares *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeposit is a free log retrieval operation binding the contract event 0x7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a96. +// +// Solidity: event Deposit(address staker, address token, address strategy, uint256 shares) +func (_StrategyManager *StrategyManagerFilterer) FilterDeposit(opts *bind.FilterOpts) (*StrategyManagerDepositIterator, error) { + + logs, sub, err := _StrategyManager.contract.FilterLogs(opts, "Deposit") + if err != nil { + return nil, err + } + return &StrategyManagerDepositIterator{contract: _StrategyManager.contract, event: "Deposit", logs: logs, sub: sub}, nil +} + +// WatchDeposit is a free log subscription operation binding the contract event 0x7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a96. +// +// Solidity: event Deposit(address staker, address token, address strategy, uint256 shares) +func (_StrategyManager *StrategyManagerFilterer) WatchDeposit(opts *bind.WatchOpts, sink chan<- *StrategyManagerDeposit) (event.Subscription, error) { + + logs, sub, err := _StrategyManager.contract.WatchLogs(opts, "Deposit") + 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(StrategyManagerDeposit) + if err := _StrategyManager.contract.UnpackLog(event, "Deposit", 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 +} + +// ParseDeposit is a log parse operation binding the contract event 0x7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a96. +// +// Solidity: event Deposit(address staker, address token, address strategy, uint256 shares) +func (_StrategyManager *StrategyManagerFilterer) ParseDeposit(log types.Log) (*StrategyManagerDeposit, error) { + event := new(StrategyManagerDeposit) + if err := _StrategyManager.contract.UnpackLog(event, "Deposit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the StrategyManager contract. +type StrategyManagerInitializedIterator struct { + Event *StrategyManagerInitialized // 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 *StrategyManagerInitializedIterator) 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(StrategyManagerInitialized) + 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(StrategyManagerInitialized) + 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 *StrategyManagerInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerInitialized represents a Initialized event raised by the StrategyManager contract. +type StrategyManagerInitialized 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 (_StrategyManager *StrategyManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*StrategyManagerInitializedIterator, error) { + + logs, sub, err := _StrategyManager.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &StrategyManagerInitializedIterator{contract: _StrategyManager.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 (_StrategyManager *StrategyManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *StrategyManagerInitialized) (event.Subscription, error) { + + logs, sub, err := _StrategyManager.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(StrategyManagerInitialized) + if err := _StrategyManager.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 (_StrategyManager *StrategyManagerFilterer) ParseInitialized(log types.Log) (*StrategyManagerInitialized, error) { + event := new(StrategyManagerInitialized) + if err := _StrategyManager.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyManagerOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the StrategyManager contract. +type StrategyManagerOwnershipTransferredIterator struct { + Event *StrategyManagerOwnershipTransferred // 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 *StrategyManagerOwnershipTransferredIterator) 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(StrategyManagerOwnershipTransferred) + 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(StrategyManagerOwnershipTransferred) + 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 *StrategyManagerOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerOwnershipTransferred represents a OwnershipTransferred event raised by the StrategyManager contract. +type StrategyManagerOwnershipTransferred 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 (_StrategyManager *StrategyManagerFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*StrategyManagerOwnershipTransferredIterator, 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 := _StrategyManager.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &StrategyManagerOwnershipTransferredIterator{contract: _StrategyManager.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 (_StrategyManager *StrategyManagerFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *StrategyManagerOwnershipTransferred, 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 := _StrategyManager.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(StrategyManagerOwnershipTransferred) + if err := _StrategyManager.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 (_StrategyManager *StrategyManagerFilterer) ParseOwnershipTransferred(log types.Log) (*StrategyManagerOwnershipTransferred, error) { + event := new(StrategyManagerOwnershipTransferred) + if err := _StrategyManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyManagerPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the StrategyManager contract. +type StrategyManagerPausedIterator struct { + Event *StrategyManagerPaused // 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 *StrategyManagerPausedIterator) 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(StrategyManagerPaused) + 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(StrategyManagerPaused) + 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 *StrategyManagerPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerPaused represents a Paused event raised by the StrategyManager contract. +type StrategyManagerPaused 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 (_StrategyManager *StrategyManagerFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*StrategyManagerPausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _StrategyManager.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &StrategyManagerPausedIterator{contract: _StrategyManager.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 (_StrategyManager *StrategyManagerFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *StrategyManagerPaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _StrategyManager.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(StrategyManagerPaused) + if err := _StrategyManager.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 (_StrategyManager *StrategyManagerFilterer) ParsePaused(log types.Log) (*StrategyManagerPaused, error) { + event := new(StrategyManagerPaused) + if err := _StrategyManager.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyManagerPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the StrategyManager contract. +type StrategyManagerPauserRegistrySetIterator struct { + Event *StrategyManagerPauserRegistrySet // 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 *StrategyManagerPauserRegistrySetIterator) 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(StrategyManagerPauserRegistrySet) + 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(StrategyManagerPauserRegistrySet) + 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 *StrategyManagerPauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerPauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerPauserRegistrySet represents a PauserRegistrySet event raised by the StrategyManager contract. +type StrategyManagerPauserRegistrySet 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 (_StrategyManager *StrategyManagerFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*StrategyManagerPauserRegistrySetIterator, error) { + + logs, sub, err := _StrategyManager.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &StrategyManagerPauserRegistrySetIterator{contract: _StrategyManager.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 (_StrategyManager *StrategyManagerFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *StrategyManagerPauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _StrategyManager.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(StrategyManagerPauserRegistrySet) + if err := _StrategyManager.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 (_StrategyManager *StrategyManagerFilterer) ParsePauserRegistrySet(log types.Log) (*StrategyManagerPauserRegistrySet, error) { + event := new(StrategyManagerPauserRegistrySet) + if err := _StrategyManager.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyManagerStrategyAddedToDepositWhitelistIterator is returned from FilterStrategyAddedToDepositWhitelist and is used to iterate over the raw logs and unpacked data for StrategyAddedToDepositWhitelist events raised by the StrategyManager contract. +type StrategyManagerStrategyAddedToDepositWhitelistIterator struct { + Event *StrategyManagerStrategyAddedToDepositWhitelist // 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 *StrategyManagerStrategyAddedToDepositWhitelistIterator) 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(StrategyManagerStrategyAddedToDepositWhitelist) + 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(StrategyManagerStrategyAddedToDepositWhitelist) + 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 *StrategyManagerStrategyAddedToDepositWhitelistIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerStrategyAddedToDepositWhitelistIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerStrategyAddedToDepositWhitelist represents a StrategyAddedToDepositWhitelist event raised by the StrategyManager contract. +type StrategyManagerStrategyAddedToDepositWhitelist struct { + Strategy common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyAddedToDepositWhitelist is a free log retrieval operation binding the contract event 0x0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe. +// +// Solidity: event StrategyAddedToDepositWhitelist(address strategy) +func (_StrategyManager *StrategyManagerFilterer) FilterStrategyAddedToDepositWhitelist(opts *bind.FilterOpts) (*StrategyManagerStrategyAddedToDepositWhitelistIterator, error) { + + logs, sub, err := _StrategyManager.contract.FilterLogs(opts, "StrategyAddedToDepositWhitelist") + if err != nil { + return nil, err + } + return &StrategyManagerStrategyAddedToDepositWhitelistIterator{contract: _StrategyManager.contract, event: "StrategyAddedToDepositWhitelist", logs: logs, sub: sub}, nil +} + +// WatchStrategyAddedToDepositWhitelist is a free log subscription operation binding the contract event 0x0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe. +// +// Solidity: event StrategyAddedToDepositWhitelist(address strategy) +func (_StrategyManager *StrategyManagerFilterer) WatchStrategyAddedToDepositWhitelist(opts *bind.WatchOpts, sink chan<- *StrategyManagerStrategyAddedToDepositWhitelist) (event.Subscription, error) { + + logs, sub, err := _StrategyManager.contract.WatchLogs(opts, "StrategyAddedToDepositWhitelist") + 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(StrategyManagerStrategyAddedToDepositWhitelist) + if err := _StrategyManager.contract.UnpackLog(event, "StrategyAddedToDepositWhitelist", 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 +} + +// ParseStrategyAddedToDepositWhitelist is a log parse operation binding the contract event 0x0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe. +// +// Solidity: event StrategyAddedToDepositWhitelist(address strategy) +func (_StrategyManager *StrategyManagerFilterer) ParseStrategyAddedToDepositWhitelist(log types.Log) (*StrategyManagerStrategyAddedToDepositWhitelist, error) { + event := new(StrategyManagerStrategyAddedToDepositWhitelist) + if err := _StrategyManager.contract.UnpackLog(event, "StrategyAddedToDepositWhitelist", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyManagerStrategyRemovedFromDepositWhitelistIterator is returned from FilterStrategyRemovedFromDepositWhitelist and is used to iterate over the raw logs and unpacked data for StrategyRemovedFromDepositWhitelist events raised by the StrategyManager contract. +type StrategyManagerStrategyRemovedFromDepositWhitelistIterator struct { + Event *StrategyManagerStrategyRemovedFromDepositWhitelist // 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 *StrategyManagerStrategyRemovedFromDepositWhitelistIterator) 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(StrategyManagerStrategyRemovedFromDepositWhitelist) + 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(StrategyManagerStrategyRemovedFromDepositWhitelist) + 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 *StrategyManagerStrategyRemovedFromDepositWhitelistIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerStrategyRemovedFromDepositWhitelistIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerStrategyRemovedFromDepositWhitelist represents a StrategyRemovedFromDepositWhitelist event raised by the StrategyManager contract. +type StrategyManagerStrategyRemovedFromDepositWhitelist struct { + Strategy common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyRemovedFromDepositWhitelist is a free log retrieval operation binding the contract event 0x4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030. +// +// Solidity: event StrategyRemovedFromDepositWhitelist(address strategy) +func (_StrategyManager *StrategyManagerFilterer) FilterStrategyRemovedFromDepositWhitelist(opts *bind.FilterOpts) (*StrategyManagerStrategyRemovedFromDepositWhitelistIterator, error) { + + logs, sub, err := _StrategyManager.contract.FilterLogs(opts, "StrategyRemovedFromDepositWhitelist") + if err != nil { + return nil, err + } + return &StrategyManagerStrategyRemovedFromDepositWhitelistIterator{contract: _StrategyManager.contract, event: "StrategyRemovedFromDepositWhitelist", logs: logs, sub: sub}, nil +} + +// WatchStrategyRemovedFromDepositWhitelist is a free log subscription operation binding the contract event 0x4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030. +// +// Solidity: event StrategyRemovedFromDepositWhitelist(address strategy) +func (_StrategyManager *StrategyManagerFilterer) WatchStrategyRemovedFromDepositWhitelist(opts *bind.WatchOpts, sink chan<- *StrategyManagerStrategyRemovedFromDepositWhitelist) (event.Subscription, error) { + + logs, sub, err := _StrategyManager.contract.WatchLogs(opts, "StrategyRemovedFromDepositWhitelist") + 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(StrategyManagerStrategyRemovedFromDepositWhitelist) + if err := _StrategyManager.contract.UnpackLog(event, "StrategyRemovedFromDepositWhitelist", 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 +} + +// ParseStrategyRemovedFromDepositWhitelist is a log parse operation binding the contract event 0x4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030. +// +// Solidity: event StrategyRemovedFromDepositWhitelist(address strategy) +func (_StrategyManager *StrategyManagerFilterer) ParseStrategyRemovedFromDepositWhitelist(log types.Log) (*StrategyManagerStrategyRemovedFromDepositWhitelist, error) { + event := new(StrategyManagerStrategyRemovedFromDepositWhitelist) + if err := _StrategyManager.contract.UnpackLog(event, "StrategyRemovedFromDepositWhitelist", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyManagerStrategyWhitelisterChangedIterator is returned from FilterStrategyWhitelisterChanged and is used to iterate over the raw logs and unpacked data for StrategyWhitelisterChanged events raised by the StrategyManager contract. +type StrategyManagerStrategyWhitelisterChangedIterator struct { + Event *StrategyManagerStrategyWhitelisterChanged // 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 *StrategyManagerStrategyWhitelisterChangedIterator) 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(StrategyManagerStrategyWhitelisterChanged) + 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(StrategyManagerStrategyWhitelisterChanged) + 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 *StrategyManagerStrategyWhitelisterChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerStrategyWhitelisterChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerStrategyWhitelisterChanged represents a StrategyWhitelisterChanged event raised by the StrategyManager contract. +type StrategyManagerStrategyWhitelisterChanged struct { + PreviousAddress common.Address + NewAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyWhitelisterChanged is a free log retrieval operation binding the contract event 0x4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29. +// +// Solidity: event StrategyWhitelisterChanged(address previousAddress, address newAddress) +func (_StrategyManager *StrategyManagerFilterer) FilterStrategyWhitelisterChanged(opts *bind.FilterOpts) (*StrategyManagerStrategyWhitelisterChangedIterator, error) { + + logs, sub, err := _StrategyManager.contract.FilterLogs(opts, "StrategyWhitelisterChanged") + if err != nil { + return nil, err + } + return &StrategyManagerStrategyWhitelisterChangedIterator{contract: _StrategyManager.contract, event: "StrategyWhitelisterChanged", logs: logs, sub: sub}, nil +} + +// WatchStrategyWhitelisterChanged is a free log subscription operation binding the contract event 0x4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29. +// +// Solidity: event StrategyWhitelisterChanged(address previousAddress, address newAddress) +func (_StrategyManager *StrategyManagerFilterer) WatchStrategyWhitelisterChanged(opts *bind.WatchOpts, sink chan<- *StrategyManagerStrategyWhitelisterChanged) (event.Subscription, error) { + + logs, sub, err := _StrategyManager.contract.WatchLogs(opts, "StrategyWhitelisterChanged") + 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(StrategyManagerStrategyWhitelisterChanged) + if err := _StrategyManager.contract.UnpackLog(event, "StrategyWhitelisterChanged", 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 +} + +// ParseStrategyWhitelisterChanged is a log parse operation binding the contract event 0x4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29. +// +// Solidity: event StrategyWhitelisterChanged(address previousAddress, address newAddress) +func (_StrategyManager *StrategyManagerFilterer) ParseStrategyWhitelisterChanged(log types.Log) (*StrategyManagerStrategyWhitelisterChanged, error) { + event := new(StrategyManagerStrategyWhitelisterChanged) + if err := _StrategyManager.contract.UnpackLog(event, "StrategyWhitelisterChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyManagerUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the StrategyManager contract. +type StrategyManagerUnpausedIterator struct { + Event *StrategyManagerUnpaused // 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 *StrategyManagerUnpausedIterator) 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(StrategyManagerUnpaused) + 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(StrategyManagerUnpaused) + 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 *StrategyManagerUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerUnpaused represents a Unpaused event raised by the StrategyManager contract. +type StrategyManagerUnpaused 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 (_StrategyManager *StrategyManagerFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*StrategyManagerUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _StrategyManager.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &StrategyManagerUnpausedIterator{contract: _StrategyManager.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 (_StrategyManager *StrategyManagerFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *StrategyManagerUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _StrategyManager.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(StrategyManagerUnpaused) + if err := _StrategyManager.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 (_StrategyManager *StrategyManagerFilterer) ParseUnpaused(log types.Log) (*StrategyManagerUnpaused, error) { + event := new(StrategyManagerUnpaused) + if err := _StrategyManager.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyManagerUpdatedThirdPartyTransfersForbiddenIterator is returned from FilterUpdatedThirdPartyTransfersForbidden and is used to iterate over the raw logs and unpacked data for UpdatedThirdPartyTransfersForbidden events raised by the StrategyManager contract. +type StrategyManagerUpdatedThirdPartyTransfersForbiddenIterator struct { + Event *StrategyManagerUpdatedThirdPartyTransfersForbidden // 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 *StrategyManagerUpdatedThirdPartyTransfersForbiddenIterator) 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(StrategyManagerUpdatedThirdPartyTransfersForbidden) + 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(StrategyManagerUpdatedThirdPartyTransfersForbidden) + 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 *StrategyManagerUpdatedThirdPartyTransfersForbiddenIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerUpdatedThirdPartyTransfersForbiddenIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerUpdatedThirdPartyTransfersForbidden represents a UpdatedThirdPartyTransfersForbidden event raised by the StrategyManager contract. +type StrategyManagerUpdatedThirdPartyTransfersForbidden struct { + Strategy common.Address + Value bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedThirdPartyTransfersForbidden is a free log retrieval operation binding the contract event 0x77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786. +// +// Solidity: event UpdatedThirdPartyTransfersForbidden(address strategy, bool value) +func (_StrategyManager *StrategyManagerFilterer) FilterUpdatedThirdPartyTransfersForbidden(opts *bind.FilterOpts) (*StrategyManagerUpdatedThirdPartyTransfersForbiddenIterator, error) { + + logs, sub, err := _StrategyManager.contract.FilterLogs(opts, "UpdatedThirdPartyTransfersForbidden") + if err != nil { + return nil, err + } + return &StrategyManagerUpdatedThirdPartyTransfersForbiddenIterator{contract: _StrategyManager.contract, event: "UpdatedThirdPartyTransfersForbidden", logs: logs, sub: sub}, nil +} + +// WatchUpdatedThirdPartyTransfersForbidden is a free log subscription operation binding the contract event 0x77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786. +// +// Solidity: event UpdatedThirdPartyTransfersForbidden(address strategy, bool value) +func (_StrategyManager *StrategyManagerFilterer) WatchUpdatedThirdPartyTransfersForbidden(opts *bind.WatchOpts, sink chan<- *StrategyManagerUpdatedThirdPartyTransfersForbidden) (event.Subscription, error) { + + logs, sub, err := _StrategyManager.contract.WatchLogs(opts, "UpdatedThirdPartyTransfersForbidden") + 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(StrategyManagerUpdatedThirdPartyTransfersForbidden) + if err := _StrategyManager.contract.UnpackLog(event, "UpdatedThirdPartyTransfersForbidden", 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 +} + +// ParseUpdatedThirdPartyTransfersForbidden is a log parse operation binding the contract event 0x77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786. +// +// Solidity: event UpdatedThirdPartyTransfersForbidden(address strategy, bool value) +func (_StrategyManager *StrategyManagerFilterer) ParseUpdatedThirdPartyTransfersForbidden(log types.Log) (*StrategyManagerUpdatedThirdPartyTransfersForbidden, error) { + event := new(StrategyManagerUpdatedThirdPartyTransfersForbidden) + if err := _StrategyManager.contract.UnpackLog(event, "UpdatedThirdPartyTransfersForbidden", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/StrategyManager/tmp.abi b/pkg/bindings/StrategyManager/tmp.abi new file mode 100644 index 000000000..6d18e6fbe --- /dev/null +++ b/pkg/bindings/StrategyManager/tmp.abi @@ -0,0 +1,962 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_delegation", + "type": "address", + "internalType": "contract IDelegationManager" + }, + { + "name": "_eigenPodManager", + "type": "address", + "internalType": "contract IEigenPodManager" + }, + { + "name": "_slasher", + "type": "address", + "internalType": "contract ISlasher" + } + ], + "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": "contract IERC20" + }, + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "addStrategiesToDepositWhitelist", + "inputs": [ + { + "name": "strategiesToWhitelist", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "thirdPartyTransfersForbiddenValues", + "type": "bool[]", + "internalType": "bool[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "calculateWithdrawalRoot", + "inputs": [ + { + "name": "queuedWithdrawal", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_QueuedWithdrawal", + "components": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "withdrawerAndNonce", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_WithdrawerAndNonce", + "components": [ + { + "name": "withdrawer", + "type": "address", + "internalType": "address" + }, + { + "name": "nonce", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "name": "withdrawalStartBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "delegatedAddress", + "type": "address", + "internalType": "address" + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "delegation", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IDelegationManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "depositIntoStrategy", + "inputs": [ + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "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": "contract IStrategy" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "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": "contract IEigenPodManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getDeposits", + "inputs": [ + { + "name": "staker", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "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": "contract IPauserRegistry" + }, + { + "name": "initialPausedStatus", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "migrateQueuedWithdrawal", + "inputs": [ + { + "name": "queuedWithdrawal", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_QueuedWithdrawal", + "components": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "withdrawerAndNonce", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_WithdrawerAndNonce", + "components": [ + { + "name": "withdrawer", + "type": "address", + "internalType": "address" + }, + { + "name": "nonce", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "name": "withdrawalStartBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "delegatedAddress", + "type": "address", + "internalType": "address" + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + }, + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "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": "contract IPauserRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "removeShares", + "inputs": [ + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "removeStrategiesFromDepositWhitelist", + "inputs": [ + { + "name": "strategiesToRemoveFromWhitelist", + "type": "address[]", + "internalType": "contract IStrategy[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPauserRegistry", + "inputs": [ + { + "name": "newPauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "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": "contract IStrategy" + }, + { + "name": "value", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "slasher", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ISlasher" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "stakerStrategyList", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IStrategy" + } + ], + "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": "contract IStrategy" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "strategyIsWhitelistedForDeposit", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IStrategy" + } + ], + "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": "contract IStrategy" + } + ], + "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": "contract IStrategy" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "withdrawalRootPending", + "inputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "Deposit", + "inputs": [ + { + "name": "staker", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "indexed": false, + "internalType": "contract IERC20" + }, + { + "name": "strategy", + "type": "address", + "indexed": false, + "internalType": "contract IStrategy" + }, + { + "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": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StrategyAddedToDepositWhitelist", + "inputs": [ + { + "name": "strategy", + "type": "address", + "indexed": false, + "internalType": "contract IStrategy" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StrategyRemovedFromDepositWhitelist", + "inputs": [ + { + "name": "strategy", + "type": "address", + "indexed": false, + "internalType": "contract IStrategy" + } + ], + "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": "contract IStrategy" + }, + { + "name": "value", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/StrategyManager/tmp.bin b/pkg/bindings/StrategyManager/tmp.bin new file mode 100644 index 000000000..45bc13fa8 --- /dev/null +++ b/pkg/bindings/StrategyManager/tmp.bin @@ -0,0 +1 @@ +0x6101006040523480156200001257600080fd5b506040516200382938038062003829833981016040819052620000359162000140565b6001600160a01b0380841660805280831660a052811660c0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e051613638620001f1600039600061161d0152600061048f015260006102a601526000818161059b01528181610c0501528181610f9f01528181610ff3015281816110f70152611bd301526136386000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806394f649dd11610130578063c6656702116100b8578063df5cf7231161007c578063df5cf72314610596578063e7a050aa146105bd578063f2fde38b146105d0578063f698da25146105e3578063fabc1cbc146105eb57600080fd5b8063c665670214610520578063cbc2bd6214610533578063cd293f6f14610546578063cf756fdf14610570578063df5b35471461058357600080fd5b8063b43b514b116100ff578063b43b514b146104b1578063b5d8b5b8146104c4578063c3c6b3a9146104d7578063c4623ea1146104fa578063c608c7f31461050d57600080fd5b806394f649dd14610433578063967fc0d2146104545780639b4da03d14610467578063b13442711461048a57600080fd5b80635c975abb116101b35780637ecebe00116101825780637ecebe00146103b3578063886f1195146103d35780638b8aac3c146103e65780638c80d4e51461040f5780638da5cb5b1461042257600080fd5b80635c975abb14610355578063663c1de41461035d578063715018a6146103805780637a7e0d921461038857600080fd5b80634665bcda116101fa5780634665bcda146102a157806348825e94146102e05780634e5a426314610307578063595c6a671461031a5780635ac86ab71461032257600080fd5b806310d67a2f1461022c578063136439dd1461024157806320606b701461025457806332e89ace1461028e575b600080fd5b61023f61023a366004612b4a565b6105fe565b005b61023f61024f366004612b67565b6106ba565b61027b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61027b61029c366004612c00565b6107f9565b6102c87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610285565b61027b7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61023f610315366004612ced565b610ae7565b61023f610b1f565b610345610330366004612d26565b609854600160ff9092169190911b9081161490565b6040519015158152602001610285565b60985461027b565b61034561036b366004612b4a565b60d16020526000908152604090205460ff1681565b61023f610be6565b61027b610396366004612d49565b60cd60209081526000928352604080842090915290825290205481565b61027b6103c1366004612b4a565b60ca6020526000908152604090205481565b6097546102c8906001600160a01b031681565b61027b6103f4366004612b4a565b6001600160a01b0316600090815260ce602052604090205490565b61023f61041d366004612d77565b610bfa565b6033546001600160a01b03166102c8565b610446610441366004612b4a565b610c53565b604051610285929190612e2c565b60cb546102c8906001600160a01b031681565b610345610475366004612b4a565b60d36020526000908152604090205460ff1681565b6102c87f000000000000000000000000000000000000000000000000000000000000000081565b61027b6104bf366004612fd5565b610dd3565b61023f6104d23660046130f0565b610e20565b6103456104e5366004612b67565b60cf6020526000908152604090205460ff1681565b61023f610508366004613132565b610f94565b61023f61051b366004613183565b610fe8565b61023f61052e366004612b4a565b6110a0565b6102c86105413660046131d6565b6110b1565b610559610554366004612fd5565b6110e9565b604080519215158352602083019190915201610285565b61023f61057e366004613132565b61117d565b61023f610591366004613202565b6112b1565b6102c87f000000000000000000000000000000000000000000000000000000000000000081565b61027b6105cb366004612d77565b6114da565b61023f6105de366004612b4a565b6115a3565b61027b611619565b61023f6105f9366004612b67565b611657565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610651573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610675919061326e565b6001600160a01b0316336001600160a01b0316146106ae5760405162461bcd60e51b81526004016106a59061328b565b60405180910390fd5b6106b7816117b3565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610702573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072691906132d5565b6107425760405162461bcd60e51b81526004016106a5906132f2565b609854818116146107bb5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016106a5565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6098546000908190600190811614156108505760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016106a5565b600260655414156108a35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a5565b60026065556001600160a01b038816600090815260d3602052604090205460ff161561094a5760405162461bcd60e51b815260206004820152604a60248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207468697264207472616e736665726064820152691cc8191a5cd8589b195960b21b608482015260a4016106a5565b428410156109cc5760405162461bcd60e51b815260206004820152604360248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207369676e617475726520657870696064820152621c995960ea1b608482015260a4016106a5565b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca9093529082206001850190559150610a84611619565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050610ac78882886118aa565b610ad3888c8c8c611a69565b60016065559b9a5050505050505050505050565b60cb546001600160a01b03163314610b115760405162461bcd60e51b81526004016106a59061333a565b610b1b8282611c38565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8b91906132d5565b610ba75760405162461bcd60e51b81526004016106a5906132f2565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610bee611ca6565b610bf86000611d00565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c425760405162461bcd60e51b81526004016106a5906133a4565b610c4d838383611d52565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610c8b57610c8b612b90565b604051908082528060200260200182016040528015610cb4578160200160208202803683370190505b50905060005b82811015610d45576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610cf957610cf9613402565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610d3257610d32613402565b6020908102919091010152600101610cba565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610dc157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610da3575b50505050509150935093505050915091565b80516020808301516040808501516060860151608087015160a08801519351600097610e03979096959101613418565b604051602081830303815290604052805190602001209050919050565b60cb546001600160a01b03163314610e4a5760405162461bcd60e51b81526004016106a59061333a565b8060005b81811015610c4d5760d16000858584818110610e6c57610e6c613402565b9050602002016020810190610e819190612b4a565b6001600160a01b0316815260208101919091526040016000205460ff1615610f8c57600060d16000868685818110610ebb57610ebb613402565b9050602002016020810190610ed09190612b4a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610f2b57610f2b613402565b9050602002016020810190610f409190612b4a565b6040516001600160a01b03909116815260200160405180910390a1610f8c848483818110610f7057610f70613402565b9050602002016020810190610f859190612b4a565b6000611c38565b600101610e4e565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdc5760405162461bcd60e51b81526004016106a5906133a4565b610c4d84848484611eae565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110305760405162461bcd60e51b81526004016106a5906133a4565b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b15801561108257600080fd5b505af1158015611096573d6000803e3d6000fd5b5050505050505050565b6110a8611ca6565b6106b78161213b565b60ce60205281600052604060002081815481106110cd57600080fd5b6000918252602090912001546001600160a01b03169150829050565b600080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111345760405162461bcd60e51b81526004016106a5906133a4565b600061113f84610dd3565b600081815260cf60205260408120549192509060ff16156111745750600081815260cf60205260409020805460ff1916905560015b92509050915091565b600054610100900460ff161580801561119d5750600054600160ff909116105b806111b75750303b1580156111b7575060005460ff166001145b61121a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a5565b6000805460ff19166001179055801561123d576000805461ff0019166101001790555b6112456121a4565b60c955611252838361223b565b61125b85611d00565b6112648461213b565b80156112aa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b031633146112db5760405162461bcd60e51b81526004016106a59061333a565b8281146113645760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794d616e616765722e61646453747261746567696573546f4460448201527f65706f73697457686974656c6973743a206172726179206c656e67746873206460648201526a0de40dcdee840dac2e8c6d60ab1b608482015260a4016106a5565b8260005b818110156114d25760d1600087878481811061138657611386613402565b905060200201602081019061139b9190612b4a565b6001600160a01b0316815260208101919091526040016000205460ff166114ca57600160d160008888858181106113d4576113d4613402565b90506020020160208101906113e99190612b4a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe86868381811061144457611444613402565b90506020020160208101906114599190612b4a565b6040516001600160a01b03909116815260200160405180910390a16114ca86868381811061148957611489613402565b905060200201602081019061149e9190612b4a565b8585848181106114b0576114b0613402565b90506020020160208101906114c59190613491565b611c38565b600101611368565b505050505050565b6098546000908190600190811614156115315760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016106a5565b600260655414156115845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106a5565b600260655561159533868686611a69565b600160655595945050505050565b6115ab611ca6565b6001600160a01b0381166116105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a5565b6106b781611d00565b60007f000000000000000000000000000000000000000000000000000000000000000046141561164a575060c95490565b6116526121a4565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ce919061326e565b6001600160a01b0316336001600160a01b0316146116fe5760405162461bcd60e51b81526004016106a59061328b565b60985419811960985419161461177c5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016106a5565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107ee565b6001600160a01b0381166118415760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016106a5565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b156119c957604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906118ea9086908690600401613506565b602060405180830381865afa158015611907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192b919061351f565b6001600160e01b031916146119c45760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a4016106a5565b505050565b826001600160a01b03166119dd8383612321565b6001600160a01b0316146119c45760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a4016106a5565b6001600160a01b038316600090815260d16020526040812054849060ff16611b0f5760405162461bcd60e51b815260206004820152604d60248201527f53747261746567794d616e616765722e6f6e6c7953747261746567696573576860448201527f6974656c6973746564466f724465706f7369743a207374726174656779206e6f60648201526c1d081dda1a5d195b1a5cdd1959609a1b608482015260a4016106a5565b611b246001600160a01b038516338786612345565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b979190613549565b9150611ba586858785611eae565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b158015611c1757600080fd5b505af1158015611c2b573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610bf85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081611dc75760405162461bcd60e51b815260206004820152603e60248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a207360448201527f68617265416d6f756e742073686f756c64206e6f74206265207a65726f21000060648201526084016106a5565b6001600160a01b03808516600090815260cd602090815260408083209387168352929052205480831115611e595760405162461bcd60e51b815260206004820152603360248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a20736044820152720d0c2e4ca82dadeeadce840e8dede40d0d2ced606b1b60648201526084016106a5565b6001600160a01b03808616600090815260cd602090815260408083209388168352929052208382039081905590831415611ea157611e97858561239f565b6001915050611ea7565b60009150505b9392505050565b6001600160a01b038416611f2a5760405162461bcd60e51b815260206004820152603960248201527f53747261746567794d616e616765722e5f6164645368617265733a207374616b60448201527f65722063616e6e6f74206265207a65726f20616464726573730000000000000060648201526084016106a5565b80611f965760405162461bcd60e51b815260206004820152603660248201527f53747261746567794d616e616765722e5f6164645368617265733a207368617260448201527565732073686f756c64206e6f74206265207a65726f2160501b60648201526084016106a5565b6001600160a01b03808516600090815260cd60209081526040808320938616835292905220546120a7576001600160a01b038416600090815260ce6020908152604090912054106120685760405162461bcd60e51b815260206004820152605060248201527f53747261746567794d616e616765722e5f6164645368617265733a206465706f60448201527f73697420776f756c6420657863656564204d41585f5354414b45525f5354524160648201526f0a88a8eb2be9892a6a8be988a9c8ea8960831b608482015260a4016106a5565b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd60209081526040808320938616835292905290812080548392906120de908490613578565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b031615801561225c57506001600160a01b03821615155b6122de5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016106a5565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610b1b826117b3565b60008060006123308585612591565b9150915061233d81612601565b509392505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610c4d9085906127bc565b6001600160a01b038216600090815260ce6020526040812054905b818110156124ba576001600160a01b03848116600090815260ce60205260409020805491851691839081106123f1576123f1613402565b6000918252602090912001546001600160a01b031614156124b2576001600160a01b038416600090815260ce60205260409020805461243290600190613590565b8154811061244257612442613402565b60009182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061247f5761247f613402565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506124ba565b6001016123ba565b818114156125425760405162461bcd60e51b815260206004820152604960248201527f53747261746567794d616e616765722e5f72656d6f766553747261746567794660448201527f726f6d5374616b657253747261746567794c6973743a207374726174656779206064820152681b9bdd08199bdd5b9960ba1b608482015260a4016106a5565b6001600160a01b038416600090815260ce60205260409020805480612569576125696135a7565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604114156125c85760208301516040840151606085015160001a6125bc8782858561288e565b945094505050506125fa565b8251604014156125f257602083015160408401516125e786838361297b565b9350935050506125fa565b506000905060025b9250929050565b6000816004811115612615576126156135bd565b141561261e5750565b6001816004811115612632576126326135bd565b14156126805760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106a5565b6002816004811115612694576126946135bd565b14156126e25760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106a5565b60038160048111156126f6576126f66135bd565b141561274f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106a5565b6004816004811115612763576127636135bd565b14156106b75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106a5565b6000612811826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129b49092919063ffffffff16565b8051909150156119c4578080602001905181019061282f91906132d5565b6119c45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a5565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128c55750600090506003612972565b8460ff16601b141580156128dd57508460ff16601c14155b156128ee5750600090506004612972565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612942573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661296b57600060019250925050612972565b9150600090505b94509492505050565b6000806001600160ff1b0383168161299860ff86901c601b613578565b90506129a68782888561288e565b935093505050935093915050565b60606129c384846000856129cb565b949350505050565b606082471015612a2c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a5565b6001600160a01b0385163b612a835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a5565b600080866001600160a01b03168587604051612a9f91906135d3565b60006040518083038185875af1925050503d8060008114612adc576040519150601f19603f3d011682016040523d82523d6000602084013e612ae1565b606091505b5091509150612af1828286612afc565b979650505050505050565b60608315612b0b575081611ea7565b825115612b1b5782518084602001fd5b8160405162461bcd60e51b81526004016106a591906135ef565b6001600160a01b03811681146106b757600080fd5b600060208284031215612b5c57600080fd5b8135611ea781612b35565b600060208284031215612b7957600080fd5b5035919050565b8035612b8b81612b35565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612bc957612bc9612b90565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612bf857612bf8612b90565b604052919050565b60008060008060008060c08789031215612c1957600080fd5b8635612c2481612b35565b9550602087810135612c3581612b35565b9550604088013594506060880135612c4c81612b35565b93506080880135925060a088013567ffffffffffffffff80821115612c7057600080fd5b818a0191508a601f830112612c8457600080fd5b813581811115612c9657612c96612b90565b612ca8601f8201601f19168501612bcf565b91508082528b84828501011115612cbe57600080fd5b80848401858401376000848284010152508093505050509295509295509295565b80151581146106b757600080fd5b60008060408385031215612d0057600080fd5b8235612d0b81612b35565b91506020830135612d1b81612cdf565b809150509250929050565b600060208284031215612d3857600080fd5b813560ff81168114611ea757600080fd5b60008060408385031215612d5c57600080fd5b8235612d6781612b35565b91506020830135612d1b81612b35565b600080600060608486031215612d8c57600080fd5b8335612d9781612b35565b92506020840135612da781612b35565b929592945050506040919091013590565b600081518084526020808501945080840160005b83811015612df15781516001600160a01b031687529582019590820190600101612dcc565b509495945050505050565b600081518084526020808501945080840160005b83811015612df157815187529582019590820190600101612e10565b604081526000612e3f6040830185612db8565b8281036020840152612e518185612dfc565b95945050505050565b600067ffffffffffffffff821115612e7457612e74612b90565b5060051b60200190565b600082601f830112612e8f57600080fd5b81356020612ea4612e9f83612e5a565b612bcf565b82815260059290921b84018101918181019086841115612ec357600080fd5b8286015b84811015612ee7578035612eda81612b35565b8352918301918301612ec7565b509695505050505050565b600082601f830112612f0357600080fd5b81356020612f13612e9f83612e5a565b82815260059290921b84018101918181019086841115612f3257600080fd5b8286015b84811015612ee75780358352918301918301612f36565b600060408284031215612f5f57600080fd5b6040516040810181811067ffffffffffffffff82111715612f8257612f82612b90565b6040529050808235612f9381612b35565b815260208301356bffffffffffffffffffffffff81168114612fb457600080fd5b6020919091015292915050565b803563ffffffff81168114612b8b57600080fd5b600060208284031215612fe757600080fd5b813567ffffffffffffffff80821115612fff57600080fd5b9083019060e0828603121561301357600080fd5b61301b612ba6565b82358281111561302a57600080fd5b61303687828601612e7e565b82525060208301358281111561304b57600080fd5b61305787828601612ef2565b60208301525061306960408401612b80565b604082015261307b8660608501612f4d565b606082015261308c60a08401612fc1565b608082015261309d60c08401612b80565b60a082015295945050505050565b60008083601f8401126130bd57600080fd5b50813567ffffffffffffffff8111156130d557600080fd5b6020830191508360208260051b85010111156125fa57600080fd5b6000806020838503121561310357600080fd5b823567ffffffffffffffff81111561311a57600080fd5b613126858286016130ab565b90969095509350505050565b6000806000806080858703121561314857600080fd5b843561315381612b35565b9350602085013561316381612b35565b9250604085013561317381612b35565b9396929550929360600135925050565b6000806000806080858703121561319957600080fd5b84356131a481612b35565b935060208501356131b481612b35565b92506040850135915060608501356131cb81612b35565b939692955090935050565b600080604083850312156131e957600080fd5b82356131f481612b35565b946020939093013593505050565b6000806000806040858703121561321857600080fd5b843567ffffffffffffffff8082111561323057600080fd5b61323c888389016130ab565b9096509450602087013591508082111561325557600080fd5b50613262878288016130ab565b95989497509550505050565b60006020828403121561328057600080fd5b8151611ea781612b35565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156132e757600080fd5b8151611ea781612cdf565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526044908201527f53747261746567794d616e616765722e6f6e6c7953747261746567795768697460408201527f656c69737465723a206e6f742074686520737472617465677957686974656c6960608201526339ba32b960e11b608082015260a00190565b602080825260409082018190527f53747261746567794d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60e08152600061342b60e0830189612db8565b828103602084015261343d8189612dfc565b6001600160a01b0397881660408501528651881660608501526020909601516bffffffffffffffffffffffff166080840152505063ffffffff9290921660a083015290921660c09092019190915292915050565b6000602082840312156134a357600080fd5b8135611ea781612cdf565b60005b838110156134c95781810151838201526020016134b1565b83811115610c4d5750506000910152565b600081518084526134f28160208601602086016134ae565b601f01601f19169290920160200192915050565b8281526040602082015260006129c360408301846134da565b60006020828403121561353157600080fd5b81516001600160e01b031981168114611ea757600080fd5b60006020828403121561355b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561358b5761358b613562565b500190565b6000828210156135a2576135a2613562565b500390565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600082516135e58184602087016134ae565b9190910192915050565b602081526000611ea760208301846134da56fea2646970667358221220abc36fd2ee49ca4102e163b1f97cb4379664d06b78743a638a212906db6072d764736f6c634300080c0033 diff --git a/pkg/bindings/StrategyManagerStorage/binding.go b/pkg/bindings/StrategyManagerStorage/binding.go new file mode 100644 index 000000000..31675e673 --- /dev/null +++ b/pkg/bindings/StrategyManagerStorage/binding.go @@ -0,0 +1,1506 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package StrategyManagerStorage + +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 +) + +// IStrategyManagerDeprecatedStructQueuedWithdrawal is an auto generated low-level Go binding around an user-defined struct. +type IStrategyManagerDeprecatedStructQueuedWithdrawal struct { + Strategies []common.Address + Shares []*big.Int + Staker common.Address + WithdrawerAndNonce IStrategyManagerDeprecatedStructWithdrawerAndNonce + WithdrawalStartBlock uint32 + DelegatedAddress common.Address +} + +// IStrategyManagerDeprecatedStructWithdrawerAndNonce is an auto generated low-level Go binding around an user-defined struct. +type IStrategyManagerDeprecatedStructWithdrawerAndNonce struct { + Withdrawer common.Address + Nonce *big.Int +} + +// 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\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"queuedWithdrawal\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_QueuedWithdrawal\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawerAndNonce\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_WithdrawerAndNonce\",\"components\":[{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"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\":\"migrateQueuedWithdrawal\",\"inputs\":[{\"name\":\"queuedWithdrawal\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_QueuedWithdrawal\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawerAndNonce\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_WithdrawerAndNonce\",\"components\":[{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"function\",\"name\":\"withdrawalRootPending\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"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}]", +} + +// StrategyManagerStorageABI is the input ABI used to generate the binding from. +// Deprecated: Use StrategyManagerStorageMetaData.ABI instead. +var StrategyManagerStorageABI = StrategyManagerStorageMetaData.ABI + +// StrategyManagerStorage is an auto generated Go binding around an Ethereum contract. +type StrategyManagerStorage struct { + StrategyManagerStorageCaller // Read-only binding to the contract + StrategyManagerStorageTransactor // Write-only binding to the contract + StrategyManagerStorageFilterer // Log filterer for contract events +} + +// StrategyManagerStorageCaller is an auto generated read-only Go binding around an Ethereum contract. +type StrategyManagerStorageCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StrategyManagerStorageTransactor is an auto generated write-only Go binding around an Ethereum contract. +type StrategyManagerStorageTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StrategyManagerStorageFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type StrategyManagerStorageFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StrategyManagerStorageSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type StrategyManagerStorageSession struct { + Contract *StrategyManagerStorage // 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 +} + +// StrategyManagerStorageCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type StrategyManagerStorageCallerSession struct { + Contract *StrategyManagerStorageCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// StrategyManagerStorageTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type StrategyManagerStorageTransactorSession struct { + Contract *StrategyManagerStorageTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// StrategyManagerStorageRaw is an auto generated low-level Go binding around an Ethereum contract. +type StrategyManagerStorageRaw struct { + Contract *StrategyManagerStorage // Generic contract binding to access the raw methods on +} + +// StrategyManagerStorageCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type StrategyManagerStorageCallerRaw struct { + Contract *StrategyManagerStorageCaller // Generic read-only contract binding to access the raw methods on +} + +// StrategyManagerStorageTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type StrategyManagerStorageTransactorRaw struct { + Contract *StrategyManagerStorageTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewStrategyManagerStorage creates a new instance of StrategyManagerStorage, bound to a specific deployed contract. +func NewStrategyManagerStorage(address common.Address, backend bind.ContractBackend) (*StrategyManagerStorage, error) { + contract, err := bindStrategyManagerStorage(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &StrategyManagerStorage{StrategyManagerStorageCaller: StrategyManagerStorageCaller{contract: contract}, StrategyManagerStorageTransactor: StrategyManagerStorageTransactor{contract: contract}, StrategyManagerStorageFilterer: StrategyManagerStorageFilterer{contract: contract}}, nil +} + +// NewStrategyManagerStorageCaller creates a new read-only instance of StrategyManagerStorage, bound to a specific deployed contract. +func NewStrategyManagerStorageCaller(address common.Address, caller bind.ContractCaller) (*StrategyManagerStorageCaller, error) { + contract, err := bindStrategyManagerStorage(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &StrategyManagerStorageCaller{contract: contract}, nil +} + +// NewStrategyManagerStorageTransactor creates a new write-only instance of StrategyManagerStorage, bound to a specific deployed contract. +func NewStrategyManagerStorageTransactor(address common.Address, transactor bind.ContractTransactor) (*StrategyManagerStorageTransactor, error) { + contract, err := bindStrategyManagerStorage(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &StrategyManagerStorageTransactor{contract: contract}, nil +} + +// NewStrategyManagerStorageFilterer creates a new log filterer instance of StrategyManagerStorage, bound to a specific deployed contract. +func NewStrategyManagerStorageFilterer(address common.Address, filterer bind.ContractFilterer) (*StrategyManagerStorageFilterer, error) { + contract, err := bindStrategyManagerStorage(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &StrategyManagerStorageFilterer{contract: contract}, nil +} + +// bindStrategyManagerStorage binds a generic wrapper to an already deployed contract. +func bindStrategyManagerStorage(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := StrategyManagerStorageMetaData.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 (_StrategyManagerStorage *StrategyManagerStorageRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StrategyManagerStorage.Contract.StrategyManagerStorageCaller.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 (_StrategyManagerStorage *StrategyManagerStorageRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.StrategyManagerStorageTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StrategyManagerStorage *StrategyManagerStorageRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.StrategyManagerStorageTransactor.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 (_StrategyManagerStorage *StrategyManagerStorageCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StrategyManagerStorage.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 (_StrategyManagerStorage *StrategyManagerStorageTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StrategyManagerStorage *StrategyManagerStorageTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.contract.Transact(opts, method, params...) +} + +// DEPOSITTYPEHASH is a free data retrieval call binding the contract method 0x48825e94. +// +// Solidity: function DEPOSIT_TYPEHASH() view returns(bytes32) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) DEPOSITTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "DEPOSIT_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEPOSITTYPEHASH is a free data retrieval call binding the contract method 0x48825e94. +// +// Solidity: function DEPOSIT_TYPEHASH() view returns(bytes32) +func (_StrategyManagerStorage *StrategyManagerStorageSession) DEPOSITTYPEHASH() ([32]byte, error) { + return _StrategyManagerStorage.Contract.DEPOSITTYPEHASH(&_StrategyManagerStorage.CallOpts) +} + +// DEPOSITTYPEHASH is a free data retrieval call binding the contract method 0x48825e94. +// +// Solidity: function DEPOSIT_TYPEHASH() view returns(bytes32) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) DEPOSITTYPEHASH() ([32]byte, error) { + return _StrategyManagerStorage.Contract.DEPOSITTYPEHASH(&_StrategyManagerStorage.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) DOMAINTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "DOMAIN_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_StrategyManagerStorage *StrategyManagerStorageSession) DOMAINTYPEHASH() ([32]byte, error) { + return _StrategyManagerStorage.Contract.DOMAINTYPEHASH(&_StrategyManagerStorage.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) DOMAINTYPEHASH() ([32]byte, error) { + return _StrategyManagerStorage.Contract.DOMAINTYPEHASH(&_StrategyManagerStorage.CallOpts) +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0xb43b514b. +// +// Solidity: function calculateWithdrawalRoot((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) pure returns(bytes32) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) CalculateWithdrawalRoot(opts *bind.CallOpts, queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) ([32]byte, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "calculateWithdrawalRoot", queuedWithdrawal) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0xb43b514b. +// +// Solidity: function calculateWithdrawalRoot((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) pure returns(bytes32) +func (_StrategyManagerStorage *StrategyManagerStorageSession) CalculateWithdrawalRoot(queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) ([32]byte, error) { + return _StrategyManagerStorage.Contract.CalculateWithdrawalRoot(&_StrategyManagerStorage.CallOpts, queuedWithdrawal) +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0xb43b514b. +// +// Solidity: function calculateWithdrawalRoot((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) pure returns(bytes32) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) CalculateWithdrawalRoot(queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) ([32]byte, error) { + return _StrategyManagerStorage.Contract.CalculateWithdrawalRoot(&_StrategyManagerStorage.CallOpts, queuedWithdrawal) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) Delegation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "delegation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageSession) Delegation() (common.Address, error) { + return _StrategyManagerStorage.Contract.Delegation(&_StrategyManagerStorage.CallOpts) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) Delegation() (common.Address, error) { + return _StrategyManagerStorage.Contract.Delegation(&_StrategyManagerStorage.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) EigenPodManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyManagerStorage.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 (_StrategyManagerStorage *StrategyManagerStorageSession) EigenPodManager() (common.Address, error) { + return _StrategyManagerStorage.Contract.EigenPodManager(&_StrategyManagerStorage.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) EigenPodManager() (common.Address, error) { + return _StrategyManagerStorage.Contract.EigenPodManager(&_StrategyManagerStorage.CallOpts) +} + +// GetDeposits is a free data retrieval call binding the contract method 0x94f649dd. +// +// Solidity: function getDeposits(address staker) view returns(address[], uint256[]) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) GetDeposits(opts *bind.CallOpts, staker common.Address) ([]common.Address, []*big.Int, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "getDeposits", staker) + + if err != nil { + return *new([]common.Address), *new([]*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + out1 := *abi.ConvertType(out[1], new([]*big.Int)).(*[]*big.Int) + + return out0, out1, err + +} + +// GetDeposits is a free data retrieval call binding the contract method 0x94f649dd. +// +// Solidity: function getDeposits(address staker) view returns(address[], uint256[]) +func (_StrategyManagerStorage *StrategyManagerStorageSession) GetDeposits(staker common.Address) ([]common.Address, []*big.Int, error) { + return _StrategyManagerStorage.Contract.GetDeposits(&_StrategyManagerStorage.CallOpts, staker) +} + +// GetDeposits is a free data retrieval call binding the contract method 0x94f649dd. +// +// Solidity: function getDeposits(address staker) view returns(address[], uint256[]) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) GetDeposits(staker common.Address) ([]common.Address, []*big.Int, error) { + return _StrategyManagerStorage.Contract.GetDeposits(&_StrategyManagerStorage.CallOpts, staker) +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address ) view returns(uint256) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) Nonces(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "nonces", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address ) view returns(uint256) +func (_StrategyManagerStorage *StrategyManagerStorageSession) Nonces(arg0 common.Address) (*big.Int, error) { + return _StrategyManagerStorage.Contract.Nonces(&_StrategyManagerStorage.CallOpts, arg0) +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address ) view returns(uint256) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) Nonces(arg0 common.Address) (*big.Int, error) { + return _StrategyManagerStorage.Contract.Nonces(&_StrategyManagerStorage.CallOpts, arg0) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) Slasher(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "slasher") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageSession) Slasher() (common.Address, error) { + return _StrategyManagerStorage.Contract.Slasher(&_StrategyManagerStorage.CallOpts) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) Slasher() (common.Address, error) { + return _StrategyManagerStorage.Contract.Slasher(&_StrategyManagerStorage.CallOpts) +} + +// StakerStrategyList is a free data retrieval call binding the contract method 0xcbc2bd62. +// +// Solidity: function stakerStrategyList(address , uint256 ) view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) StakerStrategyList(opts *bind.CallOpts, arg0 common.Address, arg1 *big.Int) (common.Address, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "stakerStrategyList", arg0, arg1) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StakerStrategyList is a free data retrieval call binding the contract method 0xcbc2bd62. +// +// Solidity: function stakerStrategyList(address , uint256 ) view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageSession) StakerStrategyList(arg0 common.Address, arg1 *big.Int) (common.Address, error) { + return _StrategyManagerStorage.Contract.StakerStrategyList(&_StrategyManagerStorage.CallOpts, arg0, arg1) +} + +// StakerStrategyList is a free data retrieval call binding the contract method 0xcbc2bd62. +// +// Solidity: function stakerStrategyList(address , uint256 ) view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) StakerStrategyList(arg0 common.Address, arg1 *big.Int) (common.Address, error) { + return _StrategyManagerStorage.Contract.StakerStrategyList(&_StrategyManagerStorage.CallOpts, arg0, arg1) +} + +// StakerStrategyListLength is a free data retrieval call binding the contract method 0x8b8aac3c. +// +// Solidity: function stakerStrategyListLength(address staker) view returns(uint256) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) StakerStrategyListLength(opts *bind.CallOpts, staker common.Address) (*big.Int, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "stakerStrategyListLength", staker) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerStrategyListLength is a free data retrieval call binding the contract method 0x8b8aac3c. +// +// Solidity: function stakerStrategyListLength(address staker) view returns(uint256) +func (_StrategyManagerStorage *StrategyManagerStorageSession) StakerStrategyListLength(staker common.Address) (*big.Int, error) { + return _StrategyManagerStorage.Contract.StakerStrategyListLength(&_StrategyManagerStorage.CallOpts, staker) +} + +// StakerStrategyListLength is a free data retrieval call binding the contract method 0x8b8aac3c. +// +// Solidity: function stakerStrategyListLength(address staker) view returns(uint256) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) StakerStrategyListLength(staker common.Address) (*big.Int, error) { + return _StrategyManagerStorage.Contract.StakerStrategyListLength(&_StrategyManagerStorage.CallOpts, staker) +} + +// StakerStrategyShares is a free data retrieval call binding the contract method 0x7a7e0d92. +// +// Solidity: function stakerStrategyShares(address , address ) view returns(uint256) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) StakerStrategyShares(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "stakerStrategyShares", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerStrategyShares is a free data retrieval call binding the contract method 0x7a7e0d92. +// +// Solidity: function stakerStrategyShares(address , address ) view returns(uint256) +func (_StrategyManagerStorage *StrategyManagerStorageSession) StakerStrategyShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _StrategyManagerStorage.Contract.StakerStrategyShares(&_StrategyManagerStorage.CallOpts, arg0, arg1) +} + +// StakerStrategyShares is a free data retrieval call binding the contract method 0x7a7e0d92. +// +// Solidity: function stakerStrategyShares(address , address ) view returns(uint256) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) StakerStrategyShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _StrategyManagerStorage.Contract.StakerStrategyShares(&_StrategyManagerStorage.CallOpts, arg0, arg1) +} + +// StrategyIsWhitelistedForDeposit is a free data retrieval call binding the contract method 0x663c1de4. +// +// Solidity: function strategyIsWhitelistedForDeposit(address ) view returns(bool) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) StrategyIsWhitelistedForDeposit(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "strategyIsWhitelistedForDeposit", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// StrategyIsWhitelistedForDeposit is a free data retrieval call binding the contract method 0x663c1de4. +// +// Solidity: function strategyIsWhitelistedForDeposit(address ) view returns(bool) +func (_StrategyManagerStorage *StrategyManagerStorageSession) StrategyIsWhitelistedForDeposit(arg0 common.Address) (bool, error) { + return _StrategyManagerStorage.Contract.StrategyIsWhitelistedForDeposit(&_StrategyManagerStorage.CallOpts, arg0) +} + +// StrategyIsWhitelistedForDeposit is a free data retrieval call binding the contract method 0x663c1de4. +// +// Solidity: function strategyIsWhitelistedForDeposit(address ) view returns(bool) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) StrategyIsWhitelistedForDeposit(arg0 common.Address) (bool, error) { + return _StrategyManagerStorage.Contract.StrategyIsWhitelistedForDeposit(&_StrategyManagerStorage.CallOpts, arg0) +} + +// StrategyWhitelister is a free data retrieval call binding the contract method 0x967fc0d2. +// +// Solidity: function strategyWhitelister() view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) StrategyWhitelister(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "strategyWhitelister") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StrategyWhitelister is a free data retrieval call binding the contract method 0x967fc0d2. +// +// Solidity: function strategyWhitelister() view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageSession) StrategyWhitelister() (common.Address, error) { + return _StrategyManagerStorage.Contract.StrategyWhitelister(&_StrategyManagerStorage.CallOpts) +} + +// StrategyWhitelister is a free data retrieval call binding the contract method 0x967fc0d2. +// +// Solidity: function strategyWhitelister() view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) StrategyWhitelister() (common.Address, error) { + return _StrategyManagerStorage.Contract.StrategyWhitelister(&_StrategyManagerStorage.CallOpts) +} + +// ThirdPartyTransfersForbidden is a free data retrieval call binding the contract method 0x9b4da03d. +// +// Solidity: function thirdPartyTransfersForbidden(address ) view returns(bool) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) ThirdPartyTransfersForbidden(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "thirdPartyTransfersForbidden", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// ThirdPartyTransfersForbidden is a free data retrieval call binding the contract method 0x9b4da03d. +// +// Solidity: function thirdPartyTransfersForbidden(address ) view returns(bool) +func (_StrategyManagerStorage *StrategyManagerStorageSession) ThirdPartyTransfersForbidden(arg0 common.Address) (bool, error) { + return _StrategyManagerStorage.Contract.ThirdPartyTransfersForbidden(&_StrategyManagerStorage.CallOpts, arg0) +} + +// ThirdPartyTransfersForbidden is a free data retrieval call binding the contract method 0x9b4da03d. +// +// Solidity: function thirdPartyTransfersForbidden(address ) view returns(bool) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) ThirdPartyTransfersForbidden(arg0 common.Address) (bool, error) { + return _StrategyManagerStorage.Contract.ThirdPartyTransfersForbidden(&_StrategyManagerStorage.CallOpts, arg0) +} + +// WithdrawalRootPending is a free data retrieval call binding the contract method 0xc3c6b3a9. +// +// Solidity: function withdrawalRootPending(bytes32 ) view returns(bool) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) WithdrawalRootPending(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "withdrawalRootPending", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// WithdrawalRootPending is a free data retrieval call binding the contract method 0xc3c6b3a9. +// +// Solidity: function withdrawalRootPending(bytes32 ) view returns(bool) +func (_StrategyManagerStorage *StrategyManagerStorageSession) WithdrawalRootPending(arg0 [32]byte) (bool, error) { + return _StrategyManagerStorage.Contract.WithdrawalRootPending(&_StrategyManagerStorage.CallOpts, arg0) +} + +// WithdrawalRootPending is a free data retrieval call binding the contract method 0xc3c6b3a9. +// +// Solidity: function withdrawalRootPending(bytes32 ) view returns(bool) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) WithdrawalRootPending(arg0 [32]byte) (bool, error) { + return _StrategyManagerStorage.Contract.WithdrawalRootPending(&_StrategyManagerStorage.CallOpts, arg0) +} + +// AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. +// +// 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() +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() +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) +} + +// AddStrategiesToDepositWhitelist is a paid mutator transaction binding the contract method 0xdf5b3547. +// +// Solidity: function addStrategiesToDepositWhitelist(address[] strategiesToWhitelist, bool[] thirdPartyTransfersForbiddenValues) returns() +func (_StrategyManagerStorage *StrategyManagerStorageTransactor) AddStrategiesToDepositWhitelist(opts *bind.TransactOpts, strategiesToWhitelist []common.Address, thirdPartyTransfersForbiddenValues []bool) (*types.Transaction, error) { + return _StrategyManagerStorage.contract.Transact(opts, "addStrategiesToDepositWhitelist", strategiesToWhitelist, thirdPartyTransfersForbiddenValues) +} + +// AddStrategiesToDepositWhitelist is a paid mutator transaction binding the contract method 0xdf5b3547. +// +// Solidity: function addStrategiesToDepositWhitelist(address[] strategiesToWhitelist, bool[] thirdPartyTransfersForbiddenValues) returns() +func (_StrategyManagerStorage *StrategyManagerStorageSession) AddStrategiesToDepositWhitelist(strategiesToWhitelist []common.Address, thirdPartyTransfersForbiddenValues []bool) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.AddStrategiesToDepositWhitelist(&_StrategyManagerStorage.TransactOpts, strategiesToWhitelist, thirdPartyTransfersForbiddenValues) +} + +// AddStrategiesToDepositWhitelist is a paid mutator transaction binding the contract method 0xdf5b3547. +// +// Solidity: function addStrategiesToDepositWhitelist(address[] strategiesToWhitelist, bool[] thirdPartyTransfersForbiddenValues) returns() +func (_StrategyManagerStorage *StrategyManagerStorageTransactorSession) AddStrategiesToDepositWhitelist(strategiesToWhitelist []common.Address, thirdPartyTransfersForbiddenValues []bool) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.AddStrategiesToDepositWhitelist(&_StrategyManagerStorage.TransactOpts, strategiesToWhitelist, thirdPartyTransfersForbiddenValues) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xe7a050aa. +// +// Solidity: function depositIntoStrategy(address strategy, address token, uint256 amount) returns(uint256 shares) +func (_StrategyManagerStorage *StrategyManagerStorageTransactor) DepositIntoStrategy(opts *bind.TransactOpts, strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _StrategyManagerStorage.contract.Transact(opts, "depositIntoStrategy", strategy, token, amount) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xe7a050aa. +// +// Solidity: function depositIntoStrategy(address strategy, address token, uint256 amount) returns(uint256 shares) +func (_StrategyManagerStorage *StrategyManagerStorageSession) DepositIntoStrategy(strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.DepositIntoStrategy(&_StrategyManagerStorage.TransactOpts, strategy, token, amount) +} + +// DepositIntoStrategy is a paid mutator transaction binding the contract method 0xe7a050aa. +// +// Solidity: function depositIntoStrategy(address strategy, address token, uint256 amount) returns(uint256 shares) +func (_StrategyManagerStorage *StrategyManagerStorageTransactorSession) DepositIntoStrategy(strategy common.Address, token common.Address, amount *big.Int) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.DepositIntoStrategy(&_StrategyManagerStorage.TransactOpts, strategy, token, amount) +} + +// DepositIntoStrategyWithSignature is a paid mutator transaction binding the contract method 0x32e89ace. +// +// Solidity: function depositIntoStrategyWithSignature(address strategy, address token, uint256 amount, address staker, uint256 expiry, bytes signature) returns(uint256 shares) +func (_StrategyManagerStorage *StrategyManagerStorageTransactor) DepositIntoStrategyWithSignature(opts *bind.TransactOpts, strategy common.Address, token common.Address, amount *big.Int, staker common.Address, expiry *big.Int, signature []byte) (*types.Transaction, error) { + return _StrategyManagerStorage.contract.Transact(opts, "depositIntoStrategyWithSignature", strategy, token, amount, staker, expiry, signature) +} + +// DepositIntoStrategyWithSignature is a paid mutator transaction binding the contract method 0x32e89ace. +// +// Solidity: function depositIntoStrategyWithSignature(address strategy, address token, uint256 amount, address staker, uint256 expiry, bytes signature) returns(uint256 shares) +func (_StrategyManagerStorage *StrategyManagerStorageSession) DepositIntoStrategyWithSignature(strategy common.Address, token common.Address, amount *big.Int, staker common.Address, expiry *big.Int, signature []byte) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.DepositIntoStrategyWithSignature(&_StrategyManagerStorage.TransactOpts, strategy, token, amount, staker, expiry, signature) +} + +// DepositIntoStrategyWithSignature is a paid mutator transaction binding the contract method 0x32e89ace. +// +// Solidity: function depositIntoStrategyWithSignature(address strategy, address token, uint256 amount, address staker, uint256 expiry, bytes signature) returns(uint256 shares) +func (_StrategyManagerStorage *StrategyManagerStorageTransactorSession) DepositIntoStrategyWithSignature(strategy common.Address, token common.Address, amount *big.Int, staker common.Address, expiry *big.Int, signature []byte) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.DepositIntoStrategyWithSignature(&_StrategyManagerStorage.TransactOpts, strategy, token, amount, staker, expiry, signature) +} + +// MigrateQueuedWithdrawal is a paid mutator transaction binding the contract method 0xcd293f6f. +// +// Solidity: function migrateQueuedWithdrawal((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) returns(bool, bytes32) +func (_StrategyManagerStorage *StrategyManagerStorageTransactor) MigrateQueuedWithdrawal(opts *bind.TransactOpts, queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _StrategyManagerStorage.contract.Transact(opts, "migrateQueuedWithdrawal", queuedWithdrawal) +} + +// MigrateQueuedWithdrawal is a paid mutator transaction binding the contract method 0xcd293f6f. +// +// Solidity: function migrateQueuedWithdrawal((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) returns(bool, bytes32) +func (_StrategyManagerStorage *StrategyManagerStorageSession) MigrateQueuedWithdrawal(queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.MigrateQueuedWithdrawal(&_StrategyManagerStorage.TransactOpts, queuedWithdrawal) +} + +// MigrateQueuedWithdrawal is a paid mutator transaction binding the contract method 0xcd293f6f. +// +// Solidity: function migrateQueuedWithdrawal((address[],uint256[],address,(address,uint96),uint32,address) queuedWithdrawal) returns(bool, bytes32) +func (_StrategyManagerStorage *StrategyManagerStorageTransactorSession) MigrateQueuedWithdrawal(queuedWithdrawal IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.MigrateQueuedWithdrawal(&_StrategyManagerStorage.TransactOpts, queuedWithdrawal) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0x8c80d4e5. +// +// Solidity: function removeShares(address staker, address strategy, uint256 shares) returns() +func (_StrategyManagerStorage *StrategyManagerStorageTransactor) RemoveShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _StrategyManagerStorage.contract.Transact(opts, "removeShares", staker, strategy, shares) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0x8c80d4e5. +// +// Solidity: function removeShares(address staker, address strategy, uint256 shares) returns() +func (_StrategyManagerStorage *StrategyManagerStorageSession) RemoveShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.RemoveShares(&_StrategyManagerStorage.TransactOpts, staker, strategy, shares) +} + +// RemoveShares is a paid mutator transaction binding the contract method 0x8c80d4e5. +// +// Solidity: function removeShares(address staker, address strategy, uint256 shares) returns() +func (_StrategyManagerStorage *StrategyManagerStorageTransactorSession) RemoveShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.RemoveShares(&_StrategyManagerStorage.TransactOpts, staker, strategy, shares) +} + +// RemoveStrategiesFromDepositWhitelist is a paid mutator transaction binding the contract method 0xb5d8b5b8. +// +// Solidity: function removeStrategiesFromDepositWhitelist(address[] strategiesToRemoveFromWhitelist) returns() +func (_StrategyManagerStorage *StrategyManagerStorageTransactor) RemoveStrategiesFromDepositWhitelist(opts *bind.TransactOpts, strategiesToRemoveFromWhitelist []common.Address) (*types.Transaction, error) { + return _StrategyManagerStorage.contract.Transact(opts, "removeStrategiesFromDepositWhitelist", strategiesToRemoveFromWhitelist) +} + +// RemoveStrategiesFromDepositWhitelist is a paid mutator transaction binding the contract method 0xb5d8b5b8. +// +// Solidity: function removeStrategiesFromDepositWhitelist(address[] strategiesToRemoveFromWhitelist) returns() +func (_StrategyManagerStorage *StrategyManagerStorageSession) RemoveStrategiesFromDepositWhitelist(strategiesToRemoveFromWhitelist []common.Address) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.RemoveStrategiesFromDepositWhitelist(&_StrategyManagerStorage.TransactOpts, strategiesToRemoveFromWhitelist) +} + +// RemoveStrategiesFromDepositWhitelist is a paid mutator transaction binding the contract method 0xb5d8b5b8. +// +// Solidity: function removeStrategiesFromDepositWhitelist(address[] strategiesToRemoveFromWhitelist) returns() +func (_StrategyManagerStorage *StrategyManagerStorageTransactorSession) RemoveStrategiesFromDepositWhitelist(strategiesToRemoveFromWhitelist []common.Address) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.RemoveStrategiesFromDepositWhitelist(&_StrategyManagerStorage.TransactOpts, strategiesToRemoveFromWhitelist) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0xc608c7f3. +// +// Solidity: function withdrawSharesAsTokens(address recipient, address strategy, uint256 shares, address token) returns() +func (_StrategyManagerStorage *StrategyManagerStorageTransactor) WithdrawSharesAsTokens(opts *bind.TransactOpts, recipient common.Address, strategy common.Address, shares *big.Int, token common.Address) (*types.Transaction, error) { + return _StrategyManagerStorage.contract.Transact(opts, "withdrawSharesAsTokens", recipient, strategy, shares, token) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0xc608c7f3. +// +// Solidity: function withdrawSharesAsTokens(address recipient, address strategy, uint256 shares, address token) returns() +func (_StrategyManagerStorage *StrategyManagerStorageSession) WithdrawSharesAsTokens(recipient common.Address, strategy common.Address, shares *big.Int, token common.Address) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.WithdrawSharesAsTokens(&_StrategyManagerStorage.TransactOpts, recipient, strategy, shares, token) +} + +// WithdrawSharesAsTokens is a paid mutator transaction binding the contract method 0xc608c7f3. +// +// Solidity: function withdrawSharesAsTokens(address recipient, address strategy, uint256 shares, address token) returns() +func (_StrategyManagerStorage *StrategyManagerStorageTransactorSession) WithdrawSharesAsTokens(recipient common.Address, strategy common.Address, shares *big.Int, token common.Address) (*types.Transaction, error) { + return _StrategyManagerStorage.Contract.WithdrawSharesAsTokens(&_StrategyManagerStorage.TransactOpts, recipient, strategy, shares, token) +} + +// StrategyManagerStorageDepositIterator is returned from FilterDeposit and is used to iterate over the raw logs and unpacked data for Deposit events raised by the StrategyManagerStorage contract. +type StrategyManagerStorageDepositIterator struct { + Event *StrategyManagerStorageDeposit // 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 *StrategyManagerStorageDepositIterator) 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(StrategyManagerStorageDeposit) + 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(StrategyManagerStorageDeposit) + 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 *StrategyManagerStorageDepositIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerStorageDepositIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerStorageDeposit represents a Deposit event raised by the StrategyManagerStorage contract. +type StrategyManagerStorageDeposit struct { + Staker common.Address + Token common.Address + Strategy common.Address + Shares *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeposit is a free log retrieval operation binding the contract event 0x7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a96. +// +// Solidity: event Deposit(address staker, address token, address strategy, uint256 shares) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) FilterDeposit(opts *bind.FilterOpts) (*StrategyManagerStorageDepositIterator, error) { + + logs, sub, err := _StrategyManagerStorage.contract.FilterLogs(opts, "Deposit") + if err != nil { + return nil, err + } + return &StrategyManagerStorageDepositIterator{contract: _StrategyManagerStorage.contract, event: "Deposit", logs: logs, sub: sub}, nil +} + +// WatchDeposit is a free log subscription operation binding the contract event 0x7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a96. +// +// Solidity: event Deposit(address staker, address token, address strategy, uint256 shares) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) WatchDeposit(opts *bind.WatchOpts, sink chan<- *StrategyManagerStorageDeposit) (event.Subscription, error) { + + logs, sub, err := _StrategyManagerStorage.contract.WatchLogs(opts, "Deposit") + 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(StrategyManagerStorageDeposit) + if err := _StrategyManagerStorage.contract.UnpackLog(event, "Deposit", 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 +} + +// ParseDeposit is a log parse operation binding the contract event 0x7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a96. +// +// Solidity: event Deposit(address staker, address token, address strategy, uint256 shares) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) ParseDeposit(log types.Log) (*StrategyManagerStorageDeposit, error) { + event := new(StrategyManagerStorageDeposit) + if err := _StrategyManagerStorage.contract.UnpackLog(event, "Deposit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyManagerStorageStrategyAddedToDepositWhitelistIterator is returned from FilterStrategyAddedToDepositWhitelist and is used to iterate over the raw logs and unpacked data for StrategyAddedToDepositWhitelist events raised by the StrategyManagerStorage contract. +type StrategyManagerStorageStrategyAddedToDepositWhitelistIterator struct { + Event *StrategyManagerStorageStrategyAddedToDepositWhitelist // 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 *StrategyManagerStorageStrategyAddedToDepositWhitelistIterator) 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(StrategyManagerStorageStrategyAddedToDepositWhitelist) + 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(StrategyManagerStorageStrategyAddedToDepositWhitelist) + 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 *StrategyManagerStorageStrategyAddedToDepositWhitelistIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerStorageStrategyAddedToDepositWhitelistIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerStorageStrategyAddedToDepositWhitelist represents a StrategyAddedToDepositWhitelist event raised by the StrategyManagerStorage contract. +type StrategyManagerStorageStrategyAddedToDepositWhitelist struct { + Strategy common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyAddedToDepositWhitelist is a free log retrieval operation binding the contract event 0x0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe. +// +// Solidity: event StrategyAddedToDepositWhitelist(address strategy) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) FilterStrategyAddedToDepositWhitelist(opts *bind.FilterOpts) (*StrategyManagerStorageStrategyAddedToDepositWhitelistIterator, error) { + + logs, sub, err := _StrategyManagerStorage.contract.FilterLogs(opts, "StrategyAddedToDepositWhitelist") + if err != nil { + return nil, err + } + return &StrategyManagerStorageStrategyAddedToDepositWhitelistIterator{contract: _StrategyManagerStorage.contract, event: "StrategyAddedToDepositWhitelist", logs: logs, sub: sub}, nil +} + +// WatchStrategyAddedToDepositWhitelist is a free log subscription operation binding the contract event 0x0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe. +// +// Solidity: event StrategyAddedToDepositWhitelist(address strategy) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) WatchStrategyAddedToDepositWhitelist(opts *bind.WatchOpts, sink chan<- *StrategyManagerStorageStrategyAddedToDepositWhitelist) (event.Subscription, error) { + + logs, sub, err := _StrategyManagerStorage.contract.WatchLogs(opts, "StrategyAddedToDepositWhitelist") + 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(StrategyManagerStorageStrategyAddedToDepositWhitelist) + if err := _StrategyManagerStorage.contract.UnpackLog(event, "StrategyAddedToDepositWhitelist", 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 +} + +// ParseStrategyAddedToDepositWhitelist is a log parse operation binding the contract event 0x0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe. +// +// Solidity: event StrategyAddedToDepositWhitelist(address strategy) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) ParseStrategyAddedToDepositWhitelist(log types.Log) (*StrategyManagerStorageStrategyAddedToDepositWhitelist, error) { + event := new(StrategyManagerStorageStrategyAddedToDepositWhitelist) + if err := _StrategyManagerStorage.contract.UnpackLog(event, "StrategyAddedToDepositWhitelist", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyManagerStorageStrategyRemovedFromDepositWhitelistIterator is returned from FilterStrategyRemovedFromDepositWhitelist and is used to iterate over the raw logs and unpacked data for StrategyRemovedFromDepositWhitelist events raised by the StrategyManagerStorage contract. +type StrategyManagerStorageStrategyRemovedFromDepositWhitelistIterator struct { + Event *StrategyManagerStorageStrategyRemovedFromDepositWhitelist // 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 *StrategyManagerStorageStrategyRemovedFromDepositWhitelistIterator) 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(StrategyManagerStorageStrategyRemovedFromDepositWhitelist) + 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(StrategyManagerStorageStrategyRemovedFromDepositWhitelist) + 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 *StrategyManagerStorageStrategyRemovedFromDepositWhitelistIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerStorageStrategyRemovedFromDepositWhitelistIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerStorageStrategyRemovedFromDepositWhitelist represents a StrategyRemovedFromDepositWhitelist event raised by the StrategyManagerStorage contract. +type StrategyManagerStorageStrategyRemovedFromDepositWhitelist struct { + Strategy common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyRemovedFromDepositWhitelist is a free log retrieval operation binding the contract event 0x4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030. +// +// Solidity: event StrategyRemovedFromDepositWhitelist(address strategy) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) FilterStrategyRemovedFromDepositWhitelist(opts *bind.FilterOpts) (*StrategyManagerStorageStrategyRemovedFromDepositWhitelistIterator, error) { + + logs, sub, err := _StrategyManagerStorage.contract.FilterLogs(opts, "StrategyRemovedFromDepositWhitelist") + if err != nil { + return nil, err + } + return &StrategyManagerStorageStrategyRemovedFromDepositWhitelistIterator{contract: _StrategyManagerStorage.contract, event: "StrategyRemovedFromDepositWhitelist", logs: logs, sub: sub}, nil +} + +// WatchStrategyRemovedFromDepositWhitelist is a free log subscription operation binding the contract event 0x4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030. +// +// Solidity: event StrategyRemovedFromDepositWhitelist(address strategy) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) WatchStrategyRemovedFromDepositWhitelist(opts *bind.WatchOpts, sink chan<- *StrategyManagerStorageStrategyRemovedFromDepositWhitelist) (event.Subscription, error) { + + logs, sub, err := _StrategyManagerStorage.contract.WatchLogs(opts, "StrategyRemovedFromDepositWhitelist") + 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(StrategyManagerStorageStrategyRemovedFromDepositWhitelist) + if err := _StrategyManagerStorage.contract.UnpackLog(event, "StrategyRemovedFromDepositWhitelist", 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 +} + +// ParseStrategyRemovedFromDepositWhitelist is a log parse operation binding the contract event 0x4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030. +// +// Solidity: event StrategyRemovedFromDepositWhitelist(address strategy) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) ParseStrategyRemovedFromDepositWhitelist(log types.Log) (*StrategyManagerStorageStrategyRemovedFromDepositWhitelist, error) { + event := new(StrategyManagerStorageStrategyRemovedFromDepositWhitelist) + if err := _StrategyManagerStorage.contract.UnpackLog(event, "StrategyRemovedFromDepositWhitelist", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyManagerStorageStrategyWhitelisterChangedIterator is returned from FilterStrategyWhitelisterChanged and is used to iterate over the raw logs and unpacked data for StrategyWhitelisterChanged events raised by the StrategyManagerStorage contract. +type StrategyManagerStorageStrategyWhitelisterChangedIterator struct { + Event *StrategyManagerStorageStrategyWhitelisterChanged // 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 *StrategyManagerStorageStrategyWhitelisterChangedIterator) 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(StrategyManagerStorageStrategyWhitelisterChanged) + 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(StrategyManagerStorageStrategyWhitelisterChanged) + 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 *StrategyManagerStorageStrategyWhitelisterChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerStorageStrategyWhitelisterChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerStorageStrategyWhitelisterChanged represents a StrategyWhitelisterChanged event raised by the StrategyManagerStorage contract. +type StrategyManagerStorageStrategyWhitelisterChanged struct { + PreviousAddress common.Address + NewAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyWhitelisterChanged is a free log retrieval operation binding the contract event 0x4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29. +// +// Solidity: event StrategyWhitelisterChanged(address previousAddress, address newAddress) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) FilterStrategyWhitelisterChanged(opts *bind.FilterOpts) (*StrategyManagerStorageStrategyWhitelisterChangedIterator, error) { + + logs, sub, err := _StrategyManagerStorage.contract.FilterLogs(opts, "StrategyWhitelisterChanged") + if err != nil { + return nil, err + } + return &StrategyManagerStorageStrategyWhitelisterChangedIterator{contract: _StrategyManagerStorage.contract, event: "StrategyWhitelisterChanged", logs: logs, sub: sub}, nil +} + +// WatchStrategyWhitelisterChanged is a free log subscription operation binding the contract event 0x4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29. +// +// Solidity: event StrategyWhitelisterChanged(address previousAddress, address newAddress) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) WatchStrategyWhitelisterChanged(opts *bind.WatchOpts, sink chan<- *StrategyManagerStorageStrategyWhitelisterChanged) (event.Subscription, error) { + + logs, sub, err := _StrategyManagerStorage.contract.WatchLogs(opts, "StrategyWhitelisterChanged") + 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(StrategyManagerStorageStrategyWhitelisterChanged) + if err := _StrategyManagerStorage.contract.UnpackLog(event, "StrategyWhitelisterChanged", 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 +} + +// ParseStrategyWhitelisterChanged is a log parse operation binding the contract event 0x4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29. +// +// Solidity: event StrategyWhitelisterChanged(address previousAddress, address newAddress) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) ParseStrategyWhitelisterChanged(log types.Log) (*StrategyManagerStorageStrategyWhitelisterChanged, error) { + event := new(StrategyManagerStorageStrategyWhitelisterChanged) + if err := _StrategyManagerStorage.contract.UnpackLog(event, "StrategyWhitelisterChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StrategyManagerStorageUpdatedThirdPartyTransfersForbiddenIterator is returned from FilterUpdatedThirdPartyTransfersForbidden and is used to iterate over the raw logs and unpacked data for UpdatedThirdPartyTransfersForbidden events raised by the StrategyManagerStorage contract. +type StrategyManagerStorageUpdatedThirdPartyTransfersForbiddenIterator struct { + Event *StrategyManagerStorageUpdatedThirdPartyTransfersForbidden // 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 *StrategyManagerStorageUpdatedThirdPartyTransfersForbiddenIterator) 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(StrategyManagerStorageUpdatedThirdPartyTransfersForbidden) + 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(StrategyManagerStorageUpdatedThirdPartyTransfersForbidden) + 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 *StrategyManagerStorageUpdatedThirdPartyTransfersForbiddenIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StrategyManagerStorageUpdatedThirdPartyTransfersForbiddenIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StrategyManagerStorageUpdatedThirdPartyTransfersForbidden represents a UpdatedThirdPartyTransfersForbidden event raised by the StrategyManagerStorage contract. +type StrategyManagerStorageUpdatedThirdPartyTransfersForbidden struct { + Strategy common.Address + Value bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedThirdPartyTransfersForbidden is a free log retrieval operation binding the contract event 0x77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786. +// +// Solidity: event UpdatedThirdPartyTransfersForbidden(address strategy, bool value) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) FilterUpdatedThirdPartyTransfersForbidden(opts *bind.FilterOpts) (*StrategyManagerStorageUpdatedThirdPartyTransfersForbiddenIterator, error) { + + logs, sub, err := _StrategyManagerStorage.contract.FilterLogs(opts, "UpdatedThirdPartyTransfersForbidden") + if err != nil { + return nil, err + } + return &StrategyManagerStorageUpdatedThirdPartyTransfersForbiddenIterator{contract: _StrategyManagerStorage.contract, event: "UpdatedThirdPartyTransfersForbidden", logs: logs, sub: sub}, nil +} + +// WatchUpdatedThirdPartyTransfersForbidden is a free log subscription operation binding the contract event 0x77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786. +// +// Solidity: event UpdatedThirdPartyTransfersForbidden(address strategy, bool value) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) WatchUpdatedThirdPartyTransfersForbidden(opts *bind.WatchOpts, sink chan<- *StrategyManagerStorageUpdatedThirdPartyTransfersForbidden) (event.Subscription, error) { + + logs, sub, err := _StrategyManagerStorage.contract.WatchLogs(opts, "UpdatedThirdPartyTransfersForbidden") + 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(StrategyManagerStorageUpdatedThirdPartyTransfersForbidden) + if err := _StrategyManagerStorage.contract.UnpackLog(event, "UpdatedThirdPartyTransfersForbidden", 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 +} + +// ParseUpdatedThirdPartyTransfersForbidden is a log parse operation binding the contract event 0x77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786. +// +// Solidity: event UpdatedThirdPartyTransfersForbidden(address strategy, bool value) +func (_StrategyManagerStorage *StrategyManagerStorageFilterer) ParseUpdatedThirdPartyTransfersForbidden(log types.Log) (*StrategyManagerStorageUpdatedThirdPartyTransfersForbidden, error) { + event := new(StrategyManagerStorageUpdatedThirdPartyTransfersForbidden) + if err := _StrategyManagerStorage.contract.UnpackLog(event, "UpdatedThirdPartyTransfersForbidden", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/StrategyManagerStorage/tmp.abi b/pkg/bindings/StrategyManagerStorage/tmp.abi new file mode 100644 index 000000000..7d03949e0 --- /dev/null +++ b/pkg/bindings/StrategyManagerStorage/tmp.abi @@ -0,0 +1,656 @@ +[ + { + "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": "contract IERC20" + }, + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "addStrategiesToDepositWhitelist", + "inputs": [ + { + "name": "strategiesToWhitelist", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "thirdPartyTransfersForbiddenValues", + "type": "bool[]", + "internalType": "bool[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "calculateWithdrawalRoot", + "inputs": [ + { + "name": "queuedWithdrawal", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_QueuedWithdrawal", + "components": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "withdrawerAndNonce", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_WithdrawerAndNonce", + "components": [ + { + "name": "withdrawer", + "type": "address", + "internalType": "address" + }, + { + "name": "nonce", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "name": "withdrawalStartBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "delegatedAddress", + "type": "address", + "internalType": "address" + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "delegation", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IDelegationManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "depositIntoStrategy", + "inputs": [ + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "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": "contract IStrategy" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "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": "contract IEigenPodManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getDeposits", + "inputs": [ + { + "name": "staker", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "migrateQueuedWithdrawal", + "inputs": [ + { + "name": "queuedWithdrawal", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_QueuedWithdrawal", + "components": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IStrategy[]" + }, + { + "name": "shares", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "staker", + "type": "address", + "internalType": "address" + }, + { + "name": "withdrawerAndNonce", + "type": "tuple", + "internalType": "struct IStrategyManager.DeprecatedStruct_WithdrawerAndNonce", + "components": [ + { + "name": "withdrawer", + "type": "address", + "internalType": "address" + }, + { + "name": "nonce", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "name": "withdrawalStartBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "delegatedAddress", + "type": "address", + "internalType": "address" + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + }, + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "nonpayable" + }, + { + "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": "contract IStrategy" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "removeStrategiesFromDepositWhitelist", + "inputs": [ + { + "name": "strategiesToRemoveFromWhitelist", + "type": "address[]", + "internalType": "contract IStrategy[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "slasher", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ISlasher" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "stakerStrategyList", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IStrategy" + } + ], + "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": "contract IStrategy" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "strategyIsWhitelistedForDeposit", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IStrategy" + } + ], + "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": "contract IStrategy" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "withdrawSharesAsTokens", + "inputs": [ + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "withdrawalRootPending", + "inputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "Deposit", + "inputs": [ + { + "name": "staker", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "token", + "type": "address", + "indexed": false, + "internalType": "contract IERC20" + }, + { + "name": "strategy", + "type": "address", + "indexed": false, + "internalType": "contract IStrategy" + }, + { + "name": "shares", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StrategyAddedToDepositWhitelist", + "inputs": [ + { + "name": "strategy", + "type": "address", + "indexed": false, + "internalType": "contract IStrategy" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StrategyRemovedFromDepositWhitelist", + "inputs": [ + { + "name": "strategy", + "type": "address", + "indexed": false, + "internalType": "contract IStrategy" + } + ], + "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": "contract IStrategy" + }, + { + "name": "value", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/StrategyManagerStorage/tmp.bin b/pkg/bindings/StrategyManagerStorage/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/StrategyManagerStorage/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/pkg/bindings/StructuredLinkedList/binding.go b/pkg/bindings/StructuredLinkedList/binding.go new file mode 100644 index 000000000..b291ef98d --- /dev/null +++ b/pkg/bindings/StructuredLinkedList/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 StructuredLinkedList + +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 +) + +// StructuredLinkedListMetaData contains all meta data concerning the StructuredLinkedList contract. +var StructuredLinkedListMetaData = &bind.MetaData{ + ABI: "[]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200b0f3aa07997f25ddb2b0dd17a1b6104304d811d2cec7f2d2dfcae3e3d618f6964736f6c634300080c0033", +} + +// StructuredLinkedListABI is the input ABI used to generate the binding from. +// Deprecated: Use StructuredLinkedListMetaData.ABI instead. +var StructuredLinkedListABI = StructuredLinkedListMetaData.ABI + +// StructuredLinkedListBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use StructuredLinkedListMetaData.Bin instead. +var StructuredLinkedListBin = StructuredLinkedListMetaData.Bin + +// DeployStructuredLinkedList deploys a new Ethereum contract, binding an instance of StructuredLinkedList to it. +func DeployStructuredLinkedList(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *StructuredLinkedList, error) { + parsed, err := StructuredLinkedListMetaData.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(StructuredLinkedListBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &StructuredLinkedList{StructuredLinkedListCaller: StructuredLinkedListCaller{contract: contract}, StructuredLinkedListTransactor: StructuredLinkedListTransactor{contract: contract}, StructuredLinkedListFilterer: StructuredLinkedListFilterer{contract: contract}}, nil +} + +// StructuredLinkedList is an auto generated Go binding around an Ethereum contract. +type StructuredLinkedList struct { + StructuredLinkedListCaller // Read-only binding to the contract + StructuredLinkedListTransactor // Write-only binding to the contract + StructuredLinkedListFilterer // Log filterer for contract events +} + +// StructuredLinkedListCaller is an auto generated read-only Go binding around an Ethereum contract. +type StructuredLinkedListCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StructuredLinkedListTransactor is an auto generated write-only Go binding around an Ethereum contract. +type StructuredLinkedListTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StructuredLinkedListFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type StructuredLinkedListFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StructuredLinkedListSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type StructuredLinkedListSession struct { + Contract *StructuredLinkedList // 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 +} + +// StructuredLinkedListCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type StructuredLinkedListCallerSession struct { + Contract *StructuredLinkedListCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// StructuredLinkedListTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type StructuredLinkedListTransactorSession struct { + Contract *StructuredLinkedListTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// StructuredLinkedListRaw is an auto generated low-level Go binding around an Ethereum contract. +type StructuredLinkedListRaw struct { + Contract *StructuredLinkedList // Generic contract binding to access the raw methods on +} + +// StructuredLinkedListCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type StructuredLinkedListCallerRaw struct { + Contract *StructuredLinkedListCaller // Generic read-only contract binding to access the raw methods on +} + +// StructuredLinkedListTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type StructuredLinkedListTransactorRaw struct { + Contract *StructuredLinkedListTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewStructuredLinkedList creates a new instance of StructuredLinkedList, bound to a specific deployed contract. +func NewStructuredLinkedList(address common.Address, backend bind.ContractBackend) (*StructuredLinkedList, error) { + contract, err := bindStructuredLinkedList(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &StructuredLinkedList{StructuredLinkedListCaller: StructuredLinkedListCaller{contract: contract}, StructuredLinkedListTransactor: StructuredLinkedListTransactor{contract: contract}, StructuredLinkedListFilterer: StructuredLinkedListFilterer{contract: contract}}, nil +} + +// NewStructuredLinkedListCaller creates a new read-only instance of StructuredLinkedList, bound to a specific deployed contract. +func NewStructuredLinkedListCaller(address common.Address, caller bind.ContractCaller) (*StructuredLinkedListCaller, error) { + contract, err := bindStructuredLinkedList(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &StructuredLinkedListCaller{contract: contract}, nil +} + +// NewStructuredLinkedListTransactor creates a new write-only instance of StructuredLinkedList, bound to a specific deployed contract. +func NewStructuredLinkedListTransactor(address common.Address, transactor bind.ContractTransactor) (*StructuredLinkedListTransactor, error) { + contract, err := bindStructuredLinkedList(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &StructuredLinkedListTransactor{contract: contract}, nil +} + +// NewStructuredLinkedListFilterer creates a new log filterer instance of StructuredLinkedList, bound to a specific deployed contract. +func NewStructuredLinkedListFilterer(address common.Address, filterer bind.ContractFilterer) (*StructuredLinkedListFilterer, error) { + contract, err := bindStructuredLinkedList(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &StructuredLinkedListFilterer{contract: contract}, nil +} + +// bindStructuredLinkedList binds a generic wrapper to an already deployed contract. +func bindStructuredLinkedList(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := StructuredLinkedListMetaData.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 (_StructuredLinkedList *StructuredLinkedListRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StructuredLinkedList.Contract.StructuredLinkedListCaller.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 (_StructuredLinkedList *StructuredLinkedListRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StructuredLinkedList.Contract.StructuredLinkedListTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StructuredLinkedList *StructuredLinkedListRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StructuredLinkedList.Contract.StructuredLinkedListTransactor.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 (_StructuredLinkedList *StructuredLinkedListCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StructuredLinkedList.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 (_StructuredLinkedList *StructuredLinkedListTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StructuredLinkedList.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StructuredLinkedList *StructuredLinkedListTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StructuredLinkedList.Contract.contract.Transact(opts, method, params...) +} diff --git a/pkg/bindings/StructuredLinkedList/tmp.abi b/pkg/bindings/StructuredLinkedList/tmp.abi new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/pkg/bindings/StructuredLinkedList/tmp.abi @@ -0,0 +1 @@ +[] diff --git a/pkg/bindings/StructuredLinkedList/tmp.bin b/pkg/bindings/StructuredLinkedList/tmp.bin new file mode 100644 index 000000000..910aae88d --- /dev/null +++ b/pkg/bindings/StructuredLinkedList/tmp.bin @@ -0,0 +1 @@ +0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200b0f3aa07997f25ddb2b0dd17a1b6104304d811d2cec7f2d2dfcae3e3d618f6964736f6c634300080c0033 diff --git a/pkg/bindings/UpgradeableSignatureCheckingUtils/binding.go b/pkg/bindings/UpgradeableSignatureCheckingUtils/binding.go new file mode 100644 index 000000000..61b50a094 --- /dev/null +++ b/pkg/bindings/UpgradeableSignatureCheckingUtils/binding.go @@ -0,0 +1,377 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package UpgradeableSignatureCheckingUtils + +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 +) + +// UpgradeableSignatureCheckingUtilsMetaData contains all meta data concerning the UpgradeableSignatureCheckingUtils contract. +var UpgradeableSignatureCheckingUtilsMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", +} + +// UpgradeableSignatureCheckingUtilsABI is the input ABI used to generate the binding from. +// Deprecated: Use UpgradeableSignatureCheckingUtilsMetaData.ABI instead. +var UpgradeableSignatureCheckingUtilsABI = UpgradeableSignatureCheckingUtilsMetaData.ABI + +// UpgradeableSignatureCheckingUtils is an auto generated Go binding around an Ethereum contract. +type UpgradeableSignatureCheckingUtils struct { + UpgradeableSignatureCheckingUtilsCaller // Read-only binding to the contract + UpgradeableSignatureCheckingUtilsTransactor // Write-only binding to the contract + UpgradeableSignatureCheckingUtilsFilterer // Log filterer for contract events +} + +// UpgradeableSignatureCheckingUtilsCaller is an auto generated read-only Go binding around an Ethereum contract. +type UpgradeableSignatureCheckingUtilsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// UpgradeableSignatureCheckingUtilsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type UpgradeableSignatureCheckingUtilsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// UpgradeableSignatureCheckingUtilsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type UpgradeableSignatureCheckingUtilsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// UpgradeableSignatureCheckingUtilsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type UpgradeableSignatureCheckingUtilsSession struct { + Contract *UpgradeableSignatureCheckingUtils // 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 +} + +// UpgradeableSignatureCheckingUtilsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type UpgradeableSignatureCheckingUtilsCallerSession struct { + Contract *UpgradeableSignatureCheckingUtilsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// UpgradeableSignatureCheckingUtilsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type UpgradeableSignatureCheckingUtilsTransactorSession struct { + Contract *UpgradeableSignatureCheckingUtilsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// UpgradeableSignatureCheckingUtilsRaw is an auto generated low-level Go binding around an Ethereum contract. +type UpgradeableSignatureCheckingUtilsRaw struct { + Contract *UpgradeableSignatureCheckingUtils // Generic contract binding to access the raw methods on +} + +// UpgradeableSignatureCheckingUtilsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type UpgradeableSignatureCheckingUtilsCallerRaw struct { + Contract *UpgradeableSignatureCheckingUtilsCaller // Generic read-only contract binding to access the raw methods on +} + +// UpgradeableSignatureCheckingUtilsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type UpgradeableSignatureCheckingUtilsTransactorRaw struct { + Contract *UpgradeableSignatureCheckingUtilsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewUpgradeableSignatureCheckingUtils creates a new instance of UpgradeableSignatureCheckingUtils, bound to a specific deployed contract. +func NewUpgradeableSignatureCheckingUtils(address common.Address, backend bind.ContractBackend) (*UpgradeableSignatureCheckingUtils, error) { + contract, err := bindUpgradeableSignatureCheckingUtils(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &UpgradeableSignatureCheckingUtils{UpgradeableSignatureCheckingUtilsCaller: UpgradeableSignatureCheckingUtilsCaller{contract: contract}, UpgradeableSignatureCheckingUtilsTransactor: UpgradeableSignatureCheckingUtilsTransactor{contract: contract}, UpgradeableSignatureCheckingUtilsFilterer: UpgradeableSignatureCheckingUtilsFilterer{contract: contract}}, nil +} + +// NewUpgradeableSignatureCheckingUtilsCaller creates a new read-only instance of UpgradeableSignatureCheckingUtils, bound to a specific deployed contract. +func NewUpgradeableSignatureCheckingUtilsCaller(address common.Address, caller bind.ContractCaller) (*UpgradeableSignatureCheckingUtilsCaller, error) { + contract, err := bindUpgradeableSignatureCheckingUtils(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &UpgradeableSignatureCheckingUtilsCaller{contract: contract}, nil +} + +// NewUpgradeableSignatureCheckingUtilsTransactor creates a new write-only instance of UpgradeableSignatureCheckingUtils, bound to a specific deployed contract. +func NewUpgradeableSignatureCheckingUtilsTransactor(address common.Address, transactor bind.ContractTransactor) (*UpgradeableSignatureCheckingUtilsTransactor, error) { + contract, err := bindUpgradeableSignatureCheckingUtils(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &UpgradeableSignatureCheckingUtilsTransactor{contract: contract}, nil +} + +// NewUpgradeableSignatureCheckingUtilsFilterer creates a new log filterer instance of UpgradeableSignatureCheckingUtils, bound to a specific deployed contract. +func NewUpgradeableSignatureCheckingUtilsFilterer(address common.Address, filterer bind.ContractFilterer) (*UpgradeableSignatureCheckingUtilsFilterer, error) { + contract, err := bindUpgradeableSignatureCheckingUtils(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &UpgradeableSignatureCheckingUtilsFilterer{contract: contract}, nil +} + +// bindUpgradeableSignatureCheckingUtils binds a generic wrapper to an already deployed contract. +func bindUpgradeableSignatureCheckingUtils(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := UpgradeableSignatureCheckingUtilsMetaData.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 (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _UpgradeableSignatureCheckingUtils.Contract.UpgradeableSignatureCheckingUtilsCaller.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 (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _UpgradeableSignatureCheckingUtils.Contract.UpgradeableSignatureCheckingUtilsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _UpgradeableSignatureCheckingUtils.Contract.UpgradeableSignatureCheckingUtilsTransactor.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 (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _UpgradeableSignatureCheckingUtils.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 (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _UpgradeableSignatureCheckingUtils.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _UpgradeableSignatureCheckingUtils.Contract.contract.Transact(opts, method, params...) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsCaller) DOMAINTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _UpgradeableSignatureCheckingUtils.contract.Call(opts, &out, "DOMAIN_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsSession) DOMAINTYPEHASH() ([32]byte, error) { + return _UpgradeableSignatureCheckingUtils.Contract.DOMAINTYPEHASH(&_UpgradeableSignatureCheckingUtils.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsCallerSession) DOMAINTYPEHASH() ([32]byte, error) { + return _UpgradeableSignatureCheckingUtils.Contract.DOMAINTYPEHASH(&_UpgradeableSignatureCheckingUtils.CallOpts) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _UpgradeableSignatureCheckingUtils.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 + +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsSession) DomainSeparator() ([32]byte, error) { + return _UpgradeableSignatureCheckingUtils.Contract.DomainSeparator(&_UpgradeableSignatureCheckingUtils.CallOpts) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsCallerSession) DomainSeparator() ([32]byte, error) { + return _UpgradeableSignatureCheckingUtils.Contract.DomainSeparator(&_UpgradeableSignatureCheckingUtils.CallOpts) +} + +// UpgradeableSignatureCheckingUtilsInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the UpgradeableSignatureCheckingUtils contract. +type UpgradeableSignatureCheckingUtilsInitializedIterator struct { + Event *UpgradeableSignatureCheckingUtilsInitialized // 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 *UpgradeableSignatureCheckingUtilsInitializedIterator) 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(UpgradeableSignatureCheckingUtilsInitialized) + 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(UpgradeableSignatureCheckingUtilsInitialized) + 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 *UpgradeableSignatureCheckingUtilsInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *UpgradeableSignatureCheckingUtilsInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// UpgradeableSignatureCheckingUtilsInitialized represents a Initialized event raised by the UpgradeableSignatureCheckingUtils contract. +type UpgradeableSignatureCheckingUtilsInitialized 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 (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsFilterer) FilterInitialized(opts *bind.FilterOpts) (*UpgradeableSignatureCheckingUtilsInitializedIterator, error) { + + logs, sub, err := _UpgradeableSignatureCheckingUtils.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &UpgradeableSignatureCheckingUtilsInitializedIterator{contract: _UpgradeableSignatureCheckingUtils.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 (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *UpgradeableSignatureCheckingUtilsInitialized) (event.Subscription, error) { + + logs, sub, err := _UpgradeableSignatureCheckingUtils.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(UpgradeableSignatureCheckingUtilsInitialized) + if err := _UpgradeableSignatureCheckingUtils.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 (_UpgradeableSignatureCheckingUtils *UpgradeableSignatureCheckingUtilsFilterer) ParseInitialized(log types.Log) (*UpgradeableSignatureCheckingUtilsInitialized, error) { + event := new(UpgradeableSignatureCheckingUtilsInitialized) + if err := _UpgradeableSignatureCheckingUtils.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/UpgradeableSignatureCheckingUtils/tmp.abi b/pkg/bindings/UpgradeableSignatureCheckingUtils/tmp.abi new file mode 100644 index 000000000..785d56829 --- /dev/null +++ b/pkg/bindings/UpgradeableSignatureCheckingUtils/tmp.abi @@ -0,0 +1,41 @@ +[ + { + "type": "function", + "name": "DOMAIN_TYPEHASH", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "domainSeparator", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + } +] diff --git a/pkg/bindings/UpgradeableSignatureCheckingUtils/tmp.bin b/pkg/bindings/UpgradeableSignatureCheckingUtils/tmp.bin new file mode 100644 index 000000000..ec687260b --- /dev/null +++ b/pkg/bindings/UpgradeableSignatureCheckingUtils/tmp.bin @@ -0,0 +1 @@ +0x diff --git a/remappings.txt b/remappings.txt index 047e1c8d7..91c1fde59 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,4 +1,6 @@ @openzeppelin-upgrades/=lib/openzeppelin-contracts-upgradeable/ @openzeppelin/=lib/openzeppelin-contracts/ +@openzeppelin-v4.9.0/=lib/openzeppelin-contracts-v4.9.0/ +@openzeppelin-upgrades-v4.9.0/=lib/openzeppelin-contracts-upgradeable-v4.9.0/ ds-test/=lib/ds-test/src/ -forge-std/=lib/forge-std/src/ +forge-std/=lib/forge-std/src/ \ No newline at end of file diff --git a/script/admin/mainnet/Mainnet_Unpause_Deposits.s.sol b/script/admin/mainnet/Mainnet_Unpause_Deposits.s.sol new file mode 100644 index 000000000..8384613db --- /dev/null +++ b/script/admin/mainnet/Mainnet_Unpause_Deposits.s.sol @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "../../utils/ExistingDeploymentParser.sol"; +import "../../utils/TimelockEncoding.sol"; + +// forge script script/admin/mainnet/Mainnet_Unpause_Deposits.s.sol:Mainnet_Unpause_Deposits --fork-url $RPC_MAINNET -vvvv +contract Mainnet_Unpause_Deposits is ExistingDeploymentParser, TimelockEncoding { + Vm cheats = Vm(HEVM_ADDRESS); + + // Tues Apr 16 2024 12:00:00 GMT-0700 (Pacific Daylight Time) + uint256 timelockEta = 1713250800; + + function run() external virtual { + _parseDeployedContracts("script/output/mainnet/M1_deployment_mainnet_2023_6_9.json"); + + bytes memory final_calldata_to_executor_multisig = encodeForExecutor({ + // call to executor will be from the timelock + from: timelock, + // performing single pause operation + to: address(strategyManager), + // value to send in tx + value: 0, + // calldata for the operation + data: abi.encodeWithSelector(Pausable.unpause.selector, 0), + // operation type (for performing single operation) + operation: ISafe.Operation.Call + }); + + (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 + require(strategyManager.paused() == 0, "unpausing was not completed correctly"); + } + + 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; + } +} \ No newline at end of file diff --git a/script/configs/devnet/M2_deploy_from_scratch.anvil.config.json b/script/configs/devnet/M2_deploy_from_scratch.anvil.config.json index 2b2b7adbd..0c7961427 100644 --- a/script/configs/devnet/M2_deploy_from_scratch.anvil.config.json +++ b/script/configs/devnet/M2_deploy_from_scratch.anvil.config.json @@ -15,7 +15,6 @@ "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR": "32000000000" }, "eigenPodManager": { - "max_pods": 0, "init_paused_status": 30 }, "delayedWithdrawalRouter": { diff --git a/script/configs/holesky/Holesky_current_deployment.config.json b/script/configs/holesky/Holesky_current_deployment.config.json new file mode 100644 index 000000000..b3cf05dbf --- /dev/null +++ b/script/configs/holesky/Holesky_current_deployment.config.json @@ -0,0 +1,65 @@ +{ + "addresses": { + "avsDirectory": "0x055733000064333CaDDbC92763c58BF0192fFeBf", + "avsDirectoryImplementation": "0xEF5BA995Bc7722fd1e163edF8Dc09375de3d3e3a", + "baseStrategyImplementation": "0xFb83e1D133D0157775eC4F19Ff81478Df1103305", + "beaconOracle": "0x4C116BB629bff7A8373c2378bBd919f8349B8f25", + "delayedWithdrawalRouter": "0x642c646053eaf2254f088e9019ACD73d9AE0FA32", + "delayedWithdrawalRouterImplementation": "0xcE8b8D99773a718423F8040a6e52c06a4ce63407", + "delegationManager": "0xA44151489861Fe9e3055d95adC98FbD462B948e7", + "delegationManagerImplementation": "0x83f8F8f0BB125F7870F6bfCf76853f874C330D76", + "eigenLayerPauserReg": "0x85Ef7299F8311B25642679edBF02B62FA2212F06", + "eigenLayerProxyAdmin": "0xDB023566064246399b4AE851197a97729C93A6cf", + "eigenPodBeacon": "0x7261C2bd75a7ACE1762f6d7FAe8F63215581832D", + "eigenPodImplementation": "0xe98f9298344527608A1BCC23907B8145F9Cb641c", + "eigenPodManager": "0x30770d7E3e71112d7A6b7259542D1f680a70e315", + "eigenPodManagerImplementation": "0x5265C162f7d5F3fE3175a78828ab16bf5E324a7B", + "emptyContract": "0x9690d52B1Ce155DB2ec5eCbF5a262ccCc7B3A6D2", + "slasher": "0xcAe751b75833ef09627549868A04E32679386e7C", + "slasherImplementation": "0x99715D255E34a39bE9943b82F281CA734bcF345A", + "strategies": { + "WETH": "0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9", + "rETH": "0x3A8fBdf9e77DFc25d09741f51d3E181b25d0c4E0", + "stETH": "0x7D704507b76571a51d9caE8AdDAbBFd0ba0e63d3", + "lsETH": "0x05037A81BD7B4C9E0F7B430f1F2A22c31a2FD943", + "frxETH": "0x15F70a41Afe34020B3B16079010D3e88c4A85daf", + "ETHx": "0x31B6F59e1627cEfC9fA174aD03859fC337666af7", + "osETH": "0x46281E3B7fDcACdBa44CADf069a94a588Fd4C6Ef", + "cbETH": "0x70EB4D3c164a6B4A5f908D4FBb5a9cAfFb66bAB6" + }, + "strategyAddresses": [ + "0x3A8fBdf9e77DFc25d09741f51d3E181b25d0c4E0", + "0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9", + "0x7D704507b76571a51d9caE8AdDAbBFd0ba0e63d3", + "0x05037A81BD7B4C9E0F7B430f1F2A22c31a2FD943", + "0x15F70a41Afe34020B3B16079010D3e88c4A85daf", + "0x31B6F59e1627cEfC9fA174aD03859fC337666af7", + "0x46281E3B7fDcACdBa44CADf069a94a588Fd4C6Ef", + "0x70EB4D3c164a6B4A5f908D4FBb5a9cAfFb66bAB6" + ], + "strategyManager": "0xdfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6", + "strategyManagerImplementation": "0x59f766A603C53f3AC8Be43bBe158c1519b193a18", + "token": { + "tokenProxyAdmin": "0x67482666771e82C9a73BB9e9A22B2B597f448BBf", + "EIGEN": "0x3B78576F7D6837500bA3De27A60c7f594934027E", + "bEIGEN": "0x275cCf9Be51f4a6C94aBa6114cdf2a4c45B9cb27", + "EIGENImpl": "0x083bC9e0DCF2C3e13E24686e5202232995578c5a", + "bEIGENImpl": "0x4500927874Ad41538c1bEF2F5278E7a86DF6bce8", + "eigenStrategy": "0x43252609bff8a13dFe5e057097f2f45A24387a84", + "eigenStrategyImpl": "0x94650e09a471CEF96e7966cabf26718FBf352697" + } + }, + "numStrategies": 8, + "chainInfo": { + "chainId": 17000, + "deploymentBlock": 1167041 + }, + "parameters": { + "communityMultisig": "0xCb8d2f9e55Bc7B1FA9d089f9aC80C583D2BDD5F7", + "executorMultisig": "0x28Ade60640fdBDb2609D8d8734D1b5cBeFc0C348", + "operationsMultisig": "0xfaEF7338b7490b9E272d80A1a39f4657cAf2b97d", + "pauserMultisig": "0x53410249ec7d3a3F9F1ba3912D50D6A3Df6d10A7", + "timelock": "0xcF19CE0561052a7A7Ff21156730285997B350A7D" + } + +} diff --git a/script/configs/holesky/M2_deploy_from_scratch.holesky.config.json b/script/configs/holesky/M2_deploy_from_scratch.holesky.config.json index 672712912..b0cdcc42c 100644 --- a/script/configs/holesky/M2_deploy_from_scratch.holesky.config.json +++ b/script/configs/holesky/M2_deploy_from_scratch.holesky.config.json @@ -46,7 +46,7 @@ "init_paused_status": 0 }, "eigenPod": { - "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR": 32000000000000000000, + "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR": 32000000000, "GENESIS_TIME": 1695902400 }, "eigenPodManager": { diff --git a/script/configs/mainnet/M2_mainnet_upgrade.config.json b/script/configs/mainnet/M2_mainnet_upgrade.config.json new file mode 100644 index 000000000..744672fac --- /dev/null +++ b/script/configs/mainnet/M2_mainnet_upgrade.config.json @@ -0,0 +1,46 @@ +{ + "chainInfo": { + "chainId": 1 + }, + "multisig_addresses": { + "communityMultisig": "0xFEA47018D632A77bA579846c840d5706705Dc598", + "executorMultisig": "0x369e6F597e22EaB55fFb173C6d9cD234BD699111", + "operationsMultisig": "0xBE1685C81aA44FF9FB319dD389addd9374383e90", + "pauserMultisig": "0x5050389572f2d220ad927CcbeA0D406831012390", + "timelock": "0xA6Db1A8C5a981d1536266D2a393c5F8dDb210EAF" + }, + "strategies": { + "numStrategies": 0, + "MAX_PER_DEPOSIT": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "MAX_TOTAL_DEPOSITS": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "strategiesToDeploy": [] + }, + "strategyManager": { + "init_strategy_whitelister": "0xBE1685C81aA44FF9FB319dD389addd9374383e90", + "init_paused_status": 1 + }, + "delegationManager": { + "init_paused_status": 0, + "init_minWithdrawalDelayBlocks": 50400 + }, + "avsDirectory": { + "init_paused_status": 0 + }, + "slasher": { + "init_paused_status": 115792089237316195423570985008687907853269984665640564039457584007913129639935 + }, + "eigenPod": { + "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR": 32000000000, + "GENESIS_TIME": 1606824023 + }, + "eigenPodManager": { + "init_paused_status": 0, + "deneb_fork_timestamp": "1710338135" + }, + "delayedWithdrawalRouter": { + "init_paused_status": 0, + "init_withdrawalDelayBlocks": 50400 + }, + "ethPOSDepositAddress": "0x00000000219ab540356cBB839Cbe05303d7705Fa", + "beaconOracleAddress": "0x343907185b71aDF0eBa9567538314396aa985442" +} \ No newline at end of file diff --git a/script/configs/mainnet/Mainnet_current_deployment.config.json b/script/configs/mainnet/Mainnet_current_deployment.config.json new file mode 100644 index 000000000..3bad379bc --- /dev/null +++ b/script/configs/mainnet/Mainnet_current_deployment.config.json @@ -0,0 +1,72 @@ +{ + "addresses": { + "avsDirectory": "0x0000000000000000000000000000000000000000", + "avsDirectoryImplementation": "0x0000000000000000000000000000000000000000", + "beaconOracle": "0x343907185b71aDF0eBa9567538314396aa985442", + "baseStrategyImplementation": "0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3", + "delayedWithdrawalRouter": "0x7Fe7E9CC0F274d2435AD5d56D5fa73E47F6A23D8", + "delayedWithdrawalRouterImplementation": "0x44Bcb0E01CD0C5060D4Bb1A07b42580EF983E2AF", + "delegationManager": "0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A", + "delegationManagerImplementation": "0xf97E97649Da958d290e84E6D571c32F4b7F475e4", + "eigenLayerPauserReg": "0x0c431C66F4dE941d089625E5B423D00707977060", + "eigenLayerProxyAdmin": "0x8b9566AdA63B64d1E1dcF1418b43fd1433b72444", + "eigenPodBeacon": "0x5a2a4F2F3C18f09179B6703e63D9eDD165909073", + "eigenPodImplementation": "0x5c86e9609fbBc1B754D0FD5a4963Fdf0F5b99dA7", + "eigenPodManager": "0x91E677b07F7AF907ec9a428aafA9fc14a0d3A338", + "eigenPodManagerImplementation": "0xEB86a5c40FdE917E6feC440aBbCDc80E3862e111", + "emptyContract": "0x1f96861fEFa1065a5A96F20Deb6D8DC3ff48F7f9", + "slasher": "0xD92145c07f8Ed1D392c1B88017934E301CC1c3Cd", + "slasherImplementation": "0xef31c292801f24f16479DD83197F1E6AeBb8d6d8", + "strategyManager": "0x858646372CC42E1A627fcE94aa7A7033e7CF075A", + "strategyManagerImplementation": "0x5d25EEf8CfEdaA47d31fE2346726dE1c21e342Fb", + "strategies": { + "stETH": "0x93c4b944D05dfe6df7645A86cd2206016c51564D", + "rETH": "0x1BeE69b7dFFfA4E2d53C2a2Df135C388AD25dCD2", + "cbETH": "0x54945180dB7943c0ed0FEE7EdaB2Bd24620256bc", + "ETHx": "0x9d7eD45EE2E8FC5482fa2428f15C971e6369011d", + "ankrETH": "0x13760F50a9d7377e4F20CB8CF9e4c26586c658ff", + "oETH": "0xa4C637e0F704745D182e4D38cAb7E7485321d059", + "osETH": "0x57ba429517c3473B6d34CA9aCd56c0e735b94c02", + "swETH": "0x0Fe4F44beE93503346A3Ac9EE5A26b130a5796d6", + "wBETH": "0x7CA911E83dabf90C90dD3De5411a10F1A6112184", + "sfrxETH": "0x8CA7A5d6f3acd3A7A8bC468a8CD0FB14B6BD28b6", + "lsETH": "0xAe60d8180437b5C34bB956822ac2710972584473", + "mETH": "0x298aFB19A105D59E74658C4C334Ff360BadE6dd2" + }, + "strategyAddresses": [ + "0x93c4b944D05dfe6df7645A86cd2206016c51564D", + "0x1BeE69b7dFFfA4E2d53C2a2Df135C388AD25dCD2", + "0x54945180dB7943c0ed0FEE7EdaB2Bd24620256bc", + "0x9d7eD45EE2E8FC5482fa2428f15C971e6369011d", + "0x13760F50a9d7377e4F20CB8CF9e4c26586c658ff", + "0xa4C637e0F704745D182e4D38cAb7E7485321d059", + "0x57ba429517c3473B6d34CA9aCd56c0e735b94c02", + "0x0Fe4F44beE93503346A3Ac9EE5A26b130a5796d6", + "0x7CA911E83dabf90C90dD3De5411a10F1A6112184", + "0x8CA7A5d6f3acd3A7A8bC468a8CD0FB14B6BD28b6", + "0xAe60d8180437b5C34bB956822ac2710972584473", + "0x298aFB19A105D59E74658C4C334Ff360BadE6dd2" + ], + "token": { + "tokenProxyAdmin": "0x3f5Ab2D4418d38568705bFd6672630fCC3435CC9", + "EIGEN": "0xec53bf9167f50cdeb3ae105f56099aaab9061f83", + "bEIGEN": "0x83E9115d334D248Ce39a6f36144aEaB5b3456e75", + "EIGENImpl": "0x7ec354c84680112d3cff1544ec1eb19ca583700b", + "bEIGENImpl": "0xB91c69Af3eE022bd0a59Da082945914BFDcEFFE3", + "eigenStrategy": "0xaCB55C530Acdb2849e6d4f36992Cd8c9D50ED8F7", + "eigenStrategyImpl": "0x27e7a3a81741b9fcc5ad7edcbf9f8a72a5c00428" + } + }, + "numStrategies": 12, + "chainInfo": { + "chainId": 1, + "deploymentBlock": 17445559 + }, + "parameters": { + "communityMultisig": "0xFEA47018D632A77bA579846c840d5706705Dc598", + "executorMultisig": "0x369e6F597e22EaB55fFb173C6d9cD234BD699111", + "operationsMultisig": "0xBE1685C81aA44FF9FB319dD389addd9374383e90", + "pauserMultisig": "0x5050389572f2d220ad927CcbeA0D406831012390", + "timelock": "0xA6Db1A8C5a981d1536266D2a393c5F8dDb210EAF" + } +} diff --git a/script/configs/mainnet/Mainnet_current_eigenPods.config.json b/script/configs/mainnet/Mainnet_current_eigenPods.config.json new file mode 100644 index 000000000..73f8dfb28 --- /dev/null +++ b/script/configs/mainnet/Mainnet_current_eigenPods.config.json @@ -0,0 +1,46 @@ +{ + "chainInfo": { + "chainId": 1, + "deploymentBlock": 19285000 + }, + "eigenPods": { + "multiValidators": [ + "0x2641c2ded63a0c640629f5edf1189e0f53c06561", + "0xa345dcb63f984ed1c6d1a8901e0cdbd13b2b4d19", + "0x7fb3d3801883341a02ddd1beb2e624a278e87930", + "0x2f5cb052d397d0b628299a9d4cfc49a5019c4170", + "0xdb678e1056acd7db74507b921a6295c3d586ece9" + ], + "singleValidators": [ + "0xc149531419db43b8cc0d4f2f2ce1700ae46f4c8a", + "0x61340dcc5aef625ded27f21e5068916ad334dad0", + "0x722e2350a55e6b617e66983b4b91d47fe9e9403e", + "0x49213606dc1953eae3b733187fed9e7307edd55b", + "0xa8fc63e72288b79009f7b5952760114513efc700" + ], + "inActive": [ + "0xcbb42f0d320056453c497867119814c59615daeb", + "0xd6e50e7f6250ca26d5d5033138ad09cfe2aaeacb", + "0xe18c1447804563af9647cf8c879f35ced8172c1f", + "0x38de067514c77fed61630bb77ecc24f2adb73ff4", + "0xc3f9bbd74ded6b2bc2ff8b5c693fcbabf2e24efd" + ], + "allEigenPods": [ + "0x2641c2ded63a0c640629f5edf1189e0f53c06561", + "0xa345dcb63f984ed1c6d1a8901e0cdbd13b2b4d19", + "0x7fb3d3801883341a02ddd1beb2e624a278e87930", + "0x2f5cb052d397d0b628299a9d4cfc49a5019c4170", + "0xdb678e1056acd7db74507b921a6295c3d586ece9", + "0xc149531419db43b8cc0d4f2f2ce1700ae46f4c8a", + "0x61340dcc5aef625ded27f21e5068916ad334dad0", + "0x722e2350a55e6b617e66983b4b91d47fe9e9403e", + "0x49213606dc1953eae3b733187fed9e7307edd55b", + "0xa8fc63e72288b79009f7b5952760114513efc700", + "0xcbb42f0d320056453c497867119814c59615daeb", + "0xd6e50e7f6250ca26d5d5033138ad09cfe2aaeacb", + "0xe18c1447804563af9647cf8c879f35ced8172c1f", + "0x38de067514c77fed61630bb77ecc24f2adb73ff4", + "0xc3f9bbd74ded6b2bc2ff8b5c693fcbabf2e24efd" + ] + } +} diff --git a/script/deploy/M2_Deploy_From_Scratch.s.sol b/script/deploy/devnet/M2_Deploy_From_Scratch.s.sol similarity index 95% rename from script/deploy/M2_Deploy_From_Scratch.s.sol rename to script/deploy/devnet/M2_Deploy_From_Scratch.s.sol index 1eea0af3d..7d20193e0 100644 --- a/script/deploy/M2_Deploy_From_Scratch.s.sol +++ b/script/deploy/devnet/M2_Deploy_From_Scratch.s.sol @@ -1,29 +1,29 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +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/interfaces/IBeaconChainOracle.sol"; +import "../../../src/contracts/interfaces/IETHPOSDeposit.sol"; +import "../../../src/contracts/interfaces/IBeaconChainOracle.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/StrategyManager.sol"; +import "../../../src/contracts/core/Slasher.sol"; +import "../../../src/contracts/core/DelegationManager.sol"; +import "../../../src/contracts/core/AVSDirectory.sol"; -import "../../src/contracts/strategies/StrategyBaseTVLLimits.sol"; +import "../../../src/contracts/strategies/StrategyBaseTVLLimits.sol"; -import "../../src/contracts/pods/EigenPod.sol"; -import "../../src/contracts/pods/EigenPodManager.sol"; -import "../../src/contracts/pods/DelayedWithdrawalRouter.sol"; +import "../../../src/contracts/pods/EigenPod.sol"; +import "../../../src/contracts/pods/EigenPodManager.sol"; +import "../../../src/contracts/pods/DelayedWithdrawalRouter.sol"; -import "../../src/contracts/permissions/PauserRegistry.sol"; +import "../../../src/contracts/permissions/PauserRegistry.sol"; -import "../../src/test/mocks/EmptyContract.sol"; -import "../../src/test/mocks/ETHDepositMock.sol"; +import "../../../src/test/mocks/EmptyContract.sol"; +import "../../../src/test/mocks/ETHDepositMock.sol"; import "forge-std/Script.sol"; import "forge-std/Test.sol"; @@ -87,20 +87,19 @@ contract Deployer_M2 is Script, Test { uint256 DELEGATION_INIT_PAUSED_STATUS; uint256 DELEGATION_WITHDRAWAL_DELAY_BLOCKS; uint256 EIGENPOD_MANAGER_INIT_PAUSED_STATUS; - uint256 EIGENPOD_MANAGER_MAX_PODS; uint256 DELAYED_WITHDRAWAL_ROUTER_INIT_PAUSED_STATUS; // one week in blocks -- 50400 uint32 STRATEGY_MANAGER_INIT_WITHDRAWAL_DELAY_BLOCKS; uint32 DELAYED_WITHDRAWAL_ROUTER_INIT_WITHDRAWAL_DELAY_BLOCKS; - function run(string memory configFile) external { + 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/testing/", configFile))); + deployConfigPath = string(bytes(string.concat("script/configs/devnet/", configFileName))); string memory config_data = vm.readFile(deployConfigPath); // bytes memory parsedData = vm.parseJson(config_data); @@ -108,7 +107,6 @@ contract Deployer_M2 is Script, Test { 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_MAX_PODS = stdJson.readUint(config_data, ".eigenPodManager.max_pods"); EIGENPOD_MANAGER_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".eigenPodManager.init_paused_status"); DELAYED_WITHDRAWAL_ROUTER_INIT_PAUSED_STATUS = stdJson.readUint( config_data, @@ -258,7 +256,6 @@ contract Deployer_M2 is Script, Test { address(eigenPodManagerImplementation), abi.encodeWithSelector( EigenPodManager.initialize.selector, - EIGENPOD_MANAGER_MAX_PODS, IBeaconChainOracle(address(0)), executorMultisig, eigenLayerPauserReg, @@ -392,7 +389,7 @@ contract Deployer_M2 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/M2_from_scratch_deployment_data.json"); + vm.writeJson(finalJson, "script/output/devnet/M2_from_scratch_deployment_data.json"); } function _verifyContractsPointAtOneAnother( @@ -495,7 +492,7 @@ contract Deployer_M2 is Script, Test { 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, "delegation: 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"); diff --git a/script/deploy/goerli/GoerliUpgrade1.s.sol b/script/deploy/goerli/GoerliUpgrade1.s.sol index d5d351c69..45e1258b5 100644 --- a/script/deploy/goerli/GoerliUpgrade1.s.sol +++ b/script/deploy/goerli/GoerliUpgrade1.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; @@ -87,4 +87,4 @@ contract GoerliUpgrade1 is Script, Test { // SlasherImplementation: 0x2f82092969d156da92f0b787525042735fc4774a // EigenPodImplementation: 0x4dd49853a27e3d4a0557876fe225ffce9b6b5d7a } -} \ No newline at end of file +} diff --git a/script/deploy/goerli/GoerliUpgrade2.s.sol b/script/deploy/goerli/GoerliUpgrade2.s.sol index edd98d05b..d643634f1 100644 --- a/script/deploy/goerli/GoerliUpgrade2.s.sol +++ b/script/deploy/goerli/GoerliUpgrade2.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "../../../src/contracts/interfaces/IETHPOSDeposit.sol"; @@ -126,4 +126,4 @@ contract GoerliUpgrade2 is Script, Test { EigenPodManagerImplementation: 0xDA9B60D3dC7adD40C0e35c628561Ff71C13a189f */ } -} \ No newline at end of file +} diff --git a/script/deploy/holesky/Eigen_Strategy_Deploy.s.sol b/script/deploy/holesky/Eigen_Strategy_Deploy.s.sol new file mode 100644 index 000000000..233f158bb --- /dev/null +++ b/script/deploy/holesky/Eigen_Strategy_Deploy.s.sol @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "../../utils/ExistingDeploymentParser.sol"; + +/** + * @notice Script used for the first deployment of Eigen token strategy contracts on Holesky + * forge script script/deploy/holesky/Eigen_Strategy_Deploy.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv + * forge script script/deploy/holesky/Eigen_Strategy_Deploy.s.sol --rpc-url $RPC_HOLESKY --private-key $PRIVATE_KEY --broadcast -vvvv + */ +contract Eigen_Strategy_Deploy is ExistingDeploymentParser { + + function run() external virtual { + _parseDeployedContracts("script/configs/holesky/Holesky_current_deployment.config.json"); + + vm.startBroadcast(); + + _deployStrategy(); + + _setTransferRestrictions(); + + vm.stopBroadcast(); + + _verifyDeployment(); + + emit log_string("====Deployed Contracts===="); + + emit log_named_address("EigenStrategy", address(eigenStrategy)); + emit log_named_address("EigenStrategyImpl", address(eigenStrategyImpl)); + } + + function _deployStrategy() internal { + eigenStrategyImpl = new EigenStrategy(strategyManager); + + eigenStrategy = EigenStrategy( + address( + new TransparentUpgradeableProxy( + address(eigenStrategyImpl), + address(eigenLayerProxyAdmin), + abi.encodeWithSelector( + EigenStrategy.initialize.selector, + EIGEN, + bEIGEN, + eigenLayerPauserReg + ) + ) + ) + ); + } + + function _setTransferRestrictions() internal { + EIGEN.setAllowedFrom(address(eigenStrategy), true); + EIGEN.setAllowedTo(address(eigenStrategy), true); + bEIGEN.setAllowedFrom(address(eigenStrategy), true); + bEIGEN.setAllowedTo(address(eigenStrategy), true); + } + + 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); + + vm.startPrank(msg.sender); + EIGEN.approve(address(strategyManager), type(uint256).max); + strategyManager.depositIntoStrategy(eigenStrategy, EIGEN, 1 ether); + } +} diff --git a/script/deploy/holesky/Eigen_Token_Deploy.s.sol b/script/deploy/holesky/Eigen_Token_Deploy.s.sol new file mode 100644 index 000000000..6ce776682 --- /dev/null +++ b/script/deploy/holesky/Eigen_Token_Deploy.s.sol @@ -0,0 +1,114 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "../../../src/contracts/token/Eigen.sol"; +import "../../../src/contracts/token/BackingEigen.sol"; +import "../../../src/test/mocks/EmptyContract.sol"; + +import "forge-std/Script.sol"; +import "forge-std/Test.sol"; + +/** + * @notice Script used for the first deployment of Eigen token on Holesky + * forge script script/deploy/holesky/Eigen_Token_Deploy.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv + * forge script script/deploy/holesky/Eigen_Token_Deploy.s.sol --rpc-url $RPC_HOLESKY --private-key $PRIVATE_KEY --broadcast -vvvv + */ +contract Eigen_Token_Deploy is Script, Test { + address operationsMultisig = 0xfaEF7338b7490b9E272d80A1a39f4657cAf2b97d; + EmptyContract public emptyContract = EmptyContract(0x9690d52B1Ce155DB2ec5eCbF5a262ccCc7B3A6D2); + + ProxyAdmin public tokenProxyAdmin; + Eigen public EIGENImpl; + Eigen public EIGEN; + BackingEigen public bEIGENImpl; + BackingEigen public bEIGEN; + + uint256 constant TOTAL_SUPPLY = 1673646668284660000000000000; + + function run() external virtual { + vm.startBroadcast(); + + _deployToken(); + + vm.stopBroadcast(); + + _verifyDeployment(); + + emit log_string("====Deployed Contracts===="); + + emit log_named_address("ProxyAdmin", address(tokenProxyAdmin)); + emit log_named_address("EIGEN", address(EIGEN)); + emit log_named_address("bEIGEN", address(bEIGEN)); + emit log_named_address("EIGENImpl", address(EIGENImpl)); + emit log_named_address("bEIGENImpl", address(bEIGENImpl)); + } + + function _deployToken() internal { + // Deploy ProxyAdmin, later set admins for all proxies to be executorMultisig + tokenProxyAdmin = new ProxyAdmin(); + + EIGEN = Eigen( + address(new TransparentUpgradeableProxy(address(emptyContract), address(tokenProxyAdmin), "")) + ); + + bEIGEN = BackingEigen( + address(new TransparentUpgradeableProxy(address(emptyContract), address(tokenProxyAdmin), "")) + ); + + // deploy impls + EIGENImpl = new Eigen(IERC20(address(bEIGEN))); + bEIGENImpl = new BackingEigen(IERC20(address(EIGEN))); + + address[] memory minters = new address[](1); + minters[0] = msg.sender; + + uint256[] memory mintingAllowances = new uint256[](1); + mintingAllowances[0] = TOTAL_SUPPLY; + + uint256[] memory mintAllowedAfters = new uint256[](1); + + // upgrade and initialize proxies + tokenProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(EIGEN))), + address(EIGENImpl), + abi.encodeWithSelector( + Eigen.initialize.selector, + msg.sender, + minters, + mintingAllowances, + mintAllowedAfters + ) + ); + + EIGEN.mint(); + + tokenProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(bEIGEN))), + address(bEIGENImpl), + abi.encodeWithSelector( + BackingEigen.initialize.selector, + msg.sender + ) + ); + + tokenProxyAdmin.transferOwnership(operationsMultisig); + } + + function _verifyDeployment() internal { + require(EIGEN.totalSupply() == TOTAL_SUPPLY, "Eigen_Token_Deploy: total supply mismatch"); + require(bEIGEN.totalSupply() == TOTAL_SUPPLY, "Eigen_Token_Deploy: total supply mismatch"); + + require(bEIGEN.balanceOf(address(EIGEN)) == TOTAL_SUPPLY, "Eigen_Token_Deploy: bEIGEN balance mismatch"); + require(EIGEN.balanceOf(msg.sender) == TOTAL_SUPPLY, "Eigen_Token_Deploy: EIGEN balance mismatch"); + + require(EIGEN.owner() == msg.sender, "Eigen_Token_Deploy: EIGEN owner mismatch"); + require(bEIGEN.owner() == msg.sender, "Eigen_Token_Deploy: bEIGEN owner mismatch"); + + require(tokenProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy(payable(address(EIGEN)))) == address(EIGENImpl), "Eigen_Token_Deploy: EIGEN implementation mismatch"); + require(tokenProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy(payable(address(bEIGEN)))) == address(bEIGENImpl), "Eigen_Token_Deploy: bEIGEN implementation mismatch"); + + require(tokenProxyAdmin.owner() == operationsMultisig, "Eigen_Token_Deploy: ProxyAdmin owner mismatch"); + } +} diff --git a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol index c64331685..626626b49 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.12; 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 be27f3809..d58059955 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.12; import "./M2_Deploy_From_Scratch.s.sol"; diff --git a/script/deploy/mainnet/M1_Deploy.s.sol b/script/deploy/mainnet/M1_Deploy.s.sol index 09548c3d7..48a7db712 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.12; 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 a39eeb544..68f45520b 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.12; 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 new file mode 100644 index 000000000..daa042db5 --- /dev/null +++ b/script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol @@ -0,0 +1,345 @@ +// 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({isInitialDeployment: true}); + _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), + delayedWithdrawalRouter, + eigenPodManager, + EIGENPOD_MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR, + 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 + ); + delayedWithdrawalRouterImplementation = new DelayedWithdrawalRouter(eigenPodManager); + } + + 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) + ); + // Delayed Withdrawal Router + eigenLayerProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(delayedWithdrawalRouter))), + address(delayedWithdrawalRouterImplementation) + ); + + // Second, configure additional settings and paused statuses + delegationManager.setMinWithdrawalDelayBlocks(DELEGATION_MANAGER_MIN_WITHDRAWAL_DELAY_BLOCKS); + delegationManager.unpause(0); + eigenPodManager.unpause(0); + + eigenPodManager.setDenebForkTimestamp(EIGENPOD_MANAGER_DENEB_FORK_TIMESTAMP); + eigenPodManager.updateBeaconChainOracle(beaconOracle); + 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({isInitialDeployment: true}); + _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.activateRestaking(); + 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/output/mainnet/M1_deployment_mainnet_2023_6_9.json b/script/output/mainnet/M1_deployment_mainnet_2023_6_9.json index 0ec016f64..85916bdb1 100644 --- a/script/output/mainnet/M1_deployment_mainnet_2023_6_9.json +++ b/script/output/mainnet/M1_deployment_mainnet_2023_6_9.json @@ -1,10 +1,13 @@ { "addresses": { + "avsDirectory": "0x0000000000000000000000000000000000000000", + "avsDirectoryImplementation": "0x0000000000000000000000000000000000000000", "baseStrategyImplementation": "0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3", + "beaconOracle": "0x0000000000000000000000000000000000000000", "delayedWithdrawalRouter": "0x7Fe7E9CC0F274d2435AD5d56D5fa73E47F6A23D8", "delayedWithdrawalRouterImplementation": "0x44Bcb0E01CD0C5060D4Bb1A07b42580EF983E2AF", - "delegation": "0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A", - "delegationImplementation": "0xf97E97649Da958d290e84E6D571c32F4b7F475e4", + "delegationManager": "0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A", + "delegationManagerImplementation": "0xf97E97649Da958d290e84E6D571c32F4b7F475e4", "eigenLayerPauserReg": "0x0c431C66F4dE941d089625E5B423D00707977060", "eigenLayerProxyAdmin": "0x8b9566AdA63B64d1E1dcF1418b43fd1433b72444", "eigenPodBeacon": "0x5a2a4F2F3C18f09179B6703e63D9eDD165909073", @@ -32,5 +35,6 @@ "operationsMultisig": "0xBE1685C81aA44FF9FB319dD389addd9374383e90", "pauserMultisig": "0x5050389572f2d220ad927CcbeA0D406831012390", "timelock": "0xA6Db1A8C5a981d1536266D2a393c5F8dDb210EAF" - } + }, + "numStrategies": 0 } \ No newline at end of file diff --git a/script/output/mainnet/M2_mainnet_upgrade.output.json b/script/output/mainnet/M2_mainnet_upgrade.output.json new file mode 100644 index 000000000..e9de0f32e --- /dev/null +++ b/script/output/mainnet/M2_mainnet_upgrade.output.json @@ -0,0 +1,35 @@ +{ + "addresses": { + "avsDirectory": "0x135DDa560e946695d6f155dACaFC6f1F25C1F5AF", + "avsDirectoryImplementation": "0xdAbdB3Cd346B7D5F5779b0B614EdE1CC9DcBA5b7", + "baseStrategyImplementation": "0xdfdA04f980bE6A64E3607c95Ca26012Ab9aA46d3", + "beaconOracle": "0x343907185b71aDF0eBa9567538314396aa985442", + "delayedWithdrawalRouter": "0x7Fe7E9CC0F274d2435AD5d56D5fa73E47F6A23D8", + "delayedWithdrawalRouterImplementation": "0x4bB6731B02314d40aBbfFBC4540f508874014226", + "delegationManager": "0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A", + "delegationManagerImplementation": "0x1784BE6401339Fc0Fedf7E9379409f5c1BfE9dda", + "eigenLayerPauserReg": "0x0c431C66F4dE941d089625E5B423D00707977060", + "eigenLayerProxyAdmin": "0x8b9566AdA63B64d1E1dcF1418b43fd1433b72444", + "eigenPodBeacon": "0x5a2a4F2F3C18f09179B6703e63D9eDD165909073", + "eigenPodImplementation": "0x8bA40dA60f0827d027F029aCEE62609F0527a255", + "eigenPodManager": "0x91E677b07F7AF907ec9a428aafA9fc14a0d3A338", + "eigenPodManagerImplementation": "0xe4297e3DaDBc7D99e26a2954820f514CB50C5762", + "emptyContract": "0x1f96861fEFa1065a5A96F20Deb6D8DC3ff48F7f9", + "slasher": "0xD92145c07f8Ed1D392c1B88017934E301CC1c3Cd", + "slasherImplementation": "0xF3234220163a757edf1E11a8a085638D9B236614", + "strategies": "", + "strategyManager": "0x858646372CC42E1A627fcE94aa7A7033e7CF075A", + "strategyManagerImplementation": "0x70f44C13944d49a236E3cD7a94f48f5daB6C619b" + }, + "chainInfo": { + "chainId": 1, + "deploymentBlock": 19492753 + }, + "parameters": { + "communityMultisig": "0xFEA47018D632A77bA579846c840d5706705Dc598", + "executorMultisig": "0x369e6F597e22EaB55fFb173C6d9cD234BD699111", + "operationsMultisig": "0xBE1685C81aA44FF9FB319dD389addd9374383e90", + "pauserMultisig": "0x5050389572f2d220ad927CcbeA0D406831012390", + "timelock": "0xA6Db1A8C5a981d1536266D2a393c5F8dDb210EAF" + } +} \ No newline at end of file diff --git a/script/utils/ExistingDeploymentParser.sol b/script/utils/ExistingDeploymentParser.sol index 06c374897..352b6a9db 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.12; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; @@ -12,6 +12,7 @@ import "../../src/contracts/core/AVSDirectory.sol"; import "../../src/contracts/strategies/StrategyBase.sol"; import "../../src/contracts/strategies/StrategyBaseTVLLimits.sol"; +import "../../src/contracts/strategies/EigenStrategy.sol"; import "../../src/contracts/pods/EigenPod.sol"; import "../../src/contracts/pods/EigenPodManager.sol"; @@ -21,6 +22,9 @@ import "../../src/contracts/permissions/PauserRegistry.sol"; import "../../src/test/mocks/EmptyContract.sol"; +import "../../src/contracts/interfaces/IBackingEigen.sol"; +import "../../src/contracts/interfaces/IEigen.sol"; + import "forge-std/Script.sol"; import "forge-std/Test.sol"; @@ -30,6 +34,12 @@ struct StrategyUnderlyingTokenConfig { string tokenSymbol; } +struct DeployedEigenPods { + address[] multiValidatorPods; + address[] singleValidatorPods; + address[] inActivePods; +} + contract ExistingDeploymentParser is Script, Test { // EigenLayer Contracts ProxyAdmin public eigenLayerProxyAdmin; @@ -51,26 +61,37 @@ contract ExistingDeploymentParser is Script, Test { EigenPod public eigenPodImplementation; StrategyBase public baseStrategyImplementation; + // Token + ProxyAdmin public tokenProxyAdmin; + IEigen public EIGEN; + IEigen public EIGENImpl; + IBackingEigen public bEIGEN; + IBackingEigen public bEIGENImpl; + EigenStrategy public eigenStrategy; + EigenStrategy public eigenStrategyImpl; + + // EigenPods deployed + address[] public multiValidatorPods; + address[] public singleValidatorPods; + address[] public inActivePods; + // All eigenpods is just single array list of above eigenPods + address[] public allEigenPods; + EmptyContract public emptyContract; address executorMultisig; address operationsMultisig; address communityMultisig; address pauserMultisig; + address timelock; // strategies deployed + uint256 numStrategiesDeployed; StrategyBase[] public deployedStrategyArray; // Strategies to Deploy uint256 numStrategiesToDeploy; StrategyUnderlyingTokenConfig[] public strategiesToDeploy; - // the ETH2 deposit contract -- if not on mainnet, we deploy a mock as stand-in - // IETHPOSDeposit public ethPOSDeposit; - - // // IMMUTABLES TO SET - // uint64 MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR; - // uint64 GOERLI_GENESIS_TIME = 1616508000; - /// @notice Initialization Params for first initial deployment scripts // StrategyManager uint256 STRATEGY_MANAGER_INIT_PAUSED_STATUS; @@ -116,6 +137,7 @@ contract ExistingDeploymentParser is Script, Test { operationsMultisig = stdJson.readAddress(existingDeploymentData, ".parameters.operationsMultisig"); communityMultisig = stdJson.readAddress(existingDeploymentData, ".parameters.communityMultisig"); pauserMultisig = stdJson.readAddress(existingDeploymentData, ".parameters.pauserMultisig"); + timelock = stdJson.readAddress(existingDeploymentData, ".parameters.timelock"); eigenLayerProxyAdmin = ProxyAdmin( stdJson.readAddress(existingDeploymentData, ".addresses.eigenLayerProxyAdmin") @@ -127,9 +149,9 @@ contract ExistingDeploymentParser is Script, Test { slasherImplementation = Slasher( stdJson.readAddress(existingDeploymentData, ".addresses.slasherImplementation") ); - delegationManager = DelegationManager(stdJson.readAddress(existingDeploymentData, ".addresses.delegation")); + delegationManager = DelegationManager(stdJson.readAddress(existingDeploymentData, ".addresses.delegationManager")); delegationManagerImplementation = DelegationManager( - stdJson.readAddress(existingDeploymentData, ".addresses.delegationImplementation") + stdJson.readAddress(existingDeploymentData, ".addresses.delegationManagerImplementation") ); avsDirectory = AVSDirectory(stdJson.readAddress(existingDeploymentData, ".addresses.avsDirectory")); avsDirectoryImplementation = AVSDirectory( @@ -150,7 +172,7 @@ contract ExistingDeploymentParser is Script, Test { stdJson.readAddress(existingDeploymentData, ".addresses.delayedWithdrawalRouterImplementation") ); beaconOracle = IBeaconChainOracle( - stdJson.readAddress(existingDeploymentData, ".addresses.beaconOracleAddress") + stdJson.readAddress(existingDeploymentData, ".addresses.beaconOracle") ); eigenPodBeacon = UpgradeableBeacon(stdJson.readAddress(existingDeploymentData, ".addresses.eigenPodBeacon")); eigenPodImplementation = EigenPod( @@ -161,20 +183,46 @@ contract ExistingDeploymentParser is Script, Test { ); emptyContract = EmptyContract(stdJson.readAddress(existingDeploymentData, ".addresses.emptyContract")); - /* - commented out -- needs JSON formatting of the form: - strategies": [ - {"WETH": "0x7CA911E83dabf90C90dD3De5411a10F1A6112184"}, - {"rETH": "0x879944A8cB437a5f8061361f82A6d4EED59070b5"}, - {"tsETH": "0xcFA9da720682bC4BCb55116675f16F503093ba13"}, - {"wstETH": "0x13760F50a9d7377e4F20CB8CF9e4c26586c658ff"}] - // load strategy list - bytes memory strategyListRaw = stdJson.parseRaw(existingDeploymentData, ".addresses.strategies"); - address[] memory strategyList = abi.decode(strategyListRaw, (address[])); - for (uint256 i = 0; i < strategyList.length; ++i) { - deployedStrategyArray.push(StrategyBase(strategyList[i])); + // Strategies Deployed, load strategy list + numStrategiesDeployed = stdJson.readUint(existingDeploymentData, ".numStrategies"); + for (uint256 i = 0; i < numStrategiesDeployed; ++i) { + // Form the key for the current element + string memory key = string.concat(".addresses.strategyAddresses[", vm.toString(i), "]"); + + // Use the key and parse the strategy address + address strategyAddress = abi.decode(stdJson.parseRaw(existingDeploymentData, key), (address)); + deployedStrategyArray.push(StrategyBase(strategyAddress)); } - */ + + // token + tokenProxyAdmin = ProxyAdmin(stdJson.readAddress(existingDeploymentData, ".addresses.token.tokenProxyAdmin")); + EIGEN = IEigen(stdJson.readAddress(existingDeploymentData, ".addresses.token.EIGEN")); + EIGENImpl = IEigen(stdJson.readAddress(existingDeploymentData, ".addresses.token.EIGENImpl")); + bEIGEN = IBackingEigen(stdJson.readAddress(existingDeploymentData, ".addresses.token.bEIGEN")); + bEIGENImpl = IBackingEigen(stdJson.readAddress(existingDeploymentData, ".addresses.token.bEIGENImpl")); + eigenStrategy = EigenStrategy(stdJson.readAddress(existingDeploymentData, ".addresses.token.eigenStrategy")); + eigenStrategyImpl = EigenStrategy(stdJson.readAddress(existingDeploymentData, ".addresses.token.eigenStrategyImpl")); + } + + function _parseDeployedEigenPods(string memory existingDeploymentInfoPath) internal returns (DeployedEigenPods memory) { + uint256 currentChainId = block.chainid; + + // READ JSON CONFIG DATA + string memory existingDeploymentData = vm.readFile(existingDeploymentInfoPath); + + // check that the chainID matches the one in the config + uint256 configChainId = stdJson.readUint(existingDeploymentData, ".chainInfo.chainId"); + require(configChainId == currentChainId, "You are on the wrong chain for this config"); + + multiValidatorPods = stdJson.readAddressArray(existingDeploymentData, ".eigenPods.multiValidatorPods"); + singleValidatorPods = stdJson.readAddressArray(existingDeploymentData, ".eigenPods.singleValidatorPods"); + inActivePods = stdJson.readAddressArray(existingDeploymentData, ".eigenPods.inActivePods"); + allEigenPods = stdJson.readAddressArray(existingDeploymentData, ".eigenPods.allEigenPods"); + return DeployedEigenPods({ + multiValidatorPods: multiValidatorPods, + singleValidatorPods: singleValidatorPods, + inActivePods: inActivePods + }); } /// @notice use for deploying a new set of EigenLayer contracts @@ -475,8 +523,35 @@ contract ExistingDeploymentParser is Script, Test { eigenPodManager.paused() == EIGENPOD_MANAGER_INIT_PAUSED_STATUS, "eigenPodManager: init paused status set incorrectly" ); + require( + eigenPodManager.denebForkTimestamp() == EIGENPOD_MANAGER_DENEB_FORK_TIMESTAMP, + "eigenPodManager: denebForkTimestamp not set correctly" + ); + require( + eigenPodManager.beaconChainOracle() == beaconOracle, + "eigenPodManager: beaconChainOracle not set correctly" + ); + require( + eigenPodManager.ethPOS() == IETHPOSDeposit(ETHPOSDepositAddress), + "eigenPodManager: ethPOS not set correctly" + ); // EigenPodBeacon require(eigenPodBeacon.owner() == executorMultisig, "eigenPodBeacon: owner not set correctly"); + // EigenPodImplementation + require( + eigenPodImplementation.GENESIS_TIME() == EIGENPOD_GENESIS_TIME, + "eigenPodImplementation: GENESIS TIME not set correctly" + ); + require( + eigenPodImplementation.MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR() == + EIGENPOD_MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR + && EIGENPOD_MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR % 1 gwei == 0, + "eigenPodImplementation: MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR not set correctly" + ); + require( + eigenPodImplementation.ethPOS() == IETHPOSDeposit(ETHPOSDepositAddress), + "eigenPodImplementation: ethPOS not set correctly" + ); // DelayedWithdrawalRouter require( delayedWithdrawalRouter.pauserRegistry() == eigenLayerPauserReg, @@ -625,6 +700,7 @@ contract ExistingDeploymentParser is Script, Test { vm.serializeAddress(parameters, "operationsMultisig", operationsMultisig); vm.serializeAddress(parameters, "communityMultisig", communityMultisig); vm.serializeAddress(parameters, "pauserMultisig", pauserMultisig); + vm.serializeAddress(parameters, "timelock", timelock); string memory parameters_output = vm.serializeAddress(parameters, "operationsMultisig", operationsMultisig); string memory chain_info = "chainInfo"; diff --git a/script/utils/Multisend.sol b/script/utils/Multisend.sol new file mode 100644 index 000000000..72637959a --- /dev/null +++ b/script/utils/Multisend.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity >=0.7.0 <0.9.0; + +/// @title Multi Send Call Only - Allows to batch multiple transactions into one, but only calls +/// @author Stefan George - +/// @author Richard Meissner - +/// @notice The guard logic is not required here as this contract doesn't support nested delegate calls +contract MultiSendCallOnly { + /// @dev Sends multiple transactions and reverts all if one fails. + /// @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of + /// operation has to be uint8(0) in this version (=> 1 byte), + /// to as a address (=> 20 bytes), + /// value as a uint256 (=> 32 bytes), + /// data length as a uint256 (=> 32 bytes), + /// data as bytes. + /// see abi.encodePacked for more information on packed encoding + /// @notice The code is for most part the same as the normal MultiSend (to keep compatibility), + /// but reverts if a transaction tries to use a delegatecall. + /// @notice This method is payable as delegatecalls keep the msg.value from the previous call + /// If the calling method (e.g. execTransaction) received ETH this would revert otherwise + function multiSend(bytes memory transactions) public payable { + // solhint-disable-next-line no-inline-assembly + assembly { + let length := mload(transactions) + let i := 0x20 + for { + // Pre block is not used in "while mode" + } lt(i, length) { + // Post block is not used in "while mode" + } { + // First byte of the data is the operation. + // We shift by 248 bits (256 - 8 [operation byte]) it right since mload will always load 32 bytes (a word). + // This will also zero out unused data. + let operation := shr(0xf8, mload(add(transactions, i))) + // We offset the load address by 1 byte (operation byte) + // We shift it right by 96 bits (256 - 160 [20 address bytes]) to right-align the data and zero out unused data. + let to := shr(0x60, mload(add(transactions, add(i, 0x01)))) + // We offset the load address by 21 byte (operation byte + 20 address bytes) + let value := mload(add(transactions, add(i, 0x15))) + // We offset the load address by 53 byte (operation byte + 20 address bytes + 32 value bytes) + let dataLength := mload(add(transactions, add(i, 0x35))) + // We offset the load address by 85 byte (operation byte + 20 address bytes + 32 value bytes + 32 data length bytes) + let data := add(transactions, add(i, 0x55)) + let success := 0 + switch operation + case 0 { + success := call(gas(), to, value, data, dataLength, 0, 0) + } + // This version does not allow delegatecalls + case 1 { + revert(0, 0) + } + if eq(success, 0) { + revert(0, 0) + } + // Next entry starts at 85 byte + data length + i := add(i, add(0x55, dataLength)) + } + } + } +} \ No newline at end of file diff --git a/script/utils/TimelockEncoding.sol b/script/utils/TimelockEncoding.sol new file mode 100644 index 000000000..cbb0c8da3 --- /dev/null +++ b/script/utils/TimelockEncoding.sol @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "forge-std/Script.sol"; +import "forge-std/Test.sol"; + +import "./TxEncodingInterfaces.sol"; + +contract TimelockEncoding is Test { + // CALLDATA FOR CALL FROM TIMELOCK TO EXECUTOR MULTISIG + uint256 safeTxGas = 0; + uint256 baseGas = 0; + uint256 gasPrice = 0; + address gasToken = address(uint160(0)); + address payable refundReceiver = payable(address(uint160(0))); + + // CALDATA FOR CALL TO TIMELOCK + uint256 timelockValue = 0; + // empty string, just encode all the data in 'timelockData' + string timelockSignature; + + // appropriate address on mainnet, Holesky, and many other chains + address multiSendCallOnly = 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D; + + function encodeForTimelock( + address to, + uint256 value, + bytes memory data, + uint256 timelockEta + ) public returns (bytes memory calldata_to_timelock_queuing_action, bytes memory calldata_to_timelock_executing_action) { + calldata_to_timelock_queuing_action = abi.encodeWithSelector(ITimelock.queueTransaction.selector, + to, + value, + timelockSignature, + data, + timelockEta + ); + + emit log_named_bytes("calldata_to_timelock_queuing_action", calldata_to_timelock_queuing_action); + + calldata_to_timelock_executing_action = abi.encodeWithSelector(ITimelock.executeTransaction.selector, + to, + value, + timelockSignature, + data, + timelockEta + ); + + emit log_named_bytes("calldata_to_timelock_executing_action", calldata_to_timelock_executing_action); + + return (calldata_to_timelock_queuing_action, calldata_to_timelock_executing_action); + } + + function encodeForExecutor( + address from, + address to, + uint256 value, + bytes memory data, + ISafe.Operation operation + ) public returns (bytes memory) { + // encode the "signature" required by the Safe + bytes1 v = bytes1(uint8(1)); + bytes32 r = bytes32(uint256(uint160(from))); + bytes32 s; + bytes memory sig = abi.encodePacked(r,s,v); + emit log_named_bytes("sig", sig); + + bytes memory final_calldata_to_executor_multisig = abi.encodeWithSelector(ISafe.execTransaction.selector, + to, + value, + data, + operation, + safeTxGas, + baseGas, + gasPrice, + gasToken, + refundReceiver, + sig + ); + + emit log_named_bytes("final_calldata_to_executor_multisig", final_calldata_to_executor_multisig); + + return final_calldata_to_executor_multisig; + } + + struct Tx { + address to; + uint256 value; + bytes data; + } + + function encodeMultisendTxs(Tx[] memory txs) public pure returns (bytes memory) { + bytes memory ret = new bytes(0); + for (uint256 i = 0; i < txs.length; i++) { + ret = abi.encodePacked( + ret, + abi.encodePacked( + uint8(0), + txs[i].to, + txs[i].value, + uint256(txs[i].data.length), + txs[i].data + ) + ); + } + return ret; + } +} diff --git a/script/utils/TxEncodingInterfaces.sol b/script/utils/TxEncodingInterfaces.sol new file mode 100644 index 000000000..a967da943 --- /dev/null +++ b/script/utils/TxEncodingInterfaces.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: LGPL AND BSD 3-Clause +pragma solidity >=0.5.0; + +// based on https://github.com/safe-global/safe-smart-account/blob/v1.3.0/contracts/GnosisSafe.sol +interface ISafe { + function execTransaction( + address to, + uint256 value, + bytes calldata data, + uint8 operation, + uint256 safeTxGas, + uint256 baseGas, + uint256 gasPrice, + address gasToken, + address payable refundReceiver, + bytes memory signatures + ) external; + + enum Operation {Call, DelegateCall} +} + +// based on https://github.com/compound-finance/compound-protocol/blob/master/contracts/Timelock.sol +interface ITimelock { + function queueTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) external returns (bytes32); + function executeTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) external payable returns (bytes memory); + function queuedTransactions(bytes32) external view returns (bool); +} + diff --git a/script/whitelist/Staker.sol b/script/whitelist/Staker.sol index 026f9a891..f353610ce 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.12; import "../../src/contracts/interfaces/IStrategyManager.sol"; import "../../src/contracts/interfaces/IStrategy.sol"; @@ -48,4 +48,4 @@ contract Staker is Ownable { } -} \ No newline at end of file +} diff --git a/script/whitelist/delegationFaucet/DelegationFaucet.sol b/script/whitelist/delegationFaucet/DelegationFaucet.sol index fa51c65b9..327e8e678 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.12; 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 e5e36e600..fac0e543c 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.12; import "src/contracts/interfaces/IStrategyManager.sol"; diff --git a/script/whitelist/delegationFaucet/DeployDelegationFaucet.sol b/script/whitelist/delegationFaucet/DeployDelegationFaucet.sol index ace53fa21..db458e99d 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.12; import "src/contracts/interfaces/IDelegationManager.sol"; import "src/contracts/interfaces/IStrategyManager.sol"; diff --git a/scripts/compile-bindings.sh b/scripts/compile-bindings.sh new file mode 100755 index 000000000..bb7ab577c --- /dev/null +++ b/scripts/compile-bindings.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +BINDING_DIR=./pkg/bindings +JSON_DIR=./out + +function create_binding { + contract_name=$1 + + mkdir -p $BINDING_DIR/${contract_name} + + contract_json_path="${JSON_DIR}/${contract_name}.sol/${contract_name}.json" + + binding_out_dir="${BINDING_DIR}/${contract_name}" + mkdir -p $binding_out_dir || true + + cat $contract_json_path | jq -r '.abi' > $binding_out_dir/tmp.abi + cat $contract_json_path | jq -r '.bytecode.object' > $binding_out_dir/tmp.bin + + abigen \ + --bin=$binding_out_dir/tmp.bin \ + --abi=$binding_out_dir/tmp.abi \ + --pkg="${contract_name}" \ + --out=$BINDING_DIR/$contract_name/binding.go +} + +contracts=$(find src/contracts -type f -name "*.sol" ) +IFS=$'\n' + +for contract_name in $contracts; do + contract_name=$(basename $contract_name .sol) + create_binding $contract_name +done diff --git a/scripts/pre-commit.sh b/scripts/pre-commit.sh new file mode 100755 index 000000000..e844c4f76 --- /dev/null +++ b/scripts/pre-commit.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +make bindings diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index 0391aac6b..57844689f 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.12; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; @@ -180,4 +180,4 @@ contract AVSDirectory is function _calculateDomainSeparator() internal view returns (bytes32) { return keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes("EigenLayer")), block.chainid, address(this))); } -} \ No newline at end of file +} diff --git a/src/contracts/core/AVSDirectoryStorage.sol b/src/contracts/core/AVSDirectoryStorage.sol index ec536f76b..993025c15 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.12; import "../interfaces/IAVSDirectory.sol"; import "../interfaces/IStrategyManager.sol"; diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 6a54bb3d2..ac14e6879 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.12; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; diff --git a/src/contracts/core/DelegationManagerStorage.sol b/src/contracts/core/DelegationManagerStorage.sol index cea995b3d..8a86af6d3 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.12; import "../interfaces/IStrategyManager.sol"; import "../interfaces/IDelegationManager.sol"; diff --git a/src/contracts/core/Slasher.sol b/src/contracts/core/Slasher.sol index b4ad83dd7..359383e84 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.12; import "../interfaces/ISlasher.sol"; import "../interfaces/IDelegationManager.sol"; @@ -99,4 +99,4 @@ contract Slasher is Initializable, OwnableUpgradeable, ISlasher, Pausable { address ) external view returns (MiddlewareDetails memory) {} -} \ No newline at end of file +} diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index b0ec52d25..05db17560 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.12; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; diff --git a/src/contracts/core/StrategyManagerStorage.sol b/src/contracts/core/StrategyManagerStorage.sol index 568e6770b..b6c92a557 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.12; import "../interfaces/IStrategyManager.sol"; import "../interfaces/IStrategy.sol"; diff --git a/src/contracts/interfaces/IBackingEigen.sol b/src/contracts/interfaces/IBackingEigen.sol new file mode 100644 index 000000000..c7b2ba1bd --- /dev/null +++ b/src/contracts/interfaces/IBackingEigen.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +interface IBackingEigen is IERC20 { + + /** + * @notice This function allows the owner to set the allowedFrom status of an address + * @param from the address whose allowedFrom status is being set + * @param isAllowedFrom the new allowedFrom status + */ + function setAllowedFrom(address from, bool isAllowedFrom) external; + + /** + * @notice This function allows the owner to set the allowedTo status of an address + * @param to the address whose allowedTo status is being set + * @param isAllowedTo the new allowedTo status + */ + function setAllowedTo(address to, bool isAllowedTo) external; + + /** + * @notice Allows the owner to disable transfer restrictions + */ + function disableTransferRestrictions() external; + + + /** + * @dev Clock used for flagging checkpoints. Has been overridden to implement timestamp based + * checkpoints (and voting). + */ + function clock() external view returns (uint48); + + /** + * @dev Machine-readable description of the clock as specified in EIP-6372. + * Has been overridden to inform callers that this contract uses timestamps instead of block numbers, to match `clock()` + */ + // solhint-disable-next-line func-name-mixedcase + function CLOCK_MODE() external pure returns (string memory); +} \ No newline at end of file diff --git a/src/contracts/interfaces/IEigen.sol b/src/contracts/interfaces/IEigen.sol new file mode 100644 index 000000000..a48dd9d13 --- /dev/null +++ b/src/contracts/interfaces/IEigen.sol @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +interface IEigen is IERC20 { + + /** + * @notice This function allows the owner to set the allowedFrom status of an address + * @param from the address whose allowedFrom status is being set + * @param isAllowedFrom the new allowedFrom status + */ + function setAllowedFrom(address from, bool isAllowedFrom) external; + + /** + * @notice This function allows the owner to set the allowedTo status of an address + * @param to the address whose allowedTo status is being set + * @param isAllowedTo the new allowedTo status + */ + function setAllowedTo(address to, bool isAllowedTo) external; + + /** + * @notice Allows the owner to disable transfer restrictions + */ + function disableTransferRestrictions() external; + + /** + * @notice This function allows minter to mint tokens + */ + function mint() external; + + /** + * @notice This function allows bEIGEN holders to wrap their tokens into Eigen + */ + function wrap(uint256 amount) external; + + /** + * @notice This function allows Eigen holders to unwrap their tokens into bEIGEN + */ + function unwrap(uint256 amount) external; + + /** + * @dev Clock used for flagging checkpoints. Has been overridden to implement timestamp based + * checkpoints (and voting). + */ + function clock() external view returns (uint48); + + /** + * @dev Machine-readable description of the clock as specified in EIP-6372. + * Has been overridden to inform callers that this contract uses timestamps instead of block numbers, to match `clock()` + */ + // solhint-disable-next-line func-name-mixedcase + function CLOCK_MODE() external pure returns (string memory); +} \ No newline at end of file diff --git a/src/contracts/interfaces/ISocketUpdater.sol b/src/contracts/interfaces/ISocketUpdater.sol index 7c3de7a21..8f28465e1 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.12; /** * @title Interface for an `ISocketUpdater` where operators can update their sockets. diff --git a/src/contracts/libraries/EIP1271SignatureUtils.sol b/src/contracts/libraries/EIP1271SignatureUtils.sol index 173827b20..a4452f91e 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.12; import "@openzeppelin/contracts/interfaces/IERC1271.sol"; import "@openzeppelin/contracts/utils/Address.sol"; diff --git a/src/contracts/libraries/StructuredLinkedList.sol b/src/contracts/libraries/StructuredLinkedList.sol index 744e2d6c5..29410656f 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.12; /** * @title StructuredLinkedList diff --git a/src/contracts/permissions/Pausable.sol b/src/contracts/permissions/Pausable.sol index 3c5b9b9b3..76996420b 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.12; import "../interfaces/IPausable.sol"; diff --git a/src/contracts/permissions/PauserRegistry.sol b/src/contracts/permissions/PauserRegistry.sol index 57376f23c..1058784ec 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.12; import "../interfaces/IPauserRegistry.sol"; diff --git a/src/contracts/pods/DelayedWithdrawalRouter.sol b/src/contracts/pods/DelayedWithdrawalRouter.sol index 9de2eb093..9e57cfa45 100644 --- a/src/contracts/pods/DelayedWithdrawalRouter.sol +++ b/src/contracts/pods/DelayedWithdrawalRouter.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; diff --git a/src/contracts/pods/EigenPod.sol b/src/contracts/pods/EigenPod.sol index 39bc286a0..2532b9381 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.12; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; @@ -118,11 +118,11 @@ contract EigenPod is IEigenPod, Initializable, ReentrancyGuardUpgradeable, Eigen _; } - /// @notice Checks that `timestamp` is strictly greater than the value stored in `mostRecentWithdrawalTimestamp` + /// @notice Checks that `timestamp` is greater than or equal to the value stored in `mostRecentWithdrawalTimestamp` modifier proofIsForValidTimestamp(uint64 timestamp) { require( - timestamp > mostRecentWithdrawalTimestamp, - "EigenPod.proofIsForValidTimestamp: beacon chain proof must be for timestamp after mostRecentWithdrawalTimestamp" + timestamp >= mostRecentWithdrawalTimestamp, + "EigenPod.proofIsForValidTimestamp: beacon chain proof must be at or after mostRecentWithdrawalTimestamp" ); _; } diff --git a/src/contracts/pods/EigenPodManager.sol b/src/contracts/pods/EigenPodManager.sol index ce42de544..f28f9fc7b 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.12; import "@openzeppelin/contracts/utils/Create2.sol"; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; @@ -336,4 +336,4 @@ contract EigenPodManager is return timestamp; } } -} \ No newline at end of file +} diff --git a/src/contracts/pods/EigenPodManagerStorage.sol b/src/contracts/pods/EigenPodManagerStorage.sol index f637f060e..39c98f2c2 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.12; import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol"; diff --git a/src/contracts/pods/EigenPodPausingConstants.sol b/src/contracts/pods/EigenPodPausingConstants.sol index 60a8a71e1..f7eca3ece 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.12; /** * @title Constants shared between 'EigenPod' and 'EigenPodManager' contracts. diff --git a/src/contracts/strategies/EigenStrategy.sol b/src/contracts/strategies/EigenStrategy.sol new file mode 100644 index 000000000..51facfafd --- /dev/null +++ b/src/contracts/strategies/EigenStrategy.sol @@ -0,0 +1,105 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +// 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"; +import "../interfaces/IStrategyManager.sol"; +import "../strategies/StrategyBase.sol"; +import "../interfaces/IEigen.sol"; + +/** + * @title Eigen Strategy implementation of `IStrategy` interface, designed to be inherited from by more complex strategies. + * @author Layr Labs, Inc. + * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service + * @dev Note that this EigenStrategy contract is designed to be compatible with both bEIGEN and EIGEN tokens. It functions exactly the same + * as the `StrategyBase` contract if bEIGEN were the underlying token, but also allows for depositing and withdrawing EIGEN tokens. This is + * achieved by unwrapping EIGEN into bEIGEN upon deposit, and wrapping bEIGEN into EIGEN upon withdrawal. Deposits and withdrawals with bEIGEN + * does not perform and wrapping or unwrapping. + * @notice This contract functions similarly to an ERC4626 vault, only without issuing a token. + * To mitigate against the common "inflation attack" vector, we have chosen to use the 'virtual shares' mitigation route, + * similar to [OpenZeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC4626.sol). + * We acknowledge that this mitigation has the known downside of the virtual shares causing some losses to users, which are pronounced + * particularly in the case of the share exchange rate changing signficantly, either positively or negatively. + * For a fairly thorough discussion of this issue and our chosen mitigation strategy, we recommend reading through + * [this thread](https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3706) on the OpenZeppelin repo. + * We specifically use a share offset of `SHARES_OFFSET` and a balance offset of `BALANCE_OFFSET`. + */ +contract EigenStrategy is StrategyBase { + using SafeERC20 for IERC20; + + /** + * @notice EIGEN can be deposited into this strategy, where it is unwrapped into bEIGEN and staked in + * this strategy contract. EIGEN can also be withdrawn by withdrawing bEIGEN from this strategy, and + * then wrapping it back into EIGEN. + */ + 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) {} + + function initialize( + IEigen _EIGEN, + IERC20 _bEIGEN, + IPauserRegistry _pauserRegistry + ) public virtual initializer { + EIGEN = _EIGEN; + _initializeStrategyBase(_bEIGEN, _pauserRegistry); + } + + /** + * @notice This function hook is called in EigenStrategy.deposit() and is overridden here to + * allow for depositing of either EIGEN or bEIGEN tokens. If token is bEIGEN aka the underlyingToken, + * then the contract functions exactly the same as the StrategyBase contract and the deposit is calculated into shares. + * If token is EIGEN, then the EIGEN is first 1-1 unwrapped into bEIGEN and the deposit shares are calculated as normal. + * @param token token to be deposited, can be either EIGEN or bEIGEN. If EIGEN, then is unwrapped into bEIGEN + * @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"); + + if (token == EIGEN) { + // unwrap EIGEN into bEIGEN assuming a 1-1 unwrapping amount + // the strategy will then hold `amount` of bEIGEN + EIGEN.unwrap(amount); + } + } + + /** + * @notice This function hook is called in EigenStrategy.withdraw() before withdrawn shares are calculated and is + * overridden here to allow for withdrawing shares either into EIGEN or bEIGEN tokens. If wrapping bEIGEN into EIGEN is needed, + * it is performed in _afterWithdrawal(). This hook just checks the token paramater is either EIGEN or bEIGEN. + * @param token token to be withdrawn, can be either EIGEN or bEIGEN. If EIGEN, then bEIGEN is wrapped into EIGEN + */ + function _beforeWithdrawal(address /*recipient*/, IERC20 token, uint256 /*amountShares*/) internal virtual override { + require(token == underlyingToken || token == EIGEN, "EigenStrategy.withdraw: Can only withdraw bEIGEN or EIGEN"); + } + + /** + * @notice This function hook is called in EigenStrategy.withdraw() after withdrawn shares are calculated and is + * overridden here to allow for withdrawing shares either into EIGEN or bEIGEN tokens. If token is bEIGEN aka the underlyingToken, + * then the contract functions exactly the same as the StrategyBase contract and transfers out bEIGEN to the recipient. + * If token is EIGEN, then bEIGEN is first 1-1 wrapped into EIGEN and the strategy transfers out the EIGEN to the recipient. + * @param recipient recipient of the withdrawal + * @param token token to be withdrawn, can be either EIGEN or bEIGEN. If EIGEN, then bEIGEN is wrapped into EIGEN + * @param amountToSend amount of tokens to transfer + */ + function _afterWithdrawal(address recipient, IERC20 token, uint256 amountToSend) internal virtual override { + if (token == EIGEN) { + // wrap bEIGEN into EIGEN assuming a 1-1 wrapping amount + // the strategy will then hold `amountToSend` of EIGEN + underlyingToken.approve(address(token), amountToSend); + EIGEN.wrap(amountToSend); + } + + // Whether the withdrawal specified EIGEN or bEIGEN, the strategy + // holds the correct balance and can transfer to the recipient here + token.safeTransfer(recipient, amountToSend); + } + + /** + * @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[49] private __gap; +} diff --git a/src/contracts/strategies/StrategyBase.sol b/src/contracts/strategies/StrategyBase.sol index cf31a30f8..1e159ab7d 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.12; import "../interfaces/IStrategyManager.sol"; import "../permissions/Pausable.sol"; diff --git a/src/contracts/strategies/StrategyBaseTVLLimits.sol b/src/contracts/strategies/StrategyBaseTVLLimits.sol index a395bf081..63b76ff45 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.12; import "./StrategyBase.sol"; diff --git a/src/contracts/token/BackingEigen.sol b/src/contracts/token/BackingEigen.sol new file mode 100644 index 000000000..ba49de5ab --- /dev/null +++ b/src/contracts/token/BackingEigen.sol @@ -0,0 +1,132 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "@openzeppelin-v4.9.0/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin-upgrades-v4.9.0/contracts/token/ERC20/extensions/ERC20VotesUpgradeable.sol"; +import "@openzeppelin-upgrades-v4.9.0/contracts/access/OwnableUpgradeable.sol"; + +contract BackingEigen is OwnableUpgradeable, ERC20VotesUpgradeable { + /// CONSTANTS & IMMUTABLES + /// @notice the address of the wrapped Eigen token EIGEN + IERC20 public immutable EIGEN; + + /// STORAGE + /// @notice the timestamp after which transfer restrictions are disabled + uint256 public transferRestrictionsDisabledAfter; + /// @notice mapping of addresses that are allowed to transfer tokens to any address + mapping(address => bool) public allowedFrom; + /// @notice mapping of addresses that are allowed to receive tokens from any address + mapping(address => bool) public allowedTo; + + /// @notice event emitted when the allowedFrom status of an address is set + event SetAllowedFrom(address indexed from, bool isAllowedFrom); + /// @notice event emitted when the allowedTo status of an address is set + event SetAllowedTo(address indexed to, bool isAllowedTo); + /// @notice event emitted when the transfer restrictions are disabled + event TransferRestrictionsDisabled(); + /// @notice event emitted when the EIGEN token is backed + event Backed(); + + constructor(IERC20 _EIGEN) { + EIGEN = _EIGEN; + _disableInitializers(); + } + + /** + * @notice An initializer function that sets initial values for the contract's state variables. + */ + function initialize(address initialOwner) initializer public { + __Ownable_init(); + __ERC20_init("Backing Eigen", "bEIGEN"); + _transferOwnership(initialOwner); + __ERC20Permit_init("bEIGEN"); + + // set transfer restrictions to be disabled at type(uint256).max to be set down later + transferRestrictionsDisabledAfter = type(uint256).max; + + // the EIGEN contract should be allowed to transfer tokens to any address for unwrapping + // likewise, anyone should be able to transfer bEIGEN to EIGEN for wrapping + _setAllowedFrom(address(EIGEN), true); + _setAllowedTo(address(EIGEN), true); + + // Mint the entire supply of EIGEN - this is a one-time event that + // ensures bEIGEN fully backs EIGEN. + _mint(address(EIGEN), EIGEN.totalSupply()); + emit Backed(); + } + + /// EXTERNAL FUNCTIONS + + /** + * @notice This function allows the owner to set the allowedFrom status of an address + * @param from the address whose allowedFrom status is being set + * @param isAllowedFrom the new allowedFrom status + */ + function setAllowedFrom(address from, bool isAllowedFrom) external onlyOwner { + _setAllowedFrom(from, isAllowedFrom); + } + + /** + * @notice This function allows the owner to set the allowedTo status of an address + * @param to the address whose allowedTo status is being set + * @param isAllowedTo the new allowedTo status + */ + function setAllowedTo(address to, bool isAllowedTo) external onlyOwner { + _setAllowedTo(to, isAllowedTo); + } + + /** + * @notice Allows the owner to disable transfer restrictions + */ + function disableTransferRestrictions() external onlyOwner { + require(transferRestrictionsDisabledAfter == type(uint256).max, "BackingEigen.disableTransferRestrictions: transfer restrictions are already disabled"); + transferRestrictionsDisabledAfter = 0; + emit TransferRestrictionsDisabled(); + } + + /// VIEW FUNCTIONS + + /** + * @dev Clock used for flagging checkpoints. Has been overridden to implement timestamp based + * checkpoints (and voting). + */ + function clock() public view override returns (uint48) { + return SafeCastUpgradeable.toUint48(block.timestamp); + } + + /** + * @dev Machine-readable description of the clock as specified in EIP-6372. + * Has been overridden to inform callers that this contract uses timestamps instead of block numbers, to match `clock()` + */ + // solhint-disable-next-line func-name-mixedcase + function CLOCK_MODE() public pure override returns (string memory) { + return "mode=timestamp"; + } + + /// INTERNAL FUNCTIONS + + function _setAllowedFrom(address from, bool isAllowedFrom) internal { + allowedFrom[from] = isAllowedFrom; + emit SetAllowedFrom(from, isAllowedFrom); + } + + function _setAllowedTo(address to, bool isAllowedTo) internal { + allowedTo[to] = isAllowedTo; + emit SetAllowedTo(to, isAllowedTo); + } + + /** + * @notice Overrides the beforeTokenTransfer function to enforce transfer restrictions + * @param from the address tokens are being transferred from + * @param to the address tokens are being transferred to + * @param amount the amount of tokens being transferred + */ + function _beforeTokenTransfer(address from, address to, uint256 amount) internal override { + // if transfer restrictions are enabled + if (block.timestamp <= transferRestrictionsDisabledAfter) { + // if both from and to are not whitelisted + require(allowedFrom[from] || allowedTo[to] || from == address(0), "BackingEigen._beforeTokenTransfer: from or to must be whitelisted"); + } + super._beforeTokenTransfer(from, to, amount); + } +} \ No newline at end of file diff --git a/src/contracts/token/Eigen.sol b/src/contracts/token/Eigen.sol new file mode 100644 index 000000000..b17db6d2e --- /dev/null +++ b/src/contracts/token/Eigen.sol @@ -0,0 +1,171 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "@openzeppelin-v4.9.0/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin-upgrades-v4.9.0/contracts/token/ERC20/extensions/ERC20VotesUpgradeable.sol"; +import "@openzeppelin-upgrades-v4.9.0/contracts/access/OwnableUpgradeable.sol"; + +contract Eigen is OwnableUpgradeable, ERC20VotesUpgradeable { + /// CONSTANTS & IMMUTABLES + /// @notice the address of the backing Eigen token bEIGEN + IERC20 public immutable bEIGEN; + + /// STORAGE + /// @notice mapping of minter addresses to the timestamp after which they are allowed to mint + mapping(address => uint256) public mintAllowedAfter; + /// @notice mapping of minter addresses to the amount of tokens they are allowed to mint + mapping(address => uint256) public mintingAllowance; + + /// @notice the timestamp after which transfer restrictions are disabled + uint256 public transferRestrictionsDisabledAfter; + /// @notice mapping of addresses that are allowed to transfer tokens to any address + mapping(address => bool) public allowedFrom; + /// @notice mapping of addresses that are allowed to receive tokens from any address + mapping(address => bool) public allowedTo; + + /// @notice event emitted when the allowedFrom status of an address is set + event SetAllowedFrom(address indexed from, bool isAllowedFrom); + /// @notice event emitted when the allowedTo status of an address is set + event SetAllowedTo(address indexed to, bool isAllowedTo); + /// @notice event emitted when a minter mints + event Mint(address indexed minter, uint256 amount); + /// @notice event emitted when the transfer restrictions disabled + event TransferRestrictionsDisabled(); + + constructor(IERC20 _bEIGEN) { + bEIGEN = _bEIGEN; + _disableInitializers(); + } + + /** + * @notice An initializer function that sets initial values for the contract's state variables. + * @param minters the addresses that are allowed to mint + * @param mintingAllowances the amount of tokens that each minter is allowed to mint + */ + function initialize(address initialOwner, address[] memory minters, uint256[] memory mintingAllowances, uint256[] memory mintAllowedAfters) initializer public { + __Ownable_init(); + __ERC20_init("Eigen", "EIGEN"); + _transferOwnership(initialOwner); + __ERC20Permit_init("EIGEN"); + + require(minters.length == mintingAllowances.length, "Eigen.initialize: minters and mintingAllowances must be the same length"); + require(minters.length == mintAllowedAfters.length, "Eigen.initialize: minters and mintAllowedAfters must be the same length"); + // set minting allowances for each minter + for (uint i = 0; i < minters.length; i++) { + mintingAllowance[minters[i]] = mintingAllowances[i]; + mintAllowedAfter[minters[i]] = mintAllowedAfters[i]; + // allow each minter to transfer tokens + allowedFrom[minters[i]] = true; + emit SetAllowedFrom(minters[i], true); + } + + // set transfer restrictions to be disabled at type(uint256).max to be set down later + transferRestrictionsDisabledAfter = type(uint256).max; + } + + /** + * @notice This function allows the owner to set the allowedFrom status of an address + * @param from the address whose allowedFrom status is being set + * @param isAllowedFrom the new allowedFrom status + */ + function setAllowedFrom(address from, bool isAllowedFrom) external onlyOwner { + allowedFrom[from] = isAllowedFrom; + emit SetAllowedFrom(from, isAllowedFrom); + } + + /** + * @notice This function allows the owner to set the allowedTo status of an address + * @param to the address whose allowedTo status is being set + * @param isAllowedTo the new allowedTo status + */ + function setAllowedTo(address to, bool isAllowedTo) external onlyOwner { + allowedTo[to] = isAllowedTo; + emit SetAllowedTo(to, isAllowedTo); + } + + /** + * @notice Allows the owner to disable transfer restrictions + */ + function disableTransferRestrictions() external onlyOwner { + require(transferRestrictionsDisabledAfter == type(uint256).max, "Eigen.disableTransferRestrictions: transfer restrictions are already disabled"); + transferRestrictionsDisabledAfter = 0; + emit TransferRestrictionsDisabled(); + } + + /** + * @notice This function allows minter to mint tokens + */ + function mint() external { + require(mintingAllowance[msg.sender] > 0, "Eigen.mint: msg.sender has no minting allowance"); + require(block.timestamp > mintAllowedAfter[msg.sender], "Eigen.mint: msg.sender is not allowed to mint yet"); + uint256 amount = mintingAllowance[msg.sender]; + mintingAllowance[msg.sender] = 0; + _mint(msg.sender, amount); + emit Mint(msg.sender, amount); + } + + /** + * @notice This function allows bEIGEN holders to wrap their tokens into Eigen + */ + function wrap(uint256 amount) external { + require(bEIGEN.transferFrom(msg.sender, address(this), amount), "Eigen.wrap: bEIGEN transfer failed"); + _transfer(address(this), msg.sender, amount); + } + + /** + * @notice This function allows Eigen holders to unwrap their tokens into bEIGEN + */ + function unwrap(uint256 amount) external { + _transfer(msg.sender, address(this), amount); + require(bEIGEN.transfer(msg.sender, amount), "Eigen.unwrap: bEIGEN transfer failed"); + } + + /** + * @notice Allows the sender to transfer tokens to multiple addresses in a single transaction + */ + function multisend(address[] calldata receivers, uint256[] calldata amounts) public { + require(receivers.length == amounts.length, "Eigen.multisend: receivers and amounts must be the same length"); + for (uint i = 0; i < receivers.length; i++) { + _transfer(msg.sender, receivers[i], amounts[i]); + } + } + + /** + * @notice Overrides the beforeTokenTransfer function to enforce transfer restrictions + * @param from the address tokens are being transferred from + * @param to the address tokens are being transferred to + * @param amount the amount of tokens being transferred + */ + function _beforeTokenTransfer(address from, address to, uint256 amount) internal override { + // if transfer restrictions are enabled + if (block.timestamp <= transferRestrictionsDisabledAfter) { + // if both from and to are not whitelisted + require( + from == address(0) || + from == address(this) || + to == address(this) || + allowedFrom[from] || + allowedTo[to], + "Eigen._beforeTokenTransfer: from or to must be whitelisted" + ); + } + super._beforeTokenTransfer(from, to, amount); + } + + /** + * @dev Clock used for flagging checkpoints. Has been overridden to implement timestamp based + * checkpoints (and voting). + */ + function clock() public view override returns (uint48) { + return SafeCastUpgradeable.toUint48(block.timestamp); + } + + /** + * @dev Machine-readable description of the clock as specified in EIP-6372. + * Has been overridden to inform callers that this contract uses timestamps instead of block numbers, to match `clock()` + */ + // solhint-disable-next-line func-name-mixedcase + function CLOCK_MODE() public pure override returns (string memory) { + return "mode=timestamp"; + } +} \ No newline at end of file diff --git a/src/contracts/utils/UpgradeableSignatureCheckingUtils.sol b/src/contracts/utils/UpgradeableSignatureCheckingUtils.sol index 761ffe282..b9b899e53 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.12; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "../libraries/EIP1271SignatureUtils.sol"; diff --git a/src/test/Delegation.t.sol b/src/test/Delegation.t.sol index cb3f51960..b92343100 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.12; 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 3bd26ef80..e3f04fa75 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.12; 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 dea978d8d..50fb7b8d3 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.12; import "./EigenLayerTestHelper.t.sol"; import "../contracts/core/StrategyManagerStorage.sol"; diff --git a/src/test/EigenLayerDeployer.t.sol b/src/test/EigenLayerDeployer.t.sol index 8b5ada2a8..5912edb24 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.12; 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 6f99dc6bb..5bc429611 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.12; import "../test/EigenLayerDeployer.t.sol"; import "../contracts/interfaces/ISignatureUtils.sol"; diff --git a/src/test/EigenPod.t.sol b/src/test/EigenPod.t.sol index c991fb696..eb703d088 100644 --- a/src/test/EigenPod.t.sol +++ b/src/test/EigenPod.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "../contracts/interfaces/IEigenPod.sol"; import "../contracts/pods/DelayedWithdrawalRouter.sol"; @@ -345,45 +345,6 @@ contract EigenPodTests is ProofParsing, EigenPodPausingConstants { cheats.stopPrank(); } - function testDeployEigenPodTooSoon() public { - // ./solidityProofGen -newBalance=32000115173 "ValidatorFieldsProof" 302913 true "data/withdrawal_proof_goerli/goerli_block_header_6399998.json" "data/withdrawal_proof_goerli/goerli_slot_6399998.json" "withdrawal_credential_proof_302913.json" - setJSON("./src/test/test-data/withdrawal_credential_proof_302913.json"); - - IEigenPod newPod = eigenPodManager.getPod(podOwner); - - cheats.startPrank(podOwner); - - - cheats.expectEmit(true, true, true, true, address(newPod)); - emit EigenPodStaked(pubkey); - eigenPodManager.stake{value: stakeAmount}(pubkey, signature, depositDataRoot); - cheats.stopPrank(); - - uint64 timestamp = 0; - bytes32[][] memory validatorFieldsArray = new bytes32[][](1); - validatorFieldsArray[0] = getValidatorFields(); - bytes[] memory proofsArray = new bytes[](1); - proofsArray[0] = abi.encodePacked(getWithdrawalCredentialProof()); - BeaconChainProofs.StateRootProof memory stateRootProofStruct = _getStateRootProof(); - uint40[] memory validatorIndices = new uint40[](1); - validatorIndices[0] = uint40(getValidatorIndex()); - - cheats.startPrank(podOwner); - cheats.expectRevert( - bytes( - "EigenPod.proofIsForValidTimestamp: beacon chain proof must be for timestamp after mostRecentWithdrawalTimestamp" - ) - ); - newPod.verifyWithdrawalCredentials( - timestamp, - stateRootProofStruct, - validatorIndices, - proofsArray, - validatorFieldsArray - ); - cheats.stopPrank(); - } - function testWithdrawNonBeaconChainETHBalanceWei() public { IEigenPod pod = testDeployAndVerifyNewEigenPod(); @@ -1912,4 +1873,4 @@ contract Relayer is Test { // cheats.expectRevert(bytes("EigenPod.verifyAndProcessWithdrawals: inputs must be same length")); // pod.verifyAndProcessWithdrawals(0, stateRootProofStruct, withdrawalProofsArray, validatorFieldsProofArray, validatorFieldsArray, withdrawalFieldsArray); - // } \ No newline at end of file + // } diff --git a/src/test/Pausable.t.sol b/src/test/Pausable.t.sol index 8ab03ada5..2aea7a996 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.12; import "./EigenLayerTestHelper.t.sol"; diff --git a/src/test/Strategy.t.sol b/src/test/Strategy.t.sol index 2a776cdea..3139e92a2 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.12; import "./EigenLayerTestHelper.t.sol"; import "../contracts/core/StrategyManagerStorage.sol"; diff --git a/src/test/WithdrawalMigration.t.sol b/src/test/WithdrawalMigration.t.sol index beac35874..500031031 100644 --- a/src/test/WithdrawalMigration.t.sol +++ b/src/test/WithdrawalMigration.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "../test/EigenLayerTestHelper.t.sol"; import "src/test/utils/Utils.sol"; diff --git a/src/test/Withdrawals.t.sol b/src/test/Withdrawals.t.sol index 567822f70..f8f780e7a 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.12; import "../test/EigenLayerTestHelper.t.sol"; diff --git a/src/test/events/IAVSDirectoryEvents.sol b/src/test/events/IAVSDirectoryEvents.sol index ff344d994..a4f0a2962 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.12; import "src/contracts/interfaces/IAVSDirectory.sol"; @@ -12,4 +12,4 @@ interface IAVSDirectoryEvents { /// @notice Emitted when an operator's registration status for an AVS is updated event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, IAVSDirectory.OperatorAVSRegistrationStatus status); -} \ No newline at end of file +} diff --git a/src/test/events/IDelegationManagerEvents.sol b/src/test/events/IDelegationManagerEvents.sol index 4654d722f..53eae90b6 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.12; import "src/contracts/interfaces/IDelegationManager.sol"; @@ -61,4 +61,4 @@ interface IDelegationManagerEvents { /// @notice Emitted when the `strategyWithdrawalDelayBlocks` variable is modified from `previousValue` to `newValue`. event StrategyWithdrawalDelayBlocksSet(IStrategy strategy, uint256 previousValue, uint256 newValue); -} \ No newline at end of file +} diff --git a/src/test/events/IEigenPodEvents.sol b/src/test/events/IEigenPodEvents.sol index c4016691b..20d37557f 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.12; interface IEigenPodEvents { /// @notice Emitted when an ETH validator stakes via this eigenPod @@ -39,4 +39,4 @@ interface IEigenPodEvents { /// @notice Emitted when ETH that was previously received via the `receive` fallback is withdrawn event NonBeaconChainETHWithdrawn(address indexed recipient, uint256 amountWithdrawn); -} \ No newline at end of file +} diff --git a/src/test/events/IEigenPodManagerEvents.sol b/src/test/events/IEigenPodManagerEvents.sol index d974ce2c9..50caf34bf 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.12; interface IEigenPodManagerEvents { /// @notice Emitted to notify the update of the beaconChainOracle address @@ -13,4 +13,4 @@ interface IEigenPodManagerEvents { /// @notice Emitted when the balance of an EigenPod is updated event PodSharesUpdated(address indexed podOwner, int256 sharesDelta); -} \ No newline at end of file +} diff --git a/src/test/events/IStrategyManagerEvents.sol b/src/test/events/IStrategyManagerEvents.sol index e5a83effb..e0727d069 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.12; import "src/contracts/interfaces/IStrategyManager.sol"; @@ -60,4 +60,4 @@ interface IStrategyManagerEvents { /// @notice Emitted when the `withdrawalDelayBlocks` variable is modified from `previousValue` to `newValue`. event WithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue); -} \ No newline at end of file +} diff --git a/src/test/harnesses/EigenHarness.sol b/src/test/harnesses/EigenHarness.sol new file mode 100644 index 000000000..e5f1ccbbf --- /dev/null +++ b/src/test/harnesses/EigenHarness.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.12; + +import "../../contracts/token/Eigen.sol"; + +contract EigenHarness is Eigen { + + constructor(IERC20 _bEIGEN) Eigen(_bEIGEN) { } + + /// expose internal mint function + function mint(address to, uint256 amount) public { + _mint(to, amount); + } + + /** + * @notice This function allows the owner to set the allowedFrom status of an address + * @param from the address whose allowedFrom status is being set + * @param isAllowedFrom the new allowedFrom status + * @dev this function is callable by anoyone in the harness + */ + function setAllowedFromPermissionless(address from, bool isAllowedFrom) external { + allowedFrom[from] = isAllowedFrom; + emit SetAllowedFrom(from, isAllowedFrom); + } + + function setTransferRestrictionsDisabledAfterToMax() external { + transferRestrictionsDisabledAfter = type(uint256).max; + } + + function transferOwnershipPermissionless(address newOwner) external { + _transferOwnership(newOwner); + } +} \ No newline at end of file diff --git a/src/test/harnesses/EigenPodHarness.sol b/src/test/harnesses/EigenPodHarness.sol index c139620f0..50582dfe7 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.12; import "../../contracts/pods/EigenPod.sol"; import "forge-std/Test.sol"; @@ -120,4 +120,8 @@ contract EPInternalFunctions is EigenPod, Test { function setValidatorRestakedBalance(bytes32 pkhash, uint64 restakedBalanceGwei) public { _validatorPubkeyHashToInfo[pkhash].restakedBalanceGwei = restakedBalanceGwei; } - } \ No newline at end of file + + function setMostRecentWithdrawalTimestamp(uint64 _mostRecentWithdrawalTimestamp) public { + mostRecentWithdrawalTimestamp = _mostRecentWithdrawalTimestamp; + } + } diff --git a/src/test/harnesses/EigenPodManagerWrapper.sol b/src/test/harnesses/EigenPodManagerWrapper.sol index 7377f3b7b..15eec05fd 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.12; import "../../contracts/pods/EigenPodManager.sol"; @@ -21,4 +21,4 @@ contract EigenPodManagerWrapper is EigenPodManager { function setPodAddress(address owner, IEigenPod pod) external { ownerToPod[owner] = pod; } -} \ No newline at end of file +} diff --git a/src/test/harnesses/PausableHarness.sol b/src/test/harnesses/PausableHarness.sol index 53ebc2ef7..7a0e37fdb 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.12; import "../../contracts/permissions/Pausable.sol"; @@ -8,4 +8,4 @@ contract PausableHarness is Pausable { function initializePauser(IPauserRegistry _pauserRegistry, uint256 initPausedStatus) external { _initializePauser(_pauserRegistry, initPausedStatus); } -} \ No newline at end of file +} diff --git a/src/test/integration/IntegrationBase.t.sol b/src/test/integration/IntegrationBase.t.sol index 3d82fad03..96e0e478d 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.12; import "forge-std/Test.sol"; @@ -8,7 +8,8 @@ import "@openzeppelin/contracts/utils/Strings.sol"; import "src/test/integration/IntegrationDeployer.t.sol"; import "src/test/integration/TimeMachine.t.sol"; -import "src/test/integration/User.t.sol"; +import "src/test/integration/users/User.t.sol"; +import "src/test/integration/users/User_M1.t.sol"; abstract contract IntegrationBase is IntegrationDeployer { @@ -17,6 +18,14 @@ abstract contract IntegrationBase is IntegrationDeployer { uint numStakers = 0; uint numOperators = 0; + // Lists of stakers/operators created before the m2 upgrade + // + // When we call _upgradeEigenLayerContracts, we iterate over + // these lists and migrate perform the standard migration actions + // for each user + User[] stakersToMigrate; + User[] operatorsToMigrate; + /** * Gen/Init methods: */ @@ -26,32 +35,108 @@ abstract contract IntegrationBase is IntegrationDeployer { * This user is ready to deposit into some strategies and has some underlying token balances */ function _newRandomStaker() internal returns (User, IStrategy[] memory, uint[] memory) { - string memory stakerName = string.concat("- Staker", numStakers.toString()); - numStakers++; + string memory stakerName; + + User staker; + IStrategy[] memory strategies; + uint[] memory tokenBalances; + + if (forkType == MAINNET && !isUpgraded) { + stakerName = string.concat("- M1_Staker", numStakers.toString()); + + (staker, strategies, tokenBalances) = _randUser(stakerName); + + stakersToMigrate.push(staker); + } else { + stakerName = string.concat("- Staker", numStakers.toString()); + + (staker, strategies, tokenBalances) = _randUser(stakerName); + } - (User staker, IStrategy[] memory strategies, uint[] memory tokenBalances) = _randUser(stakerName); - assert_HasUnderlyingTokenBalances(staker, strategies, tokenBalances, "_newRandomStaker: failed to award token balances"); + numStakers++; return (staker, strategies, tokenBalances); } + /** + * @dev Create a new operator according to configured random variants. + * This user will immediately deposit their randomized assets into eigenlayer. + * @notice If forktype is mainnet and not upgraded, then the operator will only randomize LSTs assets and deposit them + * as ETH podowner shares are not available yet. + */ function _newRandomOperator() internal returns (User, IStrategy[] memory, uint[] memory) { - string memory operatorName = string.concat("- Operator", numOperators.toString()); - numOperators++; + User operator; + IStrategy[] memory strategies; + uint[] memory tokenBalances; - (User operator, IStrategy[] memory strategies, uint[] memory tokenBalances) = _randUser(operatorName); - - operator.registerAsOperator(); - operator.depositIntoEigenlayer(strategies, tokenBalances); + if (forkType == MAINNET && !isUpgraded) { + string memory operatorName = string.concat("- M1_Operator", numOperators.toString()); + + // Create an operator for M1. We omit native ETH because we want to + // check staker/operator shares, and we don't award native ETH shares in M1 + (operator, strategies, tokenBalances) = _randUser_NoETH(operatorName); + + User_M1(payable(address(operator))).depositIntoEigenlayer_M1(strategies, tokenBalances); + uint[] memory addedShares = _calculateExpectedShares(strategies, tokenBalances); + + assert_Snap_Added_StakerShares(operator, strategies, addedShares, "_newRandomOperator: failed to add delegatable shares"); + + operatorsToMigrate.push(operator); + } else { + string memory operatorName = string.concat("- Operator", numOperators.toString()); + + (operator, strategies, tokenBalances) = _randUser(operatorName); + + uint[] memory addedShares = _calculateExpectedShares(strategies, tokenBalances); - assert_Snap_Added_StakerShares(operator, strategies, tokenBalances, "_newRandomOperator: failed to add delegatable shares"); - assert_Snap_Added_OperatorShares(operator, strategies, tokenBalances, "_newRandomOperator: failed to award shares to operator"); - assertTrue(delegationManager.isOperator(address(operator)), "_newRandomOperator: operator should be registered"); + operator.registerAsOperator(); + operator.depositIntoEigenlayer(strategies, tokenBalances); + + assert_Snap_Added_StakerShares(operator, strategies, addedShares, "_newRandomOperator: failed to add delegatable shares"); + assert_Snap_Added_OperatorShares(operator, strategies, addedShares, "_newRandomOperator: failed to award shares to operator"); + assertTrue(delegationManager.isOperator(address(operator)), "_newRandomOperator: operator should be registered"); + } + numOperators++; return (operator, strategies, tokenBalances); } + /// @dev If we're on mainnet, upgrade contracts to M2 and migrate stakers/operators + function _upgradeEigenLayerContracts() internal { + if (forkType == MAINNET) { + require(!isUpgraded, "_upgradeEigenLayerContracts: already performed m2 upgrade"); + + emit log("_upgradeEigenLayerContracts: upgrading mainnet to m2"); + _upgradeMainnetContracts(); + + emit log("===Migrating Stakers/Operators==="); + + // Enable restaking for stakers' pods + for (uint i = 0; i < stakersToMigrate.length; i++) { + stakersToMigrate[i].activateRestaking(); + } + + // Register operators with DelegationManager + for (uint i = 0; i < operatorsToMigrate.length; i++) { + operatorsToMigrate[i].registerAsOperator(); + } + + emit log("======"); + + isUpgraded = true; + emit log("_upgradeEigenLayerContracts: m2 upgrade complete"); + } else if (forkType == HOLESKY) { + require(!isUpgraded, "_upgradeEigenLayerContracts: already performed m2 upgrade"); + + emit log("_upgradeEigenLayerContracts: upgrading holesky to m2"); + _upgradeHoleskyContracts(); + + isUpgraded = true; + emit log("_upgradeEigenLayerContracts: m2 upgrade complete"); + } + } + /** * Common assertions: */ @@ -81,7 +166,8 @@ abstract contract IntegrationBase is IntegrationDeployer { tokenBalance = strat.underlyingToken().balanceOf(address(user)); } - assertEq(expectedBalance, tokenBalance, err); + assertApproxEqAbs(expectedBalance, tokenBalance, 1, err); + // assertEq(expectedBalance, tokenBalance, err); } } @@ -113,7 +199,7 @@ abstract contract IntegrationBase is IntegrationDeployer { actualShares = strategyManager.stakerStrategyShares(address(user), strat); } - assertEq(expectedShares[i], actualShares, err); + assertApproxEqAbs(expectedShares[i], actualShares, 1, err); } } @@ -128,7 +214,7 @@ abstract contract IntegrationBase is IntegrationDeployer { uint actualShares = delegationManager.operatorShares(address(user), strat); - assertEq(expectedShares[i], actualShares, err); + assertApproxEqAbs(expectedShares[i], actualShares, 1, err); } } @@ -194,7 +280,7 @@ abstract contract IntegrationBase is IntegrationDeployer { // For each strategy, check (prev + added == cur) for (uint i = 0; i < strategies.length; i++) { - assertEq(prevShares[i] + addedShares[i], curShares[i], err); + assertApproxEqAbs(prevShares[i] + addedShares[i], curShares[i], 1, err); } } @@ -272,7 +358,7 @@ abstract contract IntegrationBase is IntegrationDeployer { // For each strategy, check (prev + added == cur) for (uint i = 0; i < strategies.length; i++) { - assertEq(prevShares[i] + addedShares[i], curShares[i], err); + assertApproxEqAbs(prevShares[i] + addedShares[i], curShares[i], 1, err); } } @@ -801,4 +887,4 @@ abstract contract IntegrationBase is IntegrationDeployer { return shares; } -} +} \ No newline at end of file diff --git a/src/test/integration/IntegrationChecks.t.sol b/src/test/integration/IntegrationChecks.t.sol index fef09682e..9ca5e3fd6 100644 --- a/src/test/integration/IntegrationChecks.t.sol +++ b/src/test/integration/IntegrationChecks.t.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "src/test/integration/IntegrationBase.t.sol"; -import "src/test/integration/User.t.sol"; +import "src/test/integration/users/User.t.sol"; +import "src/test/integration/users/User_M1.t.sol"; /// @notice Contract that provides utility functions to reuse common test blocks & checks contract IntegrationCheckUtils is IntegrationBase { diff --git a/src/test/integration/IntegrationDeployer.t.sol b/src/test/integration/IntegrationDeployer.t.sol index 1be9fdf81..3849e92f6 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.12; // Imports import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; @@ -13,6 +13,7 @@ import "src/contracts/core/DelegationManager.sol"; import "src/contracts/core/StrategyManager.sol"; import "src/contracts/core/Slasher.sol"; import "src/contracts/strategies/StrategyBase.sol"; +import "src/contracts/strategies/StrategyBaseTVLLimits.sol"; import "src/contracts/pods/EigenPodManager.sol"; import "src/contracts/pods/EigenPod.sol"; import "src/contracts/pods/DelayedWithdrawalRouter.sol"; @@ -23,24 +24,23 @@ import "src/test/mocks/ETHDepositMock.sol"; import "src/test/integration/mocks/BeaconChainOracleMock.t.sol"; import "src/test/integration/mocks/BeaconChainMock.t.sol"; -import "src/test/integration/User.t.sol"; +import "src/test/integration/users/User.t.sol"; +import "src/test/integration/users/User_M1.t.sol"; -abstract contract IntegrationDeployer is Test, IUserDeployer { +import "script/utils/ExistingDeploymentParser.sol"; + +abstract contract IntegrationDeployer is ExistingDeploymentParser { Vm cheats = Vm(HEVM_ADDRESS); - // Core contracts to deploy - DelegationManager public delegationManager; - StrategyManager public strategyManager; - EigenPodManager public eigenPodManager; - PauserRegistry pauserRegistry; - Slasher slasher; - IBeacon eigenPodBeacon; - EigenPod pod; - DelayedWithdrawalRouter delayedWithdrawalRouter; + // Fork ids for specific fork tests + bool isUpgraded; + uint256 mainnetForkBlock = 19_280_000; + uint256 mainnetForkId; + uint256 holeskyForkBLock = 1_213_950; + uint256 holeskyForkId; + uint64 constant DENEB_FORK_TIMESTAMP = 1705473120; - // Base strategy implementation in case we want to create more strategies later - StrategyBase baseStrategyImplementation; TimeMachine public timeMachine; @@ -53,13 +53,14 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { IStrategy[] allStrats; // just a combination of the above 2 lists IERC20[] allTokens; // `allStrats`, but contains all of the underlying tokens instead + // If a token is in this mapping, then we will ignore this LST as it causes issues with reading balanceOf + mapping(address => bool) public tokensNotTested; + // Mock Contracts to deploy ETHPOSDepositMock ethPOSDeposit; - BeaconChainOracleMock beaconChainOracle; + BeaconChainOracleMock public beaconChainOracle; BeaconChainMock public beaconChain; - // ProxyAdmin - ProxyAdmin eigenLayerProxyAdmin; // Admin Addresses address eigenLayerReputedMultisig = address(this); // admin address address constant pauser = address(555); @@ -71,10 +72,11 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { // be returned from `_randUser`. bytes assetTypes; bytes userTypes; + // Set only once in setUp, if FORK_MAINNET env is set + uint forkType; // Constants uint64 constant MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR = 32e9; - uint64 constant GOERLI_GENESIS_TIME = 1616508000; IStrategy constant BEACONCHAIN_ETH_STRAT = IStrategy(0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0); IERC20 constant NATIVE_ETH = IERC20(0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0); @@ -83,6 +85,23 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { uint constant MAX_BALANCE = 5e6; uint constant GWEI_TO_WEI = 1e9; + // Paused Constants + // DelegationManager + uint8 internal constant PAUSED_NEW_DELEGATION = 0; + uint8 internal constant PAUSED_ENTER_WITHDRAWAL_QUEUE = 1; + uint8 internal constant PAUSED_EXIT_WITHDRAWAL_QUEUE = 2; + // StrategyManager + uint8 internal constant PAUSED_DEPOSITS = 0; + // EigenpodManager + uint8 internal constant PAUSED_NEW_EIGENPODS = 0; + uint8 internal constant PAUSED_WITHDRAW_RESTAKED_ETH = 1; + uint8 internal constant PAUSED_EIGENPODS_VERIFY_CREDENTIALS = 2; + uint8 internal constant PAUSED_EIGENPODS_VERIFY_BALANCE_UPDATE = 3; + uint8 internal constant PAUSED_EIGENPODS_VERIFY_WITHDRAWAL = 4; + uint8 internal constant PAUSED_NON_PROOF_WITHDRAWALS = 5; + // DelayedWithdrawalRouter + uint8 internal constant PAUSED_DELAYED_WITHDRAWAL_CLAIMS = 0; + // Flags uint constant FLAG = 1; @@ -99,6 +118,12 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { uint constant DEFAULT = (FLAG << 0); uint constant ALT_METHODS = (FLAG << 1); + /// @dev Shadow Fork flags + /// These are used for upgrade integration testing. + uint constant LOCAL = (FLAG << 0); + uint constant MAINNET = (FLAG << 1); + uint constant HOLESKY = (FLAG << 2); + // /// @dev Withdrawal flags // /// These are used with _configRand to determine how a user conducts a withdrawal // uint constant FULL_WITHDRAW_SINGLE = (FLAG << 0); // stakers will withdraw all assets using a single queued withdrawal @@ -119,6 +144,7 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { mapping(uint => string) assetTypeToStr; mapping(uint => string) userTypeToStr; + mapping(uint => string) forkTypeToStr; constructor () { assetTypeToStr[NO_ASSETS] = "NO_ASSETS"; @@ -128,16 +154,70 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { userTypeToStr[DEFAULT] = "DEFAULT"; userTypeToStr[ALT_METHODS] = "ALT_METHODS"; + + forkTypeToStr[LOCAL] = "LOCAL"; + forkTypeToStr[MAINNET] = "MAINNET"; + forkTypeToStr[HOLESKY] = "HOLESKY"; + + address stETH_Holesky = 0x3F1c547b21f65e10480dE3ad8E19fAAC46C95034; + address stETH_Mainnet = 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84; + address OETH_Mainnet = 0x856c4Efb76C1D1AE02e20CEB03A2A6a08b0b8dC3; + address osETH_Holesky = 0xF603c5A3F774F05d4D848A9bB139809790890864; + address osETH_Mainnet = 0xf1C9acDc66974dFB6dEcB12aA385b9cD01190E38; + address cbETH_Holesky = 0x8720095Fa5739Ab051799211B146a2EEE4Dd8B37; + tokensNotTested[stETH_Holesky] = true; + tokensNotTested[stETH_Mainnet] = true; + tokensNotTested[OETH_Mainnet] = true; + tokensNotTested[osETH_Holesky] = true; + tokensNotTested[osETH_Mainnet] = true; + tokensNotTested[cbETH_Holesky] = true; } + /** + * @dev Anyone who wants to test using this contract in a separate repo via submodules may have to + * override this function to set the correct paths for the deployment info files. + * + * This setUp function will account for specific --fork-url flags and deploy/upgrade contracts accordingly. + * Note that forkIds are also created so you can make explicit fork tests using cheats.selectFork(forkId) + */ function setUp() public virtual { + isUpgraded = false; + + /** + * env FOUNDRY_PROFILE=forktest forge t --mc Integration + * + * Running foundry like this will trigger the fork test profile, + * lowering fuzz runs and using a remote RPC to test against mainnet state + */ + bool forkMainnet = + _hash("forktest") == + _hash(cheats.envOr(string("FOUNDRY_PROFILE"), string("default"))); + + if (forkMainnet) { + emit log("setUp: running tests against mainnet fork"); + emit log_named_string("- using RPC url", cheats.rpcUrl("mainnet")); + emit log_named_uint("- forking at block", mainnetForkBlock); + + cheats.createSelectFork(cheats.rpcUrl("mainnet"), mainnetForkBlock); + forkType = MAINNET; + } else { + emit log("setUp: running tests locally"); + + forkType = LOCAL; + } + + _deployOrFetchContracts(); + } + + function _setUpLocal() public virtual { // Deploy ProxyAdmin eigenLayerProxyAdmin = new ProxyAdmin(); + executorMultisig = address(eigenLayerProxyAdmin.owner()); // Deploy PauserRegistry address[] memory pausers = new address[](1); pausers[0] = pauser; - pauserRegistry = new PauserRegistry(pausers, unpauser); + eigenLayerPauserReg = new PauserRegistry(pausers, unpauser); // Deploy mocks EmptyContract emptyContract = new EmptyContract(); @@ -163,9 +243,12 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { delayedWithdrawalRouter = DelayedWithdrawalRouter( address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) ); + avsDirectory = AVSDirectory( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); // Deploy EigenPod Contracts - pod = new EigenPod( + eigenPodImplementation = new EigenPod( ethPOSDeposit, delayedWithdrawalRouter, eigenPodManager, @@ -173,20 +256,21 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { 0 ); - eigenPodBeacon = new UpgradeableBeacon(address(pod)); + eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs - DelegationManager delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); - StrategyManager strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); - Slasher slasherImplementation = new Slasher(strategyManager, delegationManager); - EigenPodManager eigenPodManagerImplementation = new EigenPodManager( + delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); + slasherImplementation = new Slasher(strategyManager, delegationManager); + eigenPodManagerImplementation = new EigenPodManager( ethPOSDeposit, eigenPodBeacon, strategyManager, slasher, delegationManager ); - DelayedWithdrawalRouter delayedWithdrawalRouterImplementation = new DelayedWithdrawalRouter(eigenPodManager); + delayedWithdrawalRouterImplementation = new DelayedWithdrawalRouter(eigenPodManager); + avsDirectoryImplementation = new AVSDirectory(delegationManager); // Third, upgrade the proxy contracts to point to the implementations uint256 withdrawalDelayBlocks = 7 days / 12 seconds; @@ -195,11 +279,11 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { // DelegationManager eigenLayerProxyAdmin.upgradeAndCall( TransparentUpgradeableProxy(payable(address(delegationManager))), - address(delegationImplementation), + address(delegationManagerImplementation), abi.encodeWithSelector( DelegationManager.initialize.selector, eigenLayerReputedMultisig, // initialOwner - pauserRegistry, + eigenLayerPauserReg, 0 /* initialPausedStatus */, withdrawalDelayBlocks, initializeStrategiesToSetDelayBlocks, @@ -214,7 +298,7 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { StrategyManager.initialize.selector, eigenLayerReputedMultisig, //initialOwner eigenLayerReputedMultisig, //initial whitelister - pauserRegistry, + eigenLayerPauserReg, 0 // initialPausedStatus ) ); @@ -225,7 +309,7 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { abi.encodeWithSelector( Slasher.initialize.selector, eigenLayerReputedMultisig, - pauserRegistry, + eigenLayerPauserReg, 0 // initialPausedStatus ) ); @@ -237,7 +321,7 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { EigenPodManager.initialize.selector, address(beaconChainOracle), eigenLayerReputedMultisig, // initialOwner - pauserRegistry, + eigenLayerPauserReg, 0 // initialPausedStatus ) ); @@ -248,11 +332,22 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { abi.encodeWithSelector( DelayedWithdrawalRouter.initialize.selector, eigenLayerReputedMultisig, // initialOwner - pauserRegistry, + eigenLayerPauserReg, 0, // initialPausedStatus withdrawalDelayBlocks ) ); + // AVSDirectory + eigenLayerProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(avsDirectory))), + address(avsDirectoryImplementation), + abi.encodeWithSelector( + AVSDirectory.initialize.selector, + eigenLayerReputedMultisig, // initialOwner + eigenLayerPauserReg, + 0 // initialPausedStatus + ) + ); // Create base strategy implementation and deploy a few strategies baseStrategyImplementation = new StrategyBase(strategyManager); @@ -268,16 +363,233 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { // Create time machine and set block timestamp forward so we can create EigenPod proofs in the past timeMachine = new TimeMachine(); timeMachine.setProofGenStartTime(2 hours); - // Create mock beacon chain / proof gen interface - beaconChain = new BeaconChainMock(timeMachine, beaconChainOracle); - - + beaconChain = new BeaconChainMock(timeMachine, beaconChainOracle, eigenPodManager); //set deneb fork timestamp eigenPodManager.setDenebForkTimestamp(type(uint64).max); } + /** + * @notice deploy current implementation contracts and upgrade the existing proxy EigenLayer contracts + * on Mainnet. Setup for integration tests on mainnet fork. + * + * Note that beacon chain oracle and eth deposit contracts are mocked and pointed to different addresses for these tests. + */ + function _upgradeMainnetContracts() public virtual { + cheats.startPrank(address(executorMultisig)); + + ethPOSDeposit = new ETHPOSDepositMock(); + ETHPOSDepositAddress = address(ethPOSDeposit); // overwrite for upgrade checks later + + // Deploy EigenPod Contracts + eigenPodImplementation = new EigenPod( + ethPOSDeposit, + delayedWithdrawalRouter, + eigenPodManager, + MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR, + 0 + ); + eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); + // Deploy AVSDirectory, contract has not been deployed on mainnet yet + avsDirectory = AVSDirectory( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); + + // First, deploy the *implementation* contracts, using the *proxy contracts* as inputs + delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); + slasherImplementation = new Slasher(strategyManager, delegationManager); + eigenPodManagerImplementation = new EigenPodManager( + ethPOSDeposit, + eigenPodBeacon, + strategyManager, + slasher, + delegationManager + ); + delayedWithdrawalRouterImplementation = new DelayedWithdrawalRouter(eigenPodManager); + avsDirectoryImplementation = new AVSDirectory(delegationManager); + + // Second, upgrade the proxy contracts to point to the implementations + // 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) + ); + // Delayed Withdrawal Router + eigenLayerProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(delayedWithdrawalRouter))), + address(delayedWithdrawalRouterImplementation) + ); + // AVSDirectory, upgrade and initalized + eigenLayerProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(avsDirectory))), + address(avsDirectoryImplementation), + abi.encodeWithSelector( + AVSDirectory.initialize.selector, + executorMultisig, + eigenLayerPauserReg, + 0 // initialPausedStatus + ) + ); + + // Create base strategy implementation and deploy a few strategies + baseStrategyImplementation = new StrategyBase(strategyManager); + + // Upgrade All deployed strategy contracts to new base strategy + for (uint i = 0; i < numStrategiesDeployed; i++) { + // Upgrade existing strategy + eigenLayerProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(deployedStrategyArray[i]))), + address(baseStrategyImplementation) + ); + } + + // Third, unpause core contracts + delegationManager.unpause(0); + eigenPodManager.unpause(0); + strategyManager.unpause(0); + + eigenPodManager.updateBeaconChainOracle(beaconChainOracle); + timeMachine.setProofGenStartTime(0); + beaconChain.setNextTimestamp(timeMachine.proofGenStartTime()); + + if (eigenPodManager.denebForkTimestamp() == type(uint64).max) { + //set deneb fork timestamp if not set + eigenPodManager.setDenebForkTimestamp(DENEB_FORK_TIMESTAMP); + } + cheats.stopPrank(); + + ethStrats.push(BEACONCHAIN_ETH_STRAT); + allStrats.push(BEACONCHAIN_ETH_STRAT); + allTokens.push(NATIVE_ETH); + } + + /** + * @notice deploy current implementation contracts and upgrade the existing proxy EigenLayer contracts + * on Holesky. Setup for integration tests on Holesky fork. + * + * Note that beacon chain oracle and eth deposit contracts are mocked and pointed to different addresses for these tests. + */ + function _upgradeHoleskyContracts() public virtual { + cheats.startPrank(address(executorMultisig)); + + ethPOSDeposit = new ETHPOSDepositMock(); + ETHPOSDepositAddress = address(ethPOSDeposit); // overwrite for upgrade checks later + + // Deploy EigenPod Contracts + eigenPodImplementation = new EigenPod( + ethPOSDeposit, + delayedWithdrawalRouter, + eigenPodManager, + MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR, + 0 + ); + eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); + // Deploy AVSDirectory, contract has not been deployed on mainnet yet + avsDirectory = AVSDirectory( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); + + // First, deploy the *implementation* contracts, using the *proxy contracts* as inputs + delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); + slasherImplementation = new Slasher(strategyManager, delegationManager); + eigenPodManagerImplementation = new EigenPodManager( + ethPOSDeposit, + eigenPodBeacon, + strategyManager, + slasher, + delegationManager + ); + delayedWithdrawalRouterImplementation = new DelayedWithdrawalRouter(eigenPodManager); + avsDirectoryImplementation = new AVSDirectory(delegationManager); + + // Second, upgrade the proxy contracts to point to the implementations + // 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) + ); + // Delayed Withdrawal Router + eigenLayerProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(delayedWithdrawalRouter))), + address(delayedWithdrawalRouterImplementation) + ); + // AVSDirectory, upgrade and initalized + eigenLayerProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(avsDirectory))), + address(avsDirectoryImplementation), + abi.encodeWithSelector( + AVSDirectory.initialize.selector, + executorMultisig, + eigenLayerPauserReg, + 0 // initialPausedStatus + ) + ); + + // Create base strategy implementation and deploy a few strategies + baseStrategyImplementation = new StrategyBase(strategyManager); + + // Upgrade All deployed strategy contracts to new base strategy + for (uint i = 0; i < numStrategiesDeployed; i++) { + // Upgrade existing strategy + eigenLayerProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(deployedStrategyArray[i]))), + address(baseStrategyImplementation) + ); + } + + // Third, unpause core contracts + delegationManager.unpause(0); + eigenPodManager.unpause(0); + strategyManager.unpause(0); + + eigenPodManager.updateBeaconChainOracle(beaconChainOracle); + timeMachine.setProofGenStartTime(0); + beaconChain.setNextTimestamp(timeMachine.proofGenStartTime()); + + if (eigenPodManager.denebForkTimestamp() == type(uint64).max) { + //set deneb fork timestamp if not set + eigenPodManager.setDenebForkTimestamp(DENEB_FORK_TIMESTAMP); + } + cheats.stopPrank(); + + ethStrats.push(BEACONCHAIN_ETH_STRAT); + allStrats.push(BEACONCHAIN_ETH_STRAT); + allTokens.push(NATIVE_ETH); + } + /// @dev Deploy a strategy and its underlying token, push to global lists of tokens/strategies, and whitelist /// strategy in strategyManager function _newStrategyAndToken(string memory tokenName, string memory tokenSymbol, uint initialSupply, address owner) internal { @@ -287,7 +599,7 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { new TransparentUpgradeableProxy( address(baseStrategyImplementation), address(eigenLayerProxyAdmin), - abi.encodeWithSelector(StrategyBase.initialize.selector, underlyingToken, pauserRegistry) + abi.encodeWithSelector(StrategyBase.initialize.selector, underlyingToken, eigenLayerPauserReg) ) ) ); @@ -296,8 +608,16 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { IStrategy[] memory strategies = new IStrategy[](1); bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); strategies[0] = strategy; - cheats.prank(strategyManager.strategyWhitelister()); - strategyManager.addStrategiesToDepositWhitelist(strategies, _thirdPartyTransfersForbiddenValues); + + if (forkType == MAINNET) { + cheats.prank(strategyManager.strategyWhitelister()); + IStrategyManager_DeprecatedM1(address(strategyManager)).addStrategiesToDepositWhitelist(strategies); + cheats.prank(eigenLayerPauserReg.unpauser()); + StrategyBaseTVLLimits(address(strategy)).setTVLLimits(type(uint256).max, type(uint256).max); + } else { + cheats.prank(strategyManager.strategyWhitelister()); + strategyManager.addStrategiesToDepositWhitelist(strategies, _thirdPartyTransfersForbiddenValues); + } // Add to lstStrats and allStrats lstStrats.push(strategy); @@ -333,6 +653,92 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { assertTrue(userTypes.length != 0, "_configRand: no user types selected"); } + /** + * Depending on the forkType, either deploy contracts locally or parse existing contracts + * from network. + * + * Note: for non-LOCAL forktypes, upgrade of contracts will be peformed after user initialization. + */ + function _deployOrFetchContracts() internal { + emit log_named_string("_deployOrFetchContracts using fork for test", forkTypeToStr[forkType]); + + if (forkType == LOCAL) { + _setUpLocal(); + // Set Upgraded as local setup deploys most up to date contracts + isUpgraded = true; + } else if (forkType == MAINNET) { + // cheats.selectFork(mainnetForkId); + string memory deploymentInfoPath = "script/configs/mainnet/Mainnet_current_deployment.config.json"; + _parseDeployedContracts(deploymentInfoPath); + + // Unpause to enable deposits and withdrawals for initializing random user state + cheats.prank(eigenLayerPauserReg.unpauser()); + strategyManager.unpause(0); + + // Add deployed strategies to lstStrats and allStrats + for (uint i; i < deployedStrategyArray.length; i++) { + IStrategy strategy = IStrategy(deployedStrategyArray[i]); + + if (tokensNotTested[address(strategy.underlyingToken())]) { + continue; + } + + // Add to lstStrats and allStrats + lstStrats.push(strategy); + allStrats.push(strategy); + allTokens.push(strategy.underlyingToken()); + } + + // Create time machine and set block timestamp forward so we can create EigenPod proofs in the past + timeMachine = new TimeMachine(); + beaconChainOracle = new BeaconChainOracleMock(); + // Create mock beacon chain / proof gen interface + beaconChain = new BeaconChainMock(timeMachine, beaconChainOracle, eigenPodManager); + } else if (forkType == HOLESKY) { + revert("_deployOrFetchContracts - holesky tests currently broken sorry"); + // cheats.selectFork(holeskyForkId); + string memory deploymentInfoPath = "script/configs/holesky/Holesky_current_deployment.config.json"; + _parseDeployedContracts(deploymentInfoPath); + + // Add deployed strategies to lstStrats and allStrats + for (uint i; i < deployedStrategyArray.length; i++) { + IStrategy strategy = IStrategy(deployedStrategyArray[i]); + + if (tokensNotTested[address(strategy.underlyingToken())]) { + continue; + } + + // Add to lstStrats and allStrats + lstStrats.push(strategy); + allStrats.push(strategy); + allTokens.push(strategy.underlyingToken()); + } + + // Update deposit contract to be a mock + ethPOSDeposit = new ETHPOSDepositMock(); + eigenPodImplementation = new EigenPod( + ethPOSDeposit, + eigenPodImplementation.delayedWithdrawalRouter(), + eigenPodImplementation.eigenPodManager(), + eigenPodImplementation.MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR(), + 0 + ); + // Create time machine and set block timestamp forward so we can create EigenPod proofs in the past + timeMachine = new TimeMachine(); + beaconChainOracle = new BeaconChainOracleMock(); + // Create mock beacon chain / proof gen interface + beaconChain = new BeaconChainMock(timeMachine, beaconChainOracle, eigenPodManager); + + cheats.startPrank(executorMultisig); + eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); + eigenPodManager.updateBeaconChainOracle(beaconChainOracle); + cheats.stopPrank(); + + } else { + revert("_deployOrFetchContracts: unimplemented forkType"); + } + } + /** * @dev Create a new User with a random config using the range defined in `_configRand` * @@ -346,27 +752,93 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { uint assetType = _randAssetType(); uint userType = _randUserType(); - // Create User contract based on deposit type: - User user; - if (userType == DEFAULT) { - user = new User(name); - } else if (userType == ALT_METHODS) { - // User will use nonstandard methods like: - // `delegateToBySignature` and `depositIntoStrategyWithSignature` - user = User(new User_AltMethods(name)); - } else { - revert("_randUser: unimplemented userType"); - } + // Deploy new User contract + User user = _genRandUser(name, userType); // For the specific asset selection we made, get a random assortment of // strategies and deal the user some corresponding underlying token balances (IStrategy[] memory strategies, uint[] memory tokenBalances) = _dealRandAssets(user, assetType); - _printUserInfo(assetType, userType, strategies, tokenBalances); + _printUserInfo(name, assetType, userType, strategies, tokenBalances); + return (user, strategies, tokenBalances); + } + + /// @dev Create a new user without native ETH. See _randUser above for standard usage + function _randUser_NoETH(string memory name) internal returns (User, IStrategy[] memory, uint[] memory) { + // For the new user, select what type of assets they'll have and whether + // they'll use `xWithSignature` methods. + // + // The values selected here are in the ranges configured via `_configRand` + uint userType = _randUserType(); + // Pick the user's asset distribution, removing "native ETH" as an option + // I'm sorry if this eventually leads to a bug that's really hard to track down + uint assetType = _randAssetType(); + if (assetType == HOLDS_ETH) { + assetType = NO_ASSETS; + } else if (assetType == HOLDS_ALL) { + assetType = HOLDS_LST; + } + + // Deploy new User contract + User user = _genRandUser(name, userType); + + // For the specific asset selection we made, get a random assortment of + // strategies and deal the user some corresponding underlying token balances + (IStrategy[] memory strategies, uint[] memory tokenBalances) = _dealRandAssets(user, assetType); + + _printUserInfo(name, assetType, userType, strategies, tokenBalances); return (user, strategies, tokenBalances); } + function _genRandUser(string memory name, uint userType) internal returns (User) { + // Create User contract based on userType: + User user; + if (forkType == LOCAL) { + user = new User(name); + + if (userType == DEFAULT) { + user = new User(name); + } else if (userType == ALT_METHODS) { + // User will use nonstandard methods like: + // `delegateToBySignature` and `depositIntoStrategyWithSignature` + user = User(new User_AltMethods(name)); + } else { + revert("_randUser: unimplemented userType"); + } + } else if (forkType == MAINNET) { + if (userType == DEFAULT) { + user = User(new User_M1(name)); + } else if (userType == ALT_METHODS) { + // User will use nonstandard methods like: + // `delegateToBySignature` and `depositIntoStrategyWithSignature` + user = User(new User_M1_AltMethods(name)); + } else { + revert("_randUser: unimplemented userType"); + } + + } else if (forkType == HOLESKY) { + // User deployment for Holesky is exact same as holesky. + // Current Holesky deployment is up to date and no deprecated interfaces have been added. + + user = new User(name); + + if (userType == DEFAULT) { + user = new User(name); + } else if (userType == ALT_METHODS) { + // User will use nonstandard methods like: + // `delegateToBySignature` and `depositIntoStrategyWithSignature` + user = User(new User_AltMethods(name)); + } else { + revert("_randUser: unimplemented userType"); + } + } else { + revert("_randUser: unimplemented forkType"); + } + + return user; + } + /// @dev For a given `assetType`, select a random assortment of strategies and assets /// NO_ASSETS - return will be empty /// HOLDS_LST - `strategies` will be a random subset of initialized strategies @@ -376,18 +848,15 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { /// HOLDS_ALL - `strategies` will contain ALL initialized strategies AND BEACONCHAIN_ETH_STRAT, and /// `tokenBalances` will contain random token/eth balances accordingly function _dealRandAssets(User user, uint assetType) internal returns (IStrategy[] memory, uint[] memory) { - IStrategy[] memory strategies; uint[] memory tokenBalances; - if (assetType == NO_ASSETS) { strategies = new IStrategy[](0); tokenBalances = new uint[](0); } else if (assetType == HOLDS_LST) { - + assetType = HOLDS_LST; // Select a random number of assets uint numAssets = _randUint({ min: 1, max: lstStrats.length }); - strategies = new IStrategy[](numAssets); tokenBalances = new uint[](numAssets); @@ -395,10 +864,9 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { for (uint i = 0; i < numAssets; i++) { IStrategy strat = lstStrats[i]; IERC20 underlyingToken = strat.underlyingToken(); - uint balance = _randUint({ min: MIN_BALANCE, max: MAX_BALANCE }); - StdCheats.deal(address(underlyingToken), address(user), balance); + StdCheats.deal(address(underlyingToken), address(user), balance); tokenBalances[i] = balance; strategies[i] = strat; } @@ -421,10 +889,9 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { for (uint i = 0; i < numLSTs; i++) { IStrategy strat = lstStrats[i]; IERC20 underlyingToken = strat.underlyingToken(); - uint balance = _randUint({ min: MIN_BALANCE, max: MAX_BALANCE }); - StdCheats.deal(address(underlyingToken), address(user), balance); + StdCheats.deal(address(underlyingToken), address(user), balance); tokenBalances[i] = balance; strategies[i] = strat; } @@ -443,6 +910,28 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { return (strategies, tokenBalances); } + /// @dev By default will have a assetType of HOLDS_LST + function _dealRandAssets_M1(User user) internal returns (IStrategy[] memory, uint[] memory) { + // Select a random number of assets + uint numAssets = _randUint({ min: 1, max: lstStrats.length }); + + IStrategy[] memory strategies = new IStrategy[](numAssets); + uint[] memory tokenBalances = new uint[](numAssets); + + // For each asset, award the user a random balance of the underlying token + for (uint i = 0; i < numAssets; i++) { + IStrategy strat = lstStrats[i]; + IERC20 underlyingToken = strat.underlyingToken(); + uint balance = _randUint({ min: MIN_BALANCE, max: MAX_BALANCE }); + + StdCheats.deal(address(underlyingToken), address(user), balance); + tokenBalances[i] = balance; + strategies[i] = strat; + } + + return (strategies, tokenBalances); + } + /// @dev Uses `random` to return a random uint, with a range given by `min` and `max` (inclusive) /// @return `min` <= result <= `max` function _randUint(uint min, uint max) internal returns (uint) { @@ -487,7 +976,7 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { uint userType = uint(uint8(userTypes[idx])); return userType; - } + } /** * @dev Converts a bitmap into an array of bytes @@ -509,15 +998,18 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { } function _printUserInfo( + string memory name, uint assetType, uint userType, IStrategy[] memory strategies, uint[] memory tokenBalances ) internal { - emit log("Creating user:"); - emit log_named_string("assetType: ", assetTypeToStr[assetType]); - emit log_named_string("userType: ", userTypeToStr[userType]); + emit log("===Created User==="); + emit log_named_string("Name", name); + emit log_named_string("assetType", assetTypeToStr[assetType]); + emit log_named_string("userType", userTypeToStr[userType]); + emit log_named_string("forkType", forkTypeToStr[forkType]); emit log_named_uint("num assets: ", strategies.length); @@ -534,5 +1026,12 @@ abstract contract IntegrationDeployer is Test, IUserDeployer { emit log_named_uint("token balance: ", tokenBalances[i]); } } + + emit log("=================="); + } + + /// @dev Helper because solidity syntax is exhausting + function _hash(string memory s) internal pure returns (bytes32) { + return keccak256(abi.encodePacked(s)); } -} \ No newline at end of file +} diff --git a/src/test/integration/README.md b/src/test/integration/README.md index e1c2b75af..992d2a326 100644 --- a/src/test/integration/README.md +++ b/src/test/integration/README.md @@ -6,6 +6,13 @@ Good question. This folder contains the integration framework and tests for Eigenlayer core, which orchestrates the deployment of all EigenLayer core contracts to fuzz high-level user flows across multiple user and asset types, and supports time-travelling state lookups to quickly compare past and present states (please try to avoid preventing your own birth). +**If you want to know how to run the tests**: + +* Local: `forge t --mc Integration` +* Mainnet fork tests: `env FOUNDRY_PROFILE=forktest forge t --mc Integration` + +Note that for mainnet fork tests, you'll need to set the `RPC_MAINNET` environment variable to your RPC provider of choice! + **If you want to know where the tests are**, take a look at `/tests`. We're doing one test contract per top-level flow, and defining multiple test functions for variants on that flow. e.g. if you're testing the flow "deposit into strategies -> delegate to operator -> queue withdrawal -> complete withdrawal", that's it's own test contract. For variants where withdrawals are completed "as tokens" vs "as shares," those are their own functions inside that contract. @@ -93,4 +100,16 @@ function testFuzz_deposit_delegate_EXAMPLE(uint24 _random) public { ### What needs to be done? * Suggest or PR cleanup if you have ideas. Currently, the `IntegrationDeployer` contract is pretty messy. -* Coordinate in Slack to pick out some user flows to write tests for! \ No newline at end of file +* Coordinate in Slack to pick out some user flows to write tests for! + +#### Reduce RPC spam for fork tests + +Currently our mainnet fork tests spam whatever RPC we use. We can improve this in the future - apparently the meta is: + +> Use an anvil node to fork the network, you can write a script to make some changes to the forked network for setup etc, then fork your local node in your test. +> Effectively you just setup an anvil node with the command +`anvil -f RPC_URL ` +You can use `anvil -h` for more info on what it can do. + +> Then in your test you use the vm.createSelectFork command in your setup with the argument to point to your local anvil node which is basically a copy of the rpc you set it up as. +> If you want to do some setup before running your tests you can write a script file and broadcast the setup transactions to your local anvil node (make sure to use one of the private keys anvil gives you) \ No newline at end of file diff --git a/src/test/integration/TimeMachine.t.sol b/src/test/integration/TimeMachine.t.sol index 86a7c8930..7158f9db8 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.12; import "forge-std/Test.sol"; @@ -42,4 +42,4 @@ contract TimeMachine is Test { proofGenStartTime = uint64(block.timestamp); cheats.warp(block.timestamp + secondsAgo); } -} \ No newline at end of file +} diff --git a/src/test/integration/deprecatedInterfaces/mainnet/BeaconChainProofs.sol b/src/test/integration/deprecatedInterfaces/mainnet/BeaconChainProofs.sol new file mode 100644 index 000000000..89af42013 --- /dev/null +++ b/src/test/integration/deprecatedInterfaces/mainnet/BeaconChainProofs.sol @@ -0,0 +1,264 @@ +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.12; + +import "src/contracts/libraries/Merkle.sol"; +import "src/contracts/libraries/Endian.sol"; + +// DEPRECATED BeaconChainProofs at commit hash https://github.com/Layr-Labs/eigenlayer-contracts/tree/0139d6213927c0a7812578899ddd3dda58051928 +//Utility library for parsing and PHASE0 beacon chain block headers +//SSZ Spec: https://github.com/ethereum/consensus-specs/blob/dev/ssz/simple-serialize.md#merkleization +//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_DeprecatedM1 { + // constants are the number of fields and the heights of the different merkle trees used in merkleizing beacon chain containers + uint256 internal constant NUM_BEACON_BLOCK_HEADER_FIELDS = 5; + uint256 internal constant BEACON_BLOCK_HEADER_FIELD_TREE_HEIGHT = 3; + + uint256 internal constant NUM_BEACON_BLOCK_BODY_FIELDS = 11; + uint256 internal constant BEACON_BLOCK_BODY_FIELD_TREE_HEIGHT = 4; + + uint256 internal constant NUM_BEACON_STATE_FIELDS = 21; + uint256 internal constant BEACON_STATE_FIELD_TREE_HEIGHT = 5; + + uint256 internal constant NUM_ETH1_DATA_FIELDS = 3; + uint256 internal constant ETH1_DATA_FIELD_TREE_HEIGHT = 2; + + uint256 internal constant NUM_VALIDATOR_FIELDS = 8; + uint256 internal constant VALIDATOR_FIELD_TREE_HEIGHT = 3; + + uint256 internal constant NUM_EXECUTION_PAYLOAD_HEADER_FIELDS = 15; + uint256 internal constant EXECUTION_PAYLOAD_HEADER_FIELD_TREE_HEIGHT = 4; + + + uint256 internal constant NUM_EXECUTION_PAYLOAD_FIELDS = 15; + uint256 internal constant EXECUTION_PAYLOAD_FIELD_TREE_HEIGHT = 4; + + + // HISTORICAL_ROOTS_LIMIT = 2**24, so tree height is 24 + uint256 internal constant HISTORICAL_ROOTS_TREE_HEIGHT = 24; + + // HISTORICAL_BATCH is root of state_roots and block_root, so number of leaves = 2^1 + uint256 internal constant HISTORICAL_BATCH_TREE_HEIGHT = 1; + + // SLOTS_PER_HISTORICAL_ROOT = 2**13, so tree height is 13 + uint256 internal constant STATE_ROOTS_TREE_HEIGHT = 13; + uint256 internal constant BLOCK_ROOTS_TREE_HEIGHT = 13; + + + uint256 internal constant NUM_WITHDRAWAL_FIELDS = 4; + // tree height for hash tree of an individual withdrawal container + uint256 internal constant WITHDRAWAL_FIELD_TREE_HEIGHT = 2; + + uint256 internal constant VALIDATOR_TREE_HEIGHT = 40; + //refer to the eigenlayer-cli proof library. Despite being the same dimensions as the validator tree, the balance tree is merkleized differently + uint256 internal constant BALANCE_TREE_HEIGHT = 38; + + // MAX_WITHDRAWALS_PER_PAYLOAD = 2**4, making tree height = 4 + uint256 internal constant WITHDRAWALS_TREE_HEIGHT = 4; + + //in beacon block body + uint256 internal constant EXECUTION_PAYLOAD_INDEX = 9; + + // in beacon block header + uint256 internal constant STATE_ROOT_INDEX = 3; + uint256 internal constant PROPOSER_INDEX_INDEX = 1; + uint256 internal constant SLOT_INDEX = 0; + uint256 internal constant BODY_ROOT_INDEX = 4; + // in beacon state + uint256 internal constant STATE_ROOTS_INDEX = 6; + uint256 internal constant BLOCK_ROOTS_INDEX = 5; + uint256 internal constant HISTORICAL_ROOTS_INDEX = 7; + uint256 internal constant ETH_1_ROOT_INDEX = 8; + uint256 internal constant VALIDATOR_TREE_ROOT_INDEX = 11; + uint256 internal constant BALANCE_INDEX = 12; + uint256 internal constant EXECUTION_PAYLOAD_HEADER_INDEX = 24; + uint256 internal constant HISTORICAL_BATCH_STATE_ROOT_INDEX = 1; + + // in validator + uint256 internal constant VALIDATOR_WITHDRAWAL_CREDENTIALS_INDEX = 1; + uint256 internal constant VALIDATOR_BALANCE_INDEX = 2; + uint256 internal constant VALIDATOR_SLASHED_INDEX = 3; + uint256 internal constant VALIDATOR_WITHDRAWABLE_EPOCH_INDEX = 7; + + // in execution payload header + uint256 internal constant BLOCK_NUMBER_INDEX = 6; + uint256 internal constant WITHDRAWALS_ROOT_INDEX = 14; + + //in execution payload + uint256 internal constant WITHDRAWALS_INDEX = 14; + + // in withdrawal + uint256 internal constant WITHDRAWAL_VALIDATOR_INDEX_INDEX = 1; + uint256 internal constant WITHDRAWAL_VALIDATOR_AMOUNT_INDEX = 3; + + //In historicalBatch + uint256 internal constant HISTORICALBATCH_STATEROOTS_INDEX = 1; + + //Misc Constants + uint256 internal constant SLOTS_PER_EPOCH = 32; + + bytes8 internal constant UINT64_MASK = 0xffffffffffffffff; + + + + struct WithdrawalProofs { + bytes blockHeaderProof; + bytes withdrawalProof; + bytes slotProof; + bytes executionPayloadProof; + bytes blockNumberProof; + uint64 blockHeaderRootIndex; + uint64 withdrawalIndex; + bytes32 blockHeaderRoot; + bytes32 blockBodyRoot; + bytes32 slotRoot; + bytes32 blockNumberRoot; + bytes32 executionPayloadRoot; + } + + struct ValidatorFieldsAndBalanceProofs { + bytes validatorFieldsProof; + bytes validatorBalanceProof; + bytes32 balanceRoot; + } + + struct ValidatorFieldsProof { + bytes validatorProof; + uint40 validatorIndex; + } + + /** + * + * @notice This function is parses the balanceRoot to get the uint64 balance of a validator. During merkleization of the + * beacon state balance tree, four uint64 values (making 32 bytes) are grouped together and treated as a single leaf in the merkle tree. Thus the + * validatorIndex mod 4 is used to determine which of the four uint64 values to extract from the balanceRoot. + * @param validatorIndex is the index of the validator being proven for. + * @param balanceRoot is the combination of 4 validator balances being proven for. + * @return The validator's balance, in Gwei + */ + function getBalanceFromBalanceRoot(uint40 validatorIndex, bytes32 balanceRoot) internal pure returns (uint64) { + uint256 bitShiftAmount = (validatorIndex % 4) * 64; + bytes32 validatorBalanceLittleEndian = bytes32((uint256(balanceRoot) << bitShiftAmount)); + uint64 validatorBalance = Endian.fromLittleEndianUint64(validatorBalanceLittleEndian); + return validatorBalance; + } + + /** + * @notice This function verifies merkle proofs of the fields of a certain validator against a beacon chain state root + * @param validatorIndex the index of the proven validator + * @param beaconStateRoot is the beacon chain state root to be proven against. + * @param proof is the data used in proving the validator's fields + * @param validatorFields the claimed fields of the validator + */ + function verifyValidatorFields( + uint40 validatorIndex, + bytes32 beaconStateRoot, + bytes calldata proof, + bytes32[] calldata validatorFields + ) internal view { + + require(validatorFields.length == 2**VALIDATOR_FIELD_TREE_HEIGHT, "BeaconChainProofs.verifyValidatorFields: Validator fields has incorrect length"); + + /** + * Note: the length of the validator merkle proof is BeaconChainProofs.VALIDATOR_TREE_HEIGHT + 1. + * There is an additional layer added by hashing the root with the length of the validator list + */ + require(proof.length == 32 * ((VALIDATOR_TREE_HEIGHT + 1) + BEACON_STATE_FIELD_TREE_HEIGHT), "BeaconChainProofs.verifyValidatorFields: Proof has incorrect length"); + uint256 index = (VALIDATOR_TREE_ROOT_INDEX << (VALIDATOR_TREE_HEIGHT + 1)) | uint256(validatorIndex); + // merkleize the validatorFields to get the leaf to prove + bytes32 validatorRoot = Merkle.merkleizeSha256(validatorFields); + + // verify the proof of the validatorRoot against the beaconStateRoot + require(Merkle.verifyInclusionSha256(proof, beaconStateRoot, validatorRoot, index), "BeaconChainProofs.verifyValidatorFields: Invalid merkle proof"); + } + + /** + * @notice This function verifies merkle proofs of the balance of a certain validator against a beacon chain state root + * @param validatorIndex the index of the proven validator + * @param beaconStateRoot is the beacon chain state root to be proven against. + * @param proof is the proof of the balance against the beacon chain state root + * @param balanceRoot is the serialized balance used to prove the balance of the validator (refer to `getBalanceFromBalanceRoot` above for detailed explanation) + */ + function verifyValidatorBalance( + uint40 validatorIndex, + bytes32 beaconStateRoot, + bytes calldata proof, + bytes32 balanceRoot + ) internal view { + require(proof.length == 32 * ((BALANCE_TREE_HEIGHT + 1) + BEACON_STATE_FIELD_TREE_HEIGHT), "BeaconChainProofs.verifyValidatorBalance: Proof has incorrect length"); + + /** + * the beacon state's balance list is a list of uint64 values, and these are grouped together in 4s when merkleized. + * Therefore, the index of the balance of a validator is validatorIndex/4 + */ + uint256 balanceIndex = uint256(validatorIndex/4); + balanceIndex = (BALANCE_INDEX << (BALANCE_TREE_HEIGHT + 1)) | balanceIndex; + + require(Merkle.verifyInclusionSha256(proof, beaconStateRoot, balanceRoot, balanceIndex), "BeaconChainProofs.verifyValidatorBalance: Invalid merkle proof"); + } + + /** + * @notice This function verifies the slot and the withdrawal fields for a given withdrawal + * @param beaconStateRoot is the beacon chain state root to be proven against. + * @param proofs is the provided set of merkle proofs + * @param withdrawalFields is the serialized withdrawal container to be proven + */ + function verifyWithdrawalProofs( + bytes32 beaconStateRoot, + WithdrawalProofs calldata proofs, + bytes32[] calldata withdrawalFields + ) internal view { + require(withdrawalFields.length == 2**WITHDRAWAL_FIELD_TREE_HEIGHT, "BeaconChainProofs.verifyWithdrawalProofs: withdrawalFields has incorrect length"); + + require(proofs.blockHeaderRootIndex < 2**BLOCK_ROOTS_TREE_HEIGHT, "BeaconChainProofs.verifyWithdrawalProofs: blockRootIndex is too large"); + require(proofs.withdrawalIndex < 2**WITHDRAWALS_TREE_HEIGHT, "BeaconChainProofs.verifyWithdrawalProofs: withdrawalIndex is too large"); + + // verify the block header proof length + require(proofs.blockHeaderProof.length == 32 * (BEACON_STATE_FIELD_TREE_HEIGHT + BLOCK_ROOTS_TREE_HEIGHT), + "BeaconChainProofs.verifyWithdrawalProofs: blockHeaderProof has incorrect length"); + require(proofs.withdrawalProof.length == 32 * (EXECUTION_PAYLOAD_HEADER_FIELD_TREE_HEIGHT + WITHDRAWALS_TREE_HEIGHT + 1), + "BeaconChainProofs.verifyWithdrawalProofs: withdrawalProof has incorrect length"); + require(proofs.executionPayloadProof.length == 32 * (BEACON_BLOCK_HEADER_FIELD_TREE_HEIGHT + BEACON_BLOCK_BODY_FIELD_TREE_HEIGHT), + "BeaconChainProofs.verifyWithdrawalProofs: executionPayloadProof has incorrect length"); + require(proofs.slotProof.length == 32 * (BEACON_BLOCK_HEADER_FIELD_TREE_HEIGHT), + "BeaconChainProofs.verifyWithdrawalProofs: slotProof has incorrect length"); + require(proofs.blockNumberProof.length == 32 * (EXECUTION_PAYLOAD_HEADER_FIELD_TREE_HEIGHT), + "BeaconChainProofs.verifyWithdrawalProofs: blockNumberProof has incorrect length"); + + + /** + * Computes the block_header_index relative to the beaconStateRoot. It concatenates the indexes of all the + * intermediate root indexes from the bottom of the sub trees (the block header container) to the top of the tree + */ + uint256 blockHeaderIndex = BLOCK_ROOTS_INDEX << (BLOCK_ROOTS_TREE_HEIGHT) | uint256(proofs.blockHeaderRootIndex); + // Verify the blockHeaderRoot against the beaconStateRoot + require(Merkle.verifyInclusionSha256(proofs.blockHeaderProof, beaconStateRoot, proofs.blockHeaderRoot, blockHeaderIndex), + "BeaconChainProofs.verifyWithdrawalProofs: Invalid block header merkle proof"); + + //Next we verify the slot against the blockHeaderRoot + require(Merkle.verifyInclusionSha256(proofs.slotProof, proofs.blockHeaderRoot, proofs.slotRoot, SLOT_INDEX), "BeaconChainProofs.verifyWithdrawalProofs: Invalid slot merkle proof"); + + // Next we verify the executionPayloadRoot against the blockHeaderRoot + uint256 executionPayloadIndex = BODY_ROOT_INDEX << (BEACON_BLOCK_BODY_FIELD_TREE_HEIGHT)| EXECUTION_PAYLOAD_INDEX ; + require(Merkle.verifyInclusionSha256(proofs.executionPayloadProof, proofs.blockHeaderRoot, proofs.executionPayloadRoot, executionPayloadIndex), + "BeaconChainProofs.verifyWithdrawalProofs: Invalid executionPayload merkle proof"); + + // Next we verify the blockNumberRoot against the executionPayload root + require(Merkle.verifyInclusionSha256(proofs.blockNumberProof, proofs.executionPayloadRoot, proofs.blockNumberRoot, BLOCK_NUMBER_INDEX), + "BeaconChainProofs.verifyWithdrawalProofs: Invalid blockNumber merkle proof"); + + /** + * Next we verify the withdrawal fields against the blockHeaderRoot: + * First we compute the withdrawal_index relative to the blockHeaderRoot by concatenating the indexes of all the + * intermediate root indexes from the bottom of the sub trees (the withdrawal container) to the top, the blockHeaderRoot. + * Then we calculate merkleize the withdrawalFields container to calculate the the withdrawalRoot. + * Finally we verify the withdrawalRoot against the executionPayloadRoot. + */ + uint256 withdrawalIndex = WITHDRAWALS_INDEX << (WITHDRAWALS_TREE_HEIGHT + 1) | uint256(proofs.withdrawalIndex); + bytes32 withdrawalRoot = Merkle.merkleizeSha256(withdrawalFields); + require(Merkle.verifyInclusionSha256(proofs.withdrawalProof, proofs.executionPayloadRoot, withdrawalRoot, withdrawalIndex), + "BeaconChainProofs.verifyWithdrawalProofs: Invalid withdrawal merkle proof"); + } + +} diff --git a/src/test/integration/deprecatedInterfaces/mainnet/IBeaconChainOracle.sol b/src/test/integration/deprecatedInterfaces/mainnet/IBeaconChainOracle.sol new file mode 100644 index 000000000..2bb2c818e --- /dev/null +++ b/src/test/integration/deprecatedInterfaces/mainnet/IBeaconChainOracle.sol @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +/** + * @notice DEPRECATED INTERFACE at commit hash https://github.com/Layr-Labs/eigenlayer-contracts/tree/0139d6213927c0a7812578899ddd3dda58051928 + * @title Interface for the BeaconStateOracle contract. + * @author Layr Labs, Inc. + * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service + */ +interface IBeaconChainOracle_DeprecatedM1 { + /// @notice Largest blockNumber that has been confirmed by the oracle. + function latestConfirmedOracleBlockNumber() external view returns(uint64); + /// @notice Mapping: Beacon Chain blockNumber => the Beacon Chain state root at the specified blockNumber. + /// @dev This will return `bytes32(0)` if the state root at the specified blockNumber is not yet confirmed. + function beaconStateRootAtBlockNumber(uint64 blockNumber) external view returns(bytes32); + + /// @notice Mapping: address => whether or not the address is in the set of oracle signers. + function isOracleSigner(address _oracleSigner) external view returns(bool); + + /// @notice Mapping: Beacon Chain blockNumber => oracle signer address => whether or not the oracle signer has voted on the state root at the blockNumber. + function hasVoted(uint64 blockNumber, address oracleSigner) external view returns(bool); + + /// @notice Mapping: Beacon Chain blockNumber => state root => total number of oracle signer votes for the state root at the blockNumber. + function stateRootVotes(uint64 blockNumber, bytes32 stateRoot) external view returns(uint256); + + /// @notice Total number of members of the set of oracle signers. + function totalOracleSigners() external view returns(uint256); + + /** + * @notice Number of oracle signers that must vote for a state root in order for the state root to be confirmed. + * Adjustable by this contract's owner through use of the `setThreshold` function. + * @dev We note that there is an edge case -- when the threshold is adjusted downward, if a state root already has enough votes to meet the *new* threshold, + * the state root must still receive one additional vote from an oracle signer to be confirmed. This behavior is intended, to minimize unexpected root confirmations. + */ + function threshold() external view returns(uint256); + + /** + * @notice Owner-only function used to modify the value of the `threshold` variable. + * @param _threshold Desired new value for the `threshold` variable. Function will revert if this is set to zero. + */ + function setThreshold(uint256 _threshold) external; + + /** + * @notice Owner-only function used to add a signer to the set of oracle signers. + * @param _oracleSigners Array of address to be added to the set. + * @dev Function will have no effect on the i-th input address if `_oracleSigners[i]`is already in the set of oracle signers. + */ + function addOracleSigners(address[] memory _oracleSigners) external; + + /** + * @notice Owner-only function used to remove a signer from the set of oracle signers. + * @param _oracleSigners Array of address to be removed from the set. + * @dev Function will have no effect on the i-th input address if `_oracleSigners[i]`is already not in the set of oracle signers. + */ + function removeOracleSigners(address[] memory _oracleSigners) external; + + /** + * @notice Called by a member of the set of oracle signers to assert that the Beacon Chain state root is `stateRoot` at `blockNumber`. + * @dev The state root will be finalized once the total number of votes *for this exact state root at this exact blockNumber* meets the `threshold` value. + * @param blockNumber The Beacon Chain blockNumber of interest. + * @param stateRoot The Beacon Chain state root that the caller asserts was the correct root, at the specified `blockNumber`. + */ + function voteForBeaconChainStateRoot(uint64 blockNumber, bytes32 stateRoot) external; +} diff --git a/src/test/integration/deprecatedInterfaces/mainnet/IDelayedWithdrawalRouter.sol b/src/test/integration/deprecatedInterfaces/mainnet/IDelayedWithdrawalRouter.sol new file mode 100644 index 000000000..8abb54a86 --- /dev/null +++ b/src/test/integration/deprecatedInterfaces/mainnet/IDelayedWithdrawalRouter.sol @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +/// @notice DEPRECATED INTERFACE at commit hash https://github.com/Layr-Labs/eigenlayer-contracts/tree/0139d6213927c0a7812578899ddd3dda58051928 +interface IDelayedWithdrawalRouter_DeprecatedM1 { + // struct used to pack data into a single storage slot + struct DelayedWithdrawal { + uint224 amount; + uint32 blockCreated; + } + + // struct used to store a single users delayedWithdrawal data + struct UserDelayedWithdrawals { + uint256 delayedWithdrawalsCompleted; + DelayedWithdrawal[] delayedWithdrawals; + } + + /** + * @notice Creates an delayed withdrawal for `msg.value` to the `recipient`. + * @dev Only callable by the `podOwner`'s EigenPod contract. + */ + function createDelayedWithdrawal(address podOwner, address recipient) external payable; + + /** + * @notice Called in order to withdraw delayed withdrawals made to the `recipient` that have passed the `withdrawalDelayBlocks` period. + * @param recipient The address to claim delayedWithdrawals for. + * @param maxNumberOfWithdrawalsToClaim Used to limit the maximum number of withdrawals to loop through claiming. + */ + function claimDelayedWithdrawals(address recipient, uint256 maxNumberOfWithdrawalsToClaim) external; + + /** + * @notice Called in order to withdraw delayed withdrawals made to the caller that have passed the `withdrawalDelayBlocks` period. + * @param maxNumberOfWithdrawalsToClaim Used to limit the maximum number of withdrawals to loop through claiming. + */ + function claimDelayedWithdrawals(uint256 maxNumberOfWithdrawalsToClaim) external; + + /// @notice Owner-only function for modifying the value of the `withdrawalDelayBlocks` variable. + function setWithdrawalDelayBlocks(uint256 newValue) external; + + /// @notice Getter function for the mapping `_userWithdrawals` + function userWithdrawals(address user) external view returns (UserDelayedWithdrawals memory); + + /// @notice Getter function to get all delayedWithdrawals of the `user` + function getUserDelayedWithdrawals(address user) external view returns (DelayedWithdrawal[] memory); + + /// @notice Getter function to get all delayedWithdrawals that are currently claimable by the `user` + function getClaimableUserDelayedWithdrawals(address user) external view returns (DelayedWithdrawal[] memory); + + /// @notice Getter function for fetching the delayedWithdrawal at the `index`th entry from the `_userWithdrawals[user].delayedWithdrawals` array + function userDelayedWithdrawalByIndex(address user, uint256 index) external view returns (DelayedWithdrawal memory); + + /// @notice Getter function for fetching the length of the delayedWithdrawals array of a specific user + function userWithdrawalsLength(address user) external view returns (uint256); + + /// @notice Convenience function for checking whether or not the delayedWithdrawal at the `index`th entry from the `_userWithdrawals[user].delayedWithdrawals` array is currently claimable + function canClaimDelayedWithdrawal(address user, uint256 index) external view returns (bool); + + /** + * @notice Delay enforced by this contract for completing any delayedWithdrawal. 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 withdrawalDelayBlocks() external view returns (uint256); +} diff --git a/src/test/integration/deprecatedInterfaces/mainnet/IEigenPod.sol b/src/test/integration/deprecatedInterfaces/mainnet/IEigenPod.sol new file mode 100644 index 000000000..72a698e84 --- /dev/null +++ b/src/test/integration/deprecatedInterfaces/mainnet/IEigenPod.sol @@ -0,0 +1,148 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "./BeaconChainProofs.sol"; +import "./IEigenPodManager.sol"; +import "./IBeaconChainOracle.sol"; + +/** + * @notice DEPRECATED INTERFACE at commit hash https://github.com/Layr-Labs/eigenlayer-contracts/tree/0139d6213927c0a7812578899ddd3dda58051928 + * @title The implementation contract used for restaking beacon chain ETH on EigenLayer + * @author Layr Labs, Inc. + * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service + * @notice The main functionalities are: + * - creating new ETH validators with their withdrawal credentials pointed to this contract + * - proving from beacon chain state roots that withdrawal credentials are pointed to this contract + * - proving from beacon chain state roots the balances of ETH validators with their withdrawal credentials + * pointed to this contract + * - updating aggregate balances in the EigenPodManager + * - withdrawing eth when withdrawals are initiated + * @dev Note that all beacon chain balances are stored as gwei within the beacon chain datastructures. We choose + * to account balances in terms of gwei in the EigenPod contract and convert to wei when making calls to other contracts + */ +interface IEigenPod_DeprecatedM1 { + enum VALIDATOR_STATUS { + INACTIVE, // doesnt exist + ACTIVE, // staked on ethpos and withdrawal credentials are pointed to the EigenPod + OVERCOMMITTED, // proven to be overcommitted to EigenLayer + WITHDRAWN // withdrawn from the Beacon Chain + } + + // this struct keeps track of PartialWithdrawalClaims + struct PartialWithdrawalClaim { + PARTIAL_WITHDRAWAL_CLAIM_STATUS status; + // block at which the PartialWithdrawalClaim was created + uint32 creationBlockNumber; + // last block (inclusive) in which the PartialWithdrawalClaim can be fraudproofed + uint32 fraudproofPeriodEndBlockNumber; + // amount of ETH -- in Gwei -- to be withdrawn until completion of this claim + uint64 partialWithdrawalAmountGwei; + } + + enum PARTIAL_WITHDRAWAL_CLAIM_STATUS { + REDEEMED, + PENDING, + FAILED + } + + /// @notice The amount of eth, in gwei, that is restaked per validator + function REQUIRED_BALANCE_GWEI() external view returns(uint64); + + /// @notice The amount of eth, in wei, that is restaked per validator + function REQUIRED_BALANCE_WEI() external view returns(uint256); + + /// @notice this is a mapping of validator indices to a Validator struct containing pertinent info about the validator + function validatorStatus(uint40 validatorIndex) external view returns(VALIDATOR_STATUS); + + /// @notice the amount of execution layer ETH in this contract that is staked in EigenLayer (i.e. withdrawn from beaconchain but not EigenLayer), + function restakedExecutionLayerGwei() external view returns(uint64); + + /// @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; + + /// @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; + + /** + * @notice Transfers `amountWei` in ether from this contract to the specified `recipient` address + * @notice Called by EigenPodManager to withdrawBeaconChainETH that has been added to the EigenPod's balance due to a withdrawal from the beacon chain. + * @dev Called during withdrawal or slashing. + * @dev Note that this function is marked as non-reentrant to prevent the recipient calling back into it + */ + function withdrawRestakedBeaconChainETH(address recipient, uint256 amount) external; + + /// @notice The single EigenPodManager for EigenLayer + function eigenPodManager() external view returns (IEigenPodManager_DeprecatedM1); + + /// @notice The owner of this EigenPod + function podOwner() external view returns (address); + + /// @notice an indicator of whether or not the podOwner has ever "fully restaked" by successfully calling `verifyCorrectWithdrawalCredentials`. + function hasRestaked() external view returns (bool); + + /// @notice block number of the most recent withdrawal + function mostRecentWithdrawalBlockNumber() external view returns (uint64); + + + ///@notice mapping that tracks proven partial withdrawals + function provenPartialWithdrawal(uint40 validatorIndex, uint64 slot) external view returns (bool); + + /** + * @notice This function verifies that the withdrawal credentials of the podOwner are pointed to + * this contract. It also verifies the current (not effective) balance of the validator. It verifies the provided proof of the ETH validator against the beacon chain state + * root, marks the validator as 'active' in EigenLayer, and credits the restaked ETH in Eigenlayer. + * @param oracleBlockNumber is the Beacon Chain blockNumber whose state root the `proof` will be proven against. + * @param validatorIndex is the index of the validator being proven, refer to consensus specs + * @param proofs is the bytes that prove the ETH validator's balance and withdrawal credentials against a beacon chain state root + * @param validatorFields are the fields of the "Validator Container", refer to consensus specs + * for details: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#validator + */ + function verifyWithdrawalCredentialsAndBalance( + uint64 oracleBlockNumber, + uint40 validatorIndex, + BeaconChainProofs_DeprecatedM1.ValidatorFieldsAndBalanceProofs memory proofs, + bytes32[] calldata validatorFields + ) external; + + /** + * @notice This function records an overcommitment of stake to EigenLayer on behalf of a certain ETH validator. + * If successful, the overcommitted balance is penalized (available for withdrawal whenever the pod's balance allows). + * The ETH validator's shares in the enshrined beaconChainETH strategy are also removed from the StrategyManager and undelegated. + * @param oracleBlockNumber The oracleBlockNumber whose state root the `proof` will be proven against. + * Must be within `VERIFY_OVERCOMMITTED_WINDOW_BLOCKS` of the current block. + * @param validatorIndex is the index of the validator being proven, refer to consensus specs + * @param proofs is the proof of the validator's balance and validatorFields in the balance tree and the balanceRoot to prove for + * @param beaconChainETHStrategyIndex is the index of the beaconChainETHStrategy for the pod owner for the callback to + * the StrategyManager in case it must be removed from the list of the podOwners strategies + * @param validatorFields are the fields of the "Validator Container", refer to consensus specs + * @dev For more details on the Beacon Chain spec, see: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#validator + */ + function verifyOvercommittedStake( + uint40 validatorIndex, + BeaconChainProofs_DeprecatedM1.ValidatorFieldsAndBalanceProofs calldata proofs, + bytes32[] calldata validatorFields, + uint256 beaconChainETHStrategyIndex, + uint64 oracleBlockNumber + ) external; + + /** + * @notice This function records a full withdrawal on behalf of one of the Ethereum validators for this EigenPod + * @param withdrawalProofs is the information needed to check the veracity of the block number and withdrawal being proven + * @param validatorFieldsProof is the proof of the validator's fields in the validator tree + * @param withdrawalFields are the fields of the withdrawal being proven + * @param validatorFields are the fields of the validator being proven + * @param beaconChainETHStrategyIndex is the index of the beaconChainETHStrategy for the pod owner for the callback to + * the EigenPodManager to the StrategyManager in case it must be removed from the podOwner's list of strategies + */ + function verifyAndProcessWithdrawal( + BeaconChainProofs_DeprecatedM1.WithdrawalProofs calldata withdrawalProofs, + bytes calldata validatorFieldsProof, + bytes32[] calldata validatorFields, + bytes32[] calldata withdrawalFields, + uint256 beaconChainETHStrategyIndex, + uint64 oracleBlockNumber + ) external; + + /// @notice Called by the pod owner to withdraw the balance of the pod when `hasRestaked` is set to false + function withdrawBeforeRestaking() external; +} diff --git a/src/test/integration/deprecatedInterfaces/mainnet/IEigenPodManager.sol b/src/test/integration/deprecatedInterfaces/mainnet/IEigenPodManager.sol new file mode 100644 index 000000000..d5795bf5d --- /dev/null +++ b/src/test/integration/deprecatedInterfaces/mainnet/IEigenPodManager.sol @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "./IStrategyManager.sol"; +import "./IEigenPod.sol"; +import "./IBeaconChainOracle.sol"; +import "src/contracts/interfaces/IPausable.sol"; + +/** + * @notice DEPRECATED INTERFACE at commit hash https://github.com/Layr-Labs/eigenlayer-contracts/tree/0139d6213927c0a7812578899ddd3dda58051928 + * @title Interface for factory that creates and manages solo staking pods that have their withdrawal credentials pointed to EigenLayer. + * @author Layr Labs, Inc. + * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service + */ + +interface IEigenPodManager_DeprecatedM1 is IPausable { + /** + * @notice Creates an EigenPod for the sender. + * @dev Function will revert if the `msg.sender` already has an EigenPod. + */ + function createPod() external; + + /** + * @notice Stakes for a new beacon chain validator on the sender's EigenPod. + * Also creates an EigenPod for the sender if they don't have one already. + * @param pubkey The 48 bytes public key of the beacon chain validator. + * @param signature The validator's signature of the deposit data. + * @param depositDataRoot The root/hash of the deposit data for the validator's deposit. + */ + function stake(bytes calldata pubkey, bytes calldata signature, bytes32 depositDataRoot) external payable; + + /** + * @notice Deposits/Restakes beacon chain ETH in EigenLayer on behalf of the owner of an EigenPod. + * @param podOwner The owner of the pod whose balance must be deposited. + * @param amount The amount of ETH to 'deposit' (i.e. be credited to the podOwner). + * @dev Callable only by the podOwner's EigenPod contract. + */ + function restakeBeaconChainETH(address podOwner, uint256 amount) external; + + /** + * @notice Removes beacon chain ETH from EigenLayer on behalf of the owner of an EigenPod, when the + * balance of a validator is lower than how much stake they have committed to EigenLayer + * @param podOwner The owner of the pod whose balance must be removed. + * @param beaconChainETHStrategyIndex is the index of the beaconChainETHStrategy for the pod owner for the callback to + * the StrategyManager in case it must be removed from the list of the podOwner's strategies + * @param amount The amount of ETH to remove. + * @dev Callable only by the podOwner's EigenPod contract. + */ + function recordOvercommittedBeaconChainETH(address podOwner, uint256 beaconChainETHStrategyIndex, uint256 amount) external; + + /** + * @notice Withdraws ETH from an EigenPod. The ETH must have first been withdrawn from the beacon chain. + * @param podOwner The owner of the pod whose balance must be withdrawn. + * @param recipient The recipient of the withdrawn ETH. + * @param amount The amount of ETH to withdraw. + * @dev Callable only by the StrategyManager contract. + */ + function withdrawRestakedBeaconChainETH(address podOwner, address recipient, uint256 amount) external; + + /** + * @notice Updates the oracle contract that provides the beacon chain state root + * @param newBeaconChainOracle is the new oracle contract being pointed to + * @dev Callable only by the owner of this contract (i.e. governance) + */ + function updateBeaconChainOracle(IBeaconChainOracle_DeprecatedM1 newBeaconChainOracle) external; + + /// @notice Returns the address of the `podOwner`'s EigenPod if it has been deployed. + function ownerToPod(address podOwner) external view returns(IEigenPod_DeprecatedM1); + + /// @notice Returns the address of the `podOwner`'s EigenPod (whether it is deployed yet or not). + function getPod(address podOwner) external view returns(IEigenPod_DeprecatedM1); + + /// @notice Oracle contract that provides updates to the beacon chain's state + function beaconChainOracle() external view returns(IBeaconChainOracle_DeprecatedM1); + + /// @notice Returns the Beacon Chain state root at `blockNumber`. Reverts if the Beacon Chain state root at `blockNumber` has not yet been finalized. + function getBeaconChainStateRoot(uint64 blockNumber) external view returns(bytes32); + + /// @notice EigenLayer's StrategyManager contract + function strategyManager() external view returns(IStrategyManager_DeprecatedM1); + + /// @notice EigenLayer's Slasher contract + function slasher() external view returns(ISlasher); + + function hasPod(address podOwner) external view returns (bool); +} diff --git a/src/test/integration/deprecatedInterfaces/mainnet/IStrategyManager.sol b/src/test/integration/deprecatedInterfaces/mainnet/IStrategyManager.sol new file mode 100644 index 000000000..be5745683 --- /dev/null +++ b/src/test/integration/deprecatedInterfaces/mainnet/IStrategyManager.sol @@ -0,0 +1,265 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "src/contracts/interfaces/IStrategy.sol"; +import "src/contracts/interfaces/ISlasher.sol"; +import "src/contracts/interfaces/IDelegationManager.sol"; + +/** + * @notice DEPRECATED INTERFACE at commit hash https://github.com/Layr-Labs/eigenlayer-contracts/tree/0139d6213927c0a7812578899ddd3dda58051928 + * @title Interface for the primary entrypoint for funds into EigenLayer. + * @author Layr Labs, Inc. + * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service + * @notice See the `StrategyManager` contract itself for implementation details. + */ +interface IStrategyManager_DeprecatedM1 { + // packed struct for queued withdrawals; helps deal with stack-too-deep errors + struct WithdrawerAndNonce { + address withdrawer; + uint96 nonce; + } + + /** + * Struct type used to specify an existing queued withdrawal. Rather than storing the entire struct, only a hash is stored. + * In functions that operate on existing queued withdrawals -- e.g. `startQueuedWithdrawalWaitingPeriod` or `completeQueuedWithdrawal`, + * the data is resubmitted and the hash of the submitted data is computed by `calculateWithdrawalRoot` and checked against the + * stored hash in order to confirm the integrity of the submitted data. + */ + struct QueuedWithdrawal { + IStrategy[] strategies; + uint256[] shares; + address depositor; + WithdrawerAndNonce withdrawerAndNonce; + uint32 withdrawalStartBlock; + address delegatedAddress; + } + + /** + * @notice Deposits `amount` of `token` into the specified `strategy`, with the resultant shares credited to `msg.sender` + * @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 depositor + * @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 shares); + + + /** + * @notice Deposits `amount` of beaconchain ETH into this contract on behalf of `staker` + * @param staker is the entity that is restaking in eigenlayer, + * @param amount is the amount of beaconchain ETH being restaked, + * @dev Only callable by EigenPodManager. + */ + function depositBeaconChainETH(address staker, uint256 amount) external; + + /** + * @notice Records an overcommitment event on behalf of a staker. The staker's beaconChainETH shares are decremented by `amount`. + * @param overcommittedPodOwner is the pod owner to be slashed + * @param beaconChainETHStrategyIndex is the index of the beaconChainETHStrategy in case it must be removed, + * @param amount is the amount to decrement the slashedAddress's beaconChainETHStrategy shares + * @dev Only callable by EigenPodManager. + */ + function recordOvercommittedBeaconChainETH(address overcommittedPodOwner, uint256 beaconChainETHStrategyIndex, uint256 amount) + external; + + /** + * @notice Used for depositing an asset into the specified strategy with the resultant shares credited to `staker`, + * who must sign off on the action. + * Note that the assets are transferred out/from the `msg.sender`, not from the `staker`; this function is explicitly designed + * purely to help one address deposit 'for' another. + * @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 depositor + * @param staker the staker that the deposited assets will be credited to + * @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. + * @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 on behalf of a staker that is 'frozen' (this function will revert if the `staker` 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 depositIntoStrategyWithSignature( + IStrategy strategy, + IERC20 token, + uint256 amount, + address staker, + uint256 expiry, + bytes memory signature + ) + external + returns (uint256 shares); + + /// @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 depositor's deposits and corresponding shares + * @return (depositor's strategies, shares in these strategies) + */ + function getDeposits(address depositor) external view returns (IStrategy[] memory, uint256[] memory); + + /// @notice Simple getter function that returns `stakerStrategyList[staker].length`. + function stakerStrategyListLength(address staker) external view returns (uint256); + + /** + * @notice Called by a staker to queue a withdrawal of the given amount of `shares` from each of the respective given `strategies`. + * @dev Stakers will complete their withdrawal by calling the 'completeQueuedWithdrawal' function. + * User shares are decreased in this function, but the total number of shares in each strategy remains the same. + * The total number of shares is decremented in the 'completeQueuedWithdrawal' function instead, which is where + * the funds are actually sent to the user through use of the strategies' 'withdrawal' function. This ensures + * that the value per share reported by each strategy will remain consistent, and that the shares will continue + * to accrue gains during the enforced withdrawal waiting period. + * @param strategyIndexes is a list of the indices in `stakerStrategyList[msg.sender]` that correspond to the strategies + * for which `msg.sender` is withdrawing 100% of their shares + * @param strategies The Strategies to withdraw from + * @param shares The amount of shares to withdraw from each of the respective Strategies in the `strategies` array + * @param withdrawer The address that can complete the withdrawal and will receive any withdrawn funds or shares upon completing the withdrawal + * @param undelegateIfPossible If this param is marked as 'true' *and the withdrawal will result in `msg.sender` having no shares in any Strategy,* + * then this function will also make an internal call to `undelegate(msg.sender)` to undelegate the `msg.sender`. + * @return The 'withdrawalRoot' of the newly created Queued Withdrawal + * @dev Strategies are removed from `stakerStrategyList` by swapping the last entry with the entry to be removed, then + * popping off the last entry in `stakerStrategyList`. The simplest way to calculate the correct `strategyIndexes` to input + * is to order the strategies *for which `msg.sender` is withdrawing 100% of their shares* from highest index in + * `stakerStrategyList` to lowest index + * @dev Note that if the withdrawal includes shares in the enshrined 'beaconChainETH' strategy, then it must *only* include shares in this strategy, and + * `withdrawer` must match the caller's address. The first condition is because slashing of queued withdrawals cannot be guaranteed + * for Beacon Chain ETH (since we cannot trigger a withdrawal from the beacon chain through a smart contract) and the second condition is because shares in + * the enshrined 'beaconChainETH' strategy technically represent non-fungible positions (deposits to the Beacon Chain, each pointed at a specific EigenPod). + */ + function queueWithdrawal( + uint256[] calldata strategyIndexes, + IStrategy[] calldata strategies, + uint256[] calldata shares, + address withdrawer, + bool undelegateIfPossible + ) + external returns(bytes32); + + /** + * @notice Used to complete the specified `queuedWithdrawal`. The function caller must match `queuedWithdrawal.withdrawer` + * @param queuedWithdrawal The QueuedWithdrawal 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 `strategies` array + * of the `queuedWithdrawal`. 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 queued withdrawal will be withdrawn from the specified strategies themselves + * and sent to the caller, through calls to `queuedWithdrawal.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` + */ + function completeQueuedWithdrawal( + QueuedWithdrawal calldata queuedWithdrawal, + IERC20[] calldata tokens, + uint256 middlewareTimesIndex, + bool receiveAsTokens + ) + external; + + /** + * @notice Used to complete the specified `queuedWithdrawals`. The function caller must match `queuedWithdrawals[...].withdrawer` + * @param queuedWithdrawals The QueuedWithdrawals to complete. + * @param tokens Array of tokens for each QueuedWithdrawal. See `completeQueuedWithdrawal` for the usage of a single array. + * @param middlewareTimesIndexes One index to reference per QueuedWithdrawal. See `completeQueuedWithdrawal` for the usage of a single index. + * @param receiveAsTokens If true, the shares specified in the queued withdrawal will be withdrawn from the specified strategies themselves + * and sent to the caller, through calls to `queuedWithdrawal.strategies[i].withdraw`. If false, then the shares in the specified strategies + * will simply be transferred to the caller directly. + * @dev Array-ified version of `completeQueuedWithdrawal` + * @dev middlewareTimesIndex should be calculated off chain before calling this function by finding the first index that satisfies `slasher.canWithdraw` + */ + function completeQueuedWithdrawals( + QueuedWithdrawal[] calldata queuedWithdrawals, + IERC20[][] calldata tokens, + uint256[] calldata middlewareTimesIndexes, + bool[] calldata receiveAsTokens + ) + external; + + /** + * @notice Slashes the shares of a 'frozen' operator (or a staker delegated to one) + * @param slashedAddress is the frozen address that is having its shares slashed + * @param recipient is the address that will receive the slashed funds, which could e.g. be a harmed party themself, + * or a MerkleDistributor-type contract that further sub-divides the slashed funds. + * @param strategies Strategies to slash + * @param shareAmounts The amount of shares to slash in each of the provided `strategies` + * @param tokens The tokens to use as input to the `withdraw` function of each of the provided `strategies` + * @param strategyIndexes is a list of the indices in `stakerStrategyList[msg.sender]` that correspond to the strategies + * for which `msg.sender` is withdrawing 100% of their shares + * @param recipient The slashed funds are withdrawn as tokens to this address. + * @dev strategies are removed from `stakerStrategyList` by swapping the last entry with the entry to be removed, then + * popping off the last entry in `stakerStrategyList`. The simplest way to calculate the correct `strategyIndexes` to input + * is to order the strategies *for which `msg.sender` is withdrawing 100% of their shares* from highest index in + * `stakerStrategyList` to lowest index + */ + function slashShares( + address slashedAddress, + address recipient, + IStrategy[] calldata strategies, + IERC20[] calldata tokens, + uint256[] calldata strategyIndexes, + uint256[] calldata shareAmounts + ) + external; + + /** + * @notice Slashes an existing queued withdrawal that was created by a 'frozen' operator (or a staker delegated to one) + * @param recipient The funds in the slashed withdrawal are withdrawn as tokens to this address. + * @param queuedWithdrawal The previously queued withdrawal to be slashed + * @param tokens Array in which the i-th entry specifies the `token` input to the 'withdraw' function of the i-th Strategy in the `strategies` + * array of the `queuedWithdrawal`. + * @param indicesToSkip Optional input parameter -- indices in the `strategies` array to skip (i.e. not call the 'withdraw' function on). This input exists + * so that, e.g., if the slashed QueuedWithdrawal contains a malicious strategy in the `strategies` array which always reverts on calls to its 'withdraw' function, + * then the malicious strategy can be skipped (with the shares in effect "burned"), while the non-malicious strategies are still called as normal. + */ + function slashQueuedWithdrawal(address recipient, QueuedWithdrawal calldata queuedWithdrawal, IERC20[] calldata tokens, uint256[] calldata indicesToSkip) + external; + + /// @notice Returns the keccak256 hash of `queuedWithdrawal`. + function calculateWithdrawalRoot( + QueuedWithdrawal memory queuedWithdrawal + ) + external + pure + returns (bytes32); + + /** + * @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; + + /** + * @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; + + /// @notice Returns the single, central Delegation contract of EigenLayer + function delegation() external view returns (IDelegationManager); + + /// @notice Returns the single, central Slasher contract of EigenLayer + function slasher() external view returns (ISlasher); + + /// @notice returns the enshrined, virtual 'beaconChainETH' Strategy + function beaconChainETHStrategy() external view returns (IStrategy); + + /// @notice Returns the number of blocks that must pass between the time a withdrawal is queued and the time it can be completed + function withdrawalDelayBlocks() external view returns (uint256); + + + + /// VIEW FUNCTIONS FOR PUBLIC VARIABLES, NOT IN ORIGINAL INTERFACE + function withdrawalRootPending(bytes32 withdrawalRoot) external view returns (bool); + + function numWithdrawalsQueued(address staker) external view returns (uint256); +} diff --git a/src/test/integration/mocks/BeaconChainMock.t.sol b/src/test/integration/mocks/BeaconChainMock.t.sol index c0f7b3770..ec5619850 100644 --- a/src/test/integration/mocks/BeaconChainMock.t.sol +++ b/src/test/integration/mocks/BeaconChainMock.t.sol @@ -1,10 +1,11 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "forge-std/Test.sol"; import "src/contracts/libraries/BeaconChainProofs.sol"; import "src/contracts/libraries/Merkle.sol"; +import "src/contracts/pods/EigenPodManager.sol"; import "src/test/integration/TimeMachine.t.sol"; import "src/test/integration/mocks/BeaconChainOracleMock.t.sol"; @@ -46,7 +47,7 @@ contract BeaconChainMock is Test { } uint40 nextValidatorIndex = 0; - uint64 nextTimestamp; + uint64 public nextTimestamp; // Sequential list of created Validators // Validator[] validators; @@ -55,14 +56,16 @@ contract BeaconChainMock is Test { mapping(uint40 => Validator) validators; BeaconChainOracleMock oracle; + EigenPodManager eigenPodManager; /// @dev All withdrawals are processed with index == 0 uint64 constant WITHDRAWAL_INDEX = 0; uint constant GWEI_TO_WEI = 1e9; - constructor(TimeMachine timeMachine, BeaconChainOracleMock beaconChainOracle) { + constructor(TimeMachine timeMachine, BeaconChainOracleMock beaconChainOracle, EigenPodManager _eigenPodManager) { nextTimestamp = timeMachine.proofGenStartTime(); oracle = beaconChainOracle; + eigenPodManager = _eigenPodManager; } /** @@ -157,6 +160,10 @@ contract BeaconChainMock is Test { return update; } + function setNextTimestamp(uint64 timestamp) public { + nextTimestamp = timestamp; + } + function balanceOfGwei(uint40 validatorIndex) public view returns (uint64) { return validators[validatorIndex].effectiveBalanceGwei; } @@ -218,9 +225,10 @@ contract BeaconChainMock is Test { // Send the block root to the oracle and increment timestamp: proof.oracleTimestamp = uint64(nextTimestamp); + oracle.setBlockRoot(nextTimestamp, blockRoot); nextTimestamp++; - + return proof; } @@ -733,11 +741,20 @@ contract BeaconChainMock is Test { uint64 withdrawalIndex, uint64 oracleTimestamp ) internal view returns (BeaconChainProofs.WithdrawalProof memory) { + uint256 withdrawalProofLength; + uint256 timestampProofLength; + if (block.timestamp > eigenPodManager.denebForkTimestamp()) { + withdrawalProofLength = WITHDRAWAL_PROOF_LEN_DENEB; + timestampProofLength = TIMESTAMP_PROOF_LEN_DENEB; + } else { + withdrawalProofLength = WITHDRAWAL_PROOF_LEN_CAPELLA; + timestampProofLength = TIMESTAMP_PROOF_LEN_CAPELLA; + } return BeaconChainProofs.WithdrawalProof({ - withdrawalProof: new bytes(WITHDRAWAL_PROOF_LEN_CAPELLA), + withdrawalProof: new bytes(withdrawalProofLength), slotProof: new bytes(SLOT_PROOF_LEN), executionPayloadProof: new bytes(EXECPAYLOAD_PROOF_LEN), - timestampProof: new bytes(TIMESTAMP_PROOF_LEN_CAPELLA), + timestampProof: new bytes(timestampProofLength), historicalSummaryBlockRootProof: new bytes(HISTSUMMARY_PROOF_LEN), blockRootIndex: 0, historicalSummaryIndex: 0, @@ -797,4 +814,4 @@ contract BeaconChainMock is Test { assembly { a := and(creds, mask) } } -} \ No newline at end of file +} diff --git a/src/test/integration/mocks/BeaconChainOracleMock.t.sol b/src/test/integration/mocks/BeaconChainOracleMock.t.sol index 74390123e..b5a401c1f 100644 --- a/src/test/integration/mocks/BeaconChainOracleMock.t.sol +++ b/src/test/integration/mocks/BeaconChainOracleMock.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "src/contracts/interfaces/IBeaconChainOracle.sol"; @@ -14,4 +14,4 @@ contract BeaconChainOracleMock is IBeaconChainOracle { function setBlockRoot(uint64 timestamp, bytes32 blockRoot) public { blockRoots[timestamp] = blockRoot; } -} \ No newline at end of file +} 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 4c7149fbb..1c20e1807 100644 --- a/src/test/integration/tests/Delegate_Deposit_Queue_Complete.t.sol +++ b/src/test/integration/tests/Delegate_Deposit_Queue_Complete.t.sol @@ -2,10 +2,10 @@ pragma solidity ^0.8.12; import "src/test/integration/IntegrationChecks.t.sol"; -import "src/test/integration/User.t.sol"; +import "src/test/integration/users/User.t.sol"; contract Integration_Delegate_Deposit_Queue_Complete is IntegrationCheckUtils { - + function testFuzz_delegate_deposit_queue_completeAsShares(uint24 _random) public { // Configure the random parameters for the test _configRand({ @@ -13,10 +13,11 @@ contract Integration_Delegate_Deposit_Queue_Complete is IntegrationCheckUtils { _assetTypes: HOLDS_LST | HOLDS_ETH | HOLDS_ALL, _userTypes: DEFAULT | ALT_METHODS }); - // Create a staker and an operator with a nonzero balance and corresponding strategies (User staker, IStrategy[] memory strategies, uint[] memory tokenBalances) = _newRandomStaker(); (User operator, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); // 1. Delegate to operator staker.delegateTo(operator); @@ -54,6 +55,8 @@ contract Integration_Delegate_Deposit_Queue_Complete is IntegrationCheckUtils { // Create a staker and an operator with a nonzero balance and corresponding strategies (User staker, IStrategy[] memory strategies, uint[] memory tokenBalances) = _newRandomStaker(); (User operator, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); // 1. Delegate to operator staker.delegateTo(operator); 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 3c6afde3e..5129d0710 100644 --- a/src/test/integration/tests/Deposit_Delegate_Queue_Complete.t.sol +++ b/src/test/integration/tests/Deposit_Delegate_Queue_Complete.t.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "src/test/integration/IntegrationChecks.t.sol"; -import "src/test/integration/User.t.sol"; +import "src/test/integration/users/User.t.sol"; contract Integration_Deposit_Delegate_Queue_Complete is IntegrationCheckUtils { @@ -34,6 +34,9 @@ contract Integration_Deposit_Delegate_Queue_Complete is IntegrationCheckUtils { uint[] memory tokenBalances ) = _newRandomStaker(); (User operator, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -93,6 +96,9 @@ contract Integration_Deposit_Delegate_Queue_Complete is IntegrationCheckUtils { uint[] memory tokenBalances ) = _newRandomStaker(); (User operator, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -155,6 +161,9 @@ contract Integration_Deposit_Delegate_Queue_Complete is IntegrationCheckUtils { uint[] memory tokenBalances ) = _newRandomStaker(); (User operator, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -217,6 +226,9 @@ contract Integration_Deposit_Delegate_Queue_Complete is IntegrationCheckUtils { uint[] memory tokenBalances ) = _newRandomStaker(); (User operator, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -281,6 +293,9 @@ contract Integration_Deposit_Delegate_Queue_Complete is IntegrationCheckUtils { uint[] memory tokenBalances ) = _newRandomStaker(); (User operator, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -299,4 +314,4 @@ contract Integration_Deposit_Delegate_Queue_Complete is IntegrationCheckUtils { cheats.expectRevert("DelegationManager._delegate: staker is already actively delegated"); staker.delegateTo(operator); } -} \ No newline at end of file +} 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 43a303ef7..e5bc6b91d 100644 --- a/src/test/integration/tests/Deposit_Delegate_Redelegate_Complete.t.sol +++ b/src/test/integration/tests/Deposit_Delegate_Redelegate_Complete.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; -import "src/test/integration/User.t.sol"; +import "src/test/integration/users/User.t.sol"; import "src/test/integration/IntegrationChecks.t.sol"; contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUtils { @@ -34,6 +34,9 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti ) = _newRandomStaker(); (User operator1, ,) = _newRandomOperator(); (User operator2, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -103,6 +106,9 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti ) = _newRandomStaker(); (User operator1, ,) = _newRandomOperator(); (User operator2, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -185,6 +191,9 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti ) = _newRandomStaker(); (User operator1, ,) = _newRandomOperator(); (User operator2, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -229,11 +238,13 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti // 6. Deposit into Strategies uint[] memory sharesAdded = _calculateExpectedShares(strategies, numTokensRemaining); staker.depositIntoEigenlayer(strategies, numTokensRemaining); + tokenBalances = _calculateExpectedTokens(strategies, shares); check_Deposit_State(staker, strategies, sharesAdded); } { // 7. Queue Withdrawal + shares = _calculateExpectedShares(strategies, tokenBalances); IDelegationManager.Withdrawal[] memory newWithdrawals = staker.queueWithdrawals(strategies, shares); bytes32[] memory newWithdrawalRoots = _getWithdrawalHashes(newWithdrawals); check_QueuedWithdrawal_State(staker, operator2, strategies, shares, newWithdrawals, newWithdrawalRoots); @@ -272,6 +283,9 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti ) = _newRandomStaker(); (User operator1, ,) = _newRandomOperator(); (User operator2, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -311,16 +325,18 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti // 5. Deposit into Strategies uint[] memory sharesAdded = _calculateExpectedShares(strategies, numTokensRemaining); staker.depositIntoEigenlayer(strategies, numTokensRemaining); + tokenBalances = _calculateExpectedTokens(strategies, shares); check_Deposit_State(staker, strategies, sharesAdded); // 6. Delegate to a new operator staker.delegateTo(operator2); - check_Delegation_State(staker, operator2, strategies, tokenBalances); + check_Delegation_State(staker, operator2, strategies, shares); assertNotEq(address(operator1), delegationManager.delegatedTo(address(staker)), "staker should not be delegated to operator1"); } { // 7. Queue Withdrawal + shares = _calculateExpectedShares(strategies, tokenBalances); IDelegationManager.Withdrawal[] memory newWithdrawals = staker.queueWithdrawals(strategies, shares); bytes32[] memory newWithdrawalRoots = _getWithdrawalHashes(newWithdrawals); check_QueuedWithdrawal_State(staker, operator2, strategies, shares, newWithdrawals, newWithdrawalRoots); @@ -354,6 +370,9 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti ) = _newRandomStaker(); (User operator1, ,) = _newRandomOperator(); (User operator2, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -361,6 +380,7 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti /// 1. Deposit Into Strategies staker.depositIntoEigenlayer(strategies, tokenBalances); + uint[] memory withdrawnTokenBalances = _calculateExpectedTokens(strategies, shares); check_Deposit_State(staker, strategies, shares); // 2. Delegate to an operator @@ -382,7 +402,8 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti } //5. Deposit into Strategies - staker.depositIntoEigenlayer(strategies, tokenBalances); + staker.depositIntoEigenlayer(strategies, withdrawnTokenBalances); + shares = _calculateExpectedShares(strategies, withdrawnTokenBalances); check_Deposit_State(staker, strategies, shares); // 6. Delegate to a new operator @@ -423,6 +444,9 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti ) = _newRandomStaker(); (User operator1, ,) = _newRandomOperator(); (User operator2, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -430,6 +454,7 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti /// 1. Deposit Into Strategies staker.depositIntoEigenlayer(strategies, tokenBalances); + uint[] memory withdrawnTokenBalances = _calculateExpectedTokens(strategies, shares); check_Deposit_State(staker, strategies, shares); // 2. Delegate to an operator @@ -451,7 +476,7 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti } //5. Deposit into Strategies - staker.depositIntoEigenlayer(strategies, tokenBalances); + staker.depositIntoEigenlayer(strategies, withdrawnTokenBalances); check_Deposit_State(staker, strategies, shares); // 6. Delegate to a new operator @@ -460,6 +485,7 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti assertNotEq(address(operator1), delegationManager.delegatedTo(address(staker)), "staker should not be delegated to operator1"); // 7. Queue Withdrawal + shares = _calculateExpectedShares(strategies, withdrawnTokenBalances); withdrawals = staker.queueWithdrawals(strategies, shares); withdrawalRoots = _getWithdrawalHashes(withdrawals); check_QueuedWithdrawal_State(staker, operator2, strategies, shares, withdrawals, withdrawalRoots); @@ -474,4 +500,4 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti check_Withdrawal_AsShares_State(staker, operator2, withdrawals[i], strategies, shares); } } -} \ No newline at end of file +} 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 4332935d1..9307eb358 100644 --- a/src/test/integration/tests/Deposit_Delegate_Undelegate_Complete.t.sol +++ b/src/test/integration/tests/Deposit_Delegate_Undelegate_Complete.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; -import "src/test/integration/User.t.sol"; +import "src/test/integration/users/User.t.sol"; import "src/test/integration/IntegrationChecks.t.sol"; contract Integration_Deposit_Delegate_Undelegate_Complete is IntegrationCheckUtils { @@ -31,6 +31,9 @@ contract Integration_Deposit_Delegate_Undelegate_Complete is IntegrationCheckUti uint[] memory tokenBalances ) = _newRandomStaker(); (User operator, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -91,6 +94,9 @@ contract Integration_Deposit_Delegate_Undelegate_Complete is IntegrationCheckUti uint[] memory tokenBalances ) = _newRandomStaker(); (User operator, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -144,6 +150,9 @@ contract Integration_Deposit_Delegate_Undelegate_Complete is IntegrationCheckUti uint[] memory tokenBalances ) = _newRandomStaker(); (User operator, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -198,6 +207,9 @@ contract Integration_Deposit_Delegate_Undelegate_Complete is IntegrationCheckUti uint[] memory tokenBalances ) = _newRandomStaker(); (User operator, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -229,4 +241,4 @@ contract Integration_Deposit_Delegate_Undelegate_Complete is IntegrationCheckUti assert_HasNoUnderlyingTokenBalance(staker, strategies, "staker not have any underlying tokens"); assert_NoWithdrawalsPending(withdrawalRoots, "all withdrawals should be removed from pending"); } -} \ No newline at end of file +} diff --git a/src/test/integration/tests/Deposit_Delegate_UpdateBalance.t.sol b/src/test/integration/tests/Deposit_Delegate_UpdateBalance.t.sol index ec9977223..53b42ff4a 100644 --- a/src/test/integration/tests/Deposit_Delegate_UpdateBalance.t.sol +++ b/src/test/integration/tests/Deposit_Delegate_UpdateBalance.t.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "src/test/integration/IntegrationChecks.t.sol"; -import "src/test/integration/User.t.sol"; +import "src/test/integration/users/User.t.sol"; contract Integration_Deposit_Delegate_UpdateBalance is IntegrationCheckUtils { @@ -26,6 +26,9 @@ contract Integration_Deposit_Delegate_UpdateBalance is IntegrationCheckUtils { uint[] memory tokenBalances ) = _newRandomStaker(); (User operator, ,) = _newRandomOperator(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); + uint[] memory shares = _calculateExpectedShares(strategies, tokenBalances); assert_HasNoDelegatableShares(staker, "staker should not have delegatable shares before depositing"); @@ -68,4 +71,4 @@ contract Integration_Deposit_Delegate_UpdateBalance is IntegrationCheckUtils { assert_Snap_Unchanged_TokenBalances(operator, "operator token balances should not have changed"); assert_Snap_Unchanged_OperatorShares(operator, "operator shares should not have changed"); } -} \ No newline at end of file +} diff --git a/src/test/integration/tests/Deposit_Queue_Complete.t.sol b/src/test/integration/tests/Deposit_Queue_Complete.t.sol index 5689b8676..3260cf32c 100644 --- a/src/test/integration/tests/Deposit_Queue_Complete.t.sol +++ b/src/test/integration/tests/Deposit_Queue_Complete.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.12; -import "src/test/integration/User.t.sol"; +import "src/test/integration/users/User.t.sol"; import "src/test/integration/IntegrationChecks.t.sol"; contract Integration_Deposit_QueueWithdrawal_Complete is IntegrationCheckUtils { @@ -20,6 +20,8 @@ contract Integration_Deposit_QueueWithdrawal_Complete is IntegrationCheckUtils { // Create a staker with a nonzero balance and corresponding strategies (User staker, IStrategy[] memory strategies, uint[] memory tokenBalances) = _newRandomStaker(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); // 1. Deposit into strategy staker.depositIntoEigenlayer(strategies, tokenBalances); @@ -54,6 +56,8 @@ contract Integration_Deposit_QueueWithdrawal_Complete is IntegrationCheckUtils { // Create a staker with a nonzero balance and corresponding strategies (User staker, IStrategy[] memory strategies, uint[] memory tokenBalances) = _newRandomStaker(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); // 1. Deposit into strategy staker.depositIntoEigenlayer(strategies, tokenBalances); 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 cd93188e4..9da5443a1 100644 --- a/src/test/integration/tests/Deposit_Register_QueueWithdrawal_Complete.t.sol +++ b/src/test/integration/tests/Deposit_Register_QueueWithdrawal_Complete.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.12; -import "src/test/integration/User.t.sol"; +import "src/test/integration/users/User.t.sol"; import "src/test/integration/IntegrationChecks.t.sol"; contract Integration_Deposit_Register_QueueWithdrawal_Complete is IntegrationCheckUtils { @@ -15,6 +15,8 @@ contract Integration_Deposit_Register_QueueWithdrawal_Complete is IntegrationChe // Create a staker with a nonzero balance and corresponding strategies (User staker, IStrategy[] memory strategies, uint[] memory tokenBalances) = _newRandomStaker(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); // 1. Staker deposits into strategy staker.depositIntoEigenlayer(strategies, tokenBalances); @@ -48,6 +50,8 @@ contract Integration_Deposit_Register_QueueWithdrawal_Complete is IntegrationChe // Create a staker with a nonzero balance and corresponding strategies (User staker, IStrategy[] memory strategies, uint[] memory tokenBalances) = _newRandomStaker(); + // Upgrade contracts if forkType is not local + _upgradeEigenLayerContracts(); // 1. Staker deposits into strategy staker.depositIntoEigenlayer(strategies, tokenBalances); diff --git a/src/test/integration/tests/Upgrade_Setup.t.sol b/src/test/integration/tests/Upgrade_Setup.t.sol new file mode 100644 index 000000000..b1b2f2edd --- /dev/null +++ b/src/test/integration/tests/Upgrade_Setup.t.sol @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "src/test/integration/IntegrationChecks.t.sol"; + +contract IntegrationMainnetFork_UpgradeSetup is IntegrationCheckUtils { + + // /// @notice Test upgrade setup is correct + // /// forge-config: default.fuzz.runs = 1 + // function test_mainnet_upgrade_setup(uint24 _random) public { + // _configRand({ + // _randomSeed: _random, + // _assetTypes: HOLDS_LST | HOLDS_ETH | HOLDS_ALL, + // _userTypes: DEFAULT | ALT_METHODS, + // _forkTypes: MAINNET + // }); + + // // // 1. Check proper state pre-upgrade + // // _verifyContractPointers(); + // // _verifyImplementations(); + // // _verifyContractsInitialized({isInitialDeployment: true}); + // // _verifyInitializationParams(); + + // // 2. Upgrade mainnet contracts + // _upgradeEigenLayerContracts(); + // _parseInitialDeploymentParams("script/configs/mainnet/M2_mainnet_upgrade.config.json"); + + // // 2. Verify upgrade setup + // _verifyContractPointers(); + // _verifyImplementations(); + // _verifyContractsInitialized({isInitialDeployment: true}); + // _verifyInitializationParams(); + // } + + // /// @notice Test upgrade setup is correct + // /// forge-config: default.fuzz.runs = 1 + // function test_holesky_upgrade_setup(uint24 _random) public { + // _configRand({ + // _randomSeed: _random, + // _assetTypes: HOLDS_LST | HOLDS_ETH | HOLDS_ALL, + // _userTypes: DEFAULT | ALT_METHODS, + // _forkTypes: HOLESKY + // }); + + // // // 1. Check proper state pre-upgrade + // // _verifyContractPointers(); + // // _verifyImplementations(); + // // _verifyContractsInitialized({isInitialDeployment: true}); + // // _verifyInitializationParams(); + + // // 2. Upgrade holesky contracts + // _upgradeEigenLayerContracts(); + // _parseInitialDeploymentParams("script/configs/holesky/M2_deploy_from_scratch.holesky.config.json"); + + // // 3. Verify upgrade setup + // _verifyContractPointers(); + // _verifyImplementations(); + // _verifyContractsInitialized({isInitialDeployment: true}); + // _verifyInitializationParams(); + // } + + /// @notice Ensure contracts point at each other correctly via constructors + /// override to remove ethPOSDeposit contract check + function _verifyContractPointers() internal virtual override view { + // AVSDirectory + require( + avsDirectory.delegation() == delegationManager, + "avsDirectory: delegationManager address not set correctly" + ); + // DelegationManager + require(delegationManager.slasher() == slasher, "delegationManager: slasher address not set correctly"); + require( + delegationManager.strategyManager() == strategyManager, + "delegationManager: strategyManager address not set correctly" + ); + require( + delegationManager.eigenPodManager() == eigenPodManager, + "delegationManager: eigenPodManager address not set correctly" + ); + // StrategyManager + require(strategyManager.slasher() == slasher, "strategyManager: slasher address not set correctly"); + require( + strategyManager.delegation() == delegationManager, + "strategyManager: delegationManager address not set correctly" + ); + require( + strategyManager.eigenPodManager() == eigenPodManager, + "strategyManager: eigenPodManager address not set correctly" + ); + // EPM + require( + eigenPodManager.eigenPodBeacon() == eigenPodBeacon, + "eigenPodManager: eigenPodBeacon contract address not set correctly" + ); + require( + eigenPodManager.strategyManager() == strategyManager, + "eigenPodManager: strategyManager contract address not set correctly" + ); + require(eigenPodManager.slasher() == slasher, "eigenPodManager: slasher contract address not set correctly"); + require( + eigenPodManager.delegationManager() == delegationManager, + "eigenPodManager: delegationManager contract address not set correctly" + ); + // DelayedWithdrawalRouter + require( + delayedWithdrawalRouter.eigenPodManager() == eigenPodManager, + "delayedWithdrawalRouterContract: eigenPodManager address not set correctly" + ); + } +} \ No newline at end of file diff --git a/src/test/integration/User.t.sol b/src/test/integration/users/User.t.sol similarity index 95% rename from src/test/integration/User.t.sol rename to src/test/integration/users/User.t.sol index 447fcb7b2..341103e4c 100644 --- a/src/test/integration/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.12; import "forge-std/Test.sol"; @@ -13,6 +13,8 @@ import "src/contracts/interfaces/IStrategy.sol"; import "src/test/integration/TimeMachine.t.sol"; import "src/test/integration/mocks/BeaconChainMock.t.sol"; +import "src/test/integration/mocks/BeaconChainOracleMock.t.sol"; + interface IUserDeployer { function delegationManager() external view returns (DelegationManager); @@ -20,6 +22,7 @@ interface IUserDeployer { function eigenPodManager() external view returns (EigenPodManager); function timeMachine() external view returns (TimeMachine); function beaconChain() external view returns (BeaconChainMock); + function beaconChainOracle() external view returns (address); } contract User is Test { @@ -35,6 +38,7 @@ contract User is Test { /// @dev Native restaker state vars BeaconChainMock beaconChain; + BeaconChainOracleMock beaconChainOracle; // User's EigenPod and each of their validator indices within that pod EigenPod public pod; uint40[] validators; @@ -54,7 +58,8 @@ contract User is Test { timeMachine = deployer.timeMachine(); beaconChain = deployer.beaconChain(); - pod = EigenPod(payable(eigenPodManager.createPod())); + beaconChainOracle = BeaconChainOracleMock(deployer.beaconChainOracle()); + _createPod(); NAME = name; } @@ -105,9 +110,9 @@ contract User is Test { balanceWei: 32 ether, withdrawalCreds: _podWithdrawalCredentials() }); - - validators.push(newValidatorIndex); + validators.push(newValidatorIndex); + emit log_named_uint("oracle timestamp", proofs.oracleTimestamp); pod.verifyWithdrawalCredentials({ oracleTimestamp: proofs.oracleTimestamp, stateRootProof: proofs.stateRootProof, @@ -268,6 +273,18 @@ contract User is Test { return _completeQueuedWithdrawal(withdrawal, false); } + /// @notice We set the proof generation start time to be after the timestamp that pod restaking is activated + /// We do this to prevent proofIsForValidTimestamp modifier from reverting + function activateRestaking() public createSnapshot { + emit log(_name(".activateRestaking")); + + emit log_named_uint("pre-activation, most recent wd timestamp", pod.mostRecentWithdrawalTimestamp()); + + pod.activateRestaking(); + + emit log_named_uint("post-activation, most recent wd timestamp", pod.mostRecentWithdrawalTimestamp()); + } + function _completeQueuedWithdrawal( IDelegationManager.Withdrawal memory withdrawal, bool receiveAsTokens @@ -319,6 +336,10 @@ contract User is Test { return tokens; } + function _createPod() internal virtual { + pod = EigenPod(payable(eigenPodManager.createPod())); + } + function _podWithdrawalCredentials() internal view returns (bytes memory) { return abi.encodePacked(bytes1(uint8(1)), bytes11(0), address(pod)); } @@ -464,4 +485,4 @@ contract User_AltMethods is User { return 0xffffffff; } } -} \ No newline at end of file +} diff --git a/src/test/integration/users/User_M1.t.sol b/src/test/integration/users/User_M1.t.sol new file mode 100644 index 000000000..c2f934130 --- /dev/null +++ b/src/test/integration/users/User_M1.t.sol @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "src/test/integration/deprecatedInterfaces/mainnet/IEigenPod.sol"; +import "src/test/integration/deprecatedInterfaces/mainnet/IEigenPodManager.sol"; +import "src/test/integration/deprecatedInterfaces/mainnet/IStrategyManager.sol"; +import "src/test/integration/users/User.t.sol"; + +interface IUserMainnetForkDeployer { + function delegationManager() external view returns (DelegationManager); + function strategyManager() external view returns (StrategyManager); + function eigenPodManager() external view returns (EigenPodManager); + function timeMachine() external view returns (TimeMachine); + function beaconChain() external view returns (BeaconChainMock); + function strategyManager_M1() external view returns (IStrategyManager_DeprecatedM1); + function eigenPodManager_M1() external view returns (IEigenPodManager_DeprecatedM1); +} + +/** + * @dev User_M1 used for performing mainnet M1 contract methods but also inherits User + * to perform current local contract methods after a upgrade of core contracts + */ +contract User_M1 is User { + IStrategyManager_DeprecatedM1 strategyManager_M1; + IEigenPodManager_DeprecatedM1 eigenPodManager_M1; + + constructor(string memory name) User(name) { + IUserMainnetForkDeployer deployer = IUserMainnetForkDeployer(msg.sender); + + strategyManager_M1 = IStrategyManager_DeprecatedM1(address(deployer.strategyManager())); + eigenPodManager_M1 = IEigenPodManager_DeprecatedM1(address(deployer.eigenPodManager())); + } + + /** + * StrategyManager M1 mainnet methods: + */ + + /// @notice Deposit into EigenLayer with M1 mainnet methods, only concerns LSTs + /// Note that this should not be called with BeaconChainStrat + function depositIntoEigenlayer_M1( + IStrategy[] memory strategies, + uint256[] memory tokenBalances + ) public virtual createSnapshot { + emit log(_name(".depositIntoEigenlayer_M1")); + + for (uint256 i = 0; i < strategies.length; i++) { + IStrategy strat = strategies[i]; + uint256 tokenBalance = tokenBalances[i]; + + // Skip BeaconChainStrat, since BeaconChainStrat doesn't exist on M1 mainnet + if (strat == BEACONCHAIN_ETH_STRAT) { + continue; + } + + IERC20 underlyingToken = strat.underlyingToken(); + underlyingToken.approve(address(strategyManager), tokenBalance); + strategyManager.depositIntoStrategy(strat, underlyingToken, tokenBalance); + } + } + + function _createPod() internal virtual override { + IEigenPodManager_DeprecatedM1(address(eigenPodManager)).createPod(); + // get EigenPod address + pod = EigenPod( + payable(address(IEigenPodManager_DeprecatedM1(address(eigenPodManager)).ownerToPod(address(this)))) + ); + } +} + +contract User_M1_AltMethods is User_M1 { + mapping(bytes32 => bool) public signedHashes; + + constructor(string memory name) User_M1(name) {} + + function depositIntoEigenlayer_M1( + IStrategy[] memory strategies, + uint256[] memory tokenBalances + ) public override createSnapshot { + emit log(_name(".depositIntoEigenlayer_M1_ALT")); + + uint256 expiry = type(uint256).max; + for (uint256 i = 0; i < strategies.length; i++) { + IStrategy strat = strategies[i]; + uint256 tokenBalance = tokenBalances[i]; + + if (strat == BEACONCHAIN_ETH_STRAT) { + revert("Should not be depositing with BEACONCHAIN_ETH_STRAT for M1-mainnet User"); + } + + // Approve token + IERC20 underlyingToken = strat.underlyingToken(); + underlyingToken.approve(address(strategyManager), tokenBalance); + + // Get signature + uint256 nonceBefore = strategyManager.nonces(address(this)); + bytes32 structHash = keccak256( + abi.encode( + strategyManager.DEPOSIT_TYPEHASH(), + strat, + underlyingToken, + tokenBalance, + nonceBefore, + expiry + ) + ); + bytes32 domain_separator = keccak256(abi.encode(strategyManager.DOMAIN_TYPEHASH(), keccak256(bytes("EigenLayer")), block.chainid, address(strategyManager))); + bytes32 digestHash = + keccak256(abi.encodePacked("\x19\x01", domain_separator, structHash)); + bytes memory signature = bytes(abi.encodePacked(digestHash)); // dummy sig data + + // Mark hash as signed + signedHashes[digestHash] = true; + + // Deposit + strategyManager.depositIntoStrategyWithSignature( + strat, underlyingToken, tokenBalance, address(this), expiry, signature + ); + + // Mark hash as used + signedHashes[digestHash] = false; + } + } + + bytes4 internal constant MAGIC_VALUE = 0x1626ba7e; + + function isValidSignature(bytes32 hash, bytes memory) external view returns (bytes4) { + if (signedHashes[hash]) { + return MAGIC_VALUE; + } else { + return 0xffffffff; + } + } +} diff --git a/src/test/mocks/BeaconChainOracleMock.sol b/src/test/mocks/BeaconChainOracleMock.sol index 485e8dbf9..890ca1a1e 100644 --- a/src/test/mocks/BeaconChainOracleMock.sol +++ b/src/test/mocks/BeaconChainOracleMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "../../contracts/interfaces/IBeaconChainOracle.sol"; diff --git a/src/test/mocks/DelegationManagerMock.sol b/src/test/mocks/DelegationManagerMock.sol index a55dbd50b..cd6ba51eb 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.12; import "forge-std/Test.sol"; import "../../contracts/interfaces/IDelegationManager.sol"; @@ -198,4 +198,4 @@ contract DelegationManagerMock is IDelegationManager, Test { ) external { strategyManager.withdrawSharesAsTokens(recipient, strategy, shares, token); } -} \ No newline at end of file +} diff --git a/src/test/mocks/Dummy.sol b/src/test/mocks/Dummy.sol index cddebdf08..79160b45f 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.12; contract EmptyContract { function foo() public pure returns (uint256) { diff --git a/src/test/mocks/ERC20Mock.sol b/src/test/mocks/ERC20Mock.sol index ac55a0173..8d5484d0f 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.12; import "@openzeppelin/contracts/interfaces/IERC20.sol"; import "@openzeppelin/contracts/utils/Context.sol"; @@ -272,4 +272,4 @@ contract ERC20Mock is Context, IERC20 { * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} -} \ No newline at end of file +} diff --git a/src/test/mocks/ERC20_OneWeiFeeOnTransfer.sol b/src/test/mocks/ERC20_OneWeiFeeOnTransfer.sol index e660d6b8d..173acf69b 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.12; // copy-pasted OZ code with _balances mapping made *internal* instead of private @@ -614,4 +614,4 @@ contract ERC20_OneWeiFeeOnTransfer is OpenZeppelin_ERC20PresetFixedSupply { _afterTokenTransfer(from, to, amount); } -} \ No newline at end of file +} diff --git a/src/test/mocks/ERC20_SetTransferReverting_Mock.sol b/src/test/mocks/ERC20_SetTransferReverting_Mock.sol index e865d4681..dd12a7fd3 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.12; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; diff --git a/src/test/mocks/ETHDepositMock.sol b/src/test/mocks/ETHDepositMock.sol index 4a93558a2..8b8841974 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.12; import "../../contracts/interfaces/IETHPOSDeposit.sol"; diff --git a/src/test/mocks/EmptyContract.sol b/src/test/mocks/EmptyContract.sol index cddebdf08..79160b45f 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.12; contract EmptyContract { function foo() public pure returns (uint256) { diff --git a/src/test/mocks/IBeaconChainOracleMock.sol b/src/test/mocks/IBeaconChainOracleMock.sol index a0e6ab63f..7ef4cc680 100644 --- a/src/test/mocks/IBeaconChainOracleMock.sol +++ b/src/test/mocks/IBeaconChainOracleMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; /** * @title Interface for the BeaconStateOracle contract. @@ -64,4 +64,4 @@ interface IBeaconChainOracleMock { * @param stateRoot The Beacon Chain state root that the caller asserts was the correct root, at the specified `blockNumber`. */ function voteForBeaconChainStateRoot(uint64 blockNumber, bytes32 stateRoot) external; -} \ No newline at end of file +} diff --git a/src/test/mocks/OwnableMock.sol b/src/test/mocks/OwnableMock.sol index 52170e00e..11ba5c53f 100644 --- a/src/test/mocks/OwnableMock.sol +++ b/src/test/mocks/OwnableMock.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "@openzeppelin/contracts/access/Ownable.sol"; -contract OwnableMock is Ownable {} \ No newline at end of file +contract OwnableMock is Ownable {} diff --git a/src/test/mocks/SlasherMock.sol b/src/test/mocks/SlasherMock.sol index 0f3366c49..6524fc466 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.12; import "forge-std/Test.sol"; import "../../contracts/interfaces/ISlasher.sol"; @@ -75,4 +75,4 @@ contract SlasherMock is ISlasher, Test { /// @notice Getter function for fetching a single node in the operator's linked list (`_operatorToWhitelistedContractsByUpdate[operator]`). function operatorWhitelistedContractsLinkedListEntry(address operator, address node) external view returns (bool, uint256, uint256) {} -} \ No newline at end of file +} diff --git a/src/test/mocks/StrategyManagerMock.sol b/src/test/mocks/StrategyManagerMock.sol index 989512b98..e9ccf28c6 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.12; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; @@ -126,4 +126,4 @@ contract StrategyManagerMock is function migrateQueuedWithdrawal(DeprecatedStruct_QueuedWithdrawal memory queuedWithdrawal) external returns (bool, bytes32) {} function calculateWithdrawalRoot(DeprecatedStruct_QueuedWithdrawal memory queuedWithdrawal) external pure returns (bytes32) {} -} \ No newline at end of file +} diff --git a/src/test/token/EigenTransferRestrictions.t.sol b/src/test/token/EigenTransferRestrictions.t.sol new file mode 100644 index 000000000..37b690212 --- /dev/null +++ b/src/test/token/EigenTransferRestrictions.t.sol @@ -0,0 +1,180 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.12; + +import "forge-std/Test.sol"; + +import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "../harnesses/EigenHarness.sol"; + +contract EigenTransferRestrictionsTest is Test { + mapping(address => bool) fuzzedOutAddresses; + + address minter1 = 0xbb00DDa2832850a43840A3A86515E3Fe226865F2; + address minter2 = 0x87787389BB2Eb2EC8Fe4aA6a2e33D671d925A60f; + + ProxyAdmin proxyAdmin; + + EigenHarness eigenImpl; + Eigen eigen; + uint256 totalSupply = 1.67e9 ether; + + // EVENTS FROM EIGEN.sol + /// @notice event emitted when the allowedFrom status of an address is set + event SetAllowedFrom(address indexed from, bool isAllowedFrom); + /// @notice event emitted when the allowedTo status of an address is set + event SetAllowedTo(address indexed to, bool isAllowedTo); + /// @notice event emitted when a minter mints + event Mint(address indexed minter, uint256 amount); + /// @notice event emitted when the transfer restrictions are disabled + event TransferRestrictionsDisabled(); + + modifier filterAddress(address fuzzedAddress) { + vm.assume(!fuzzedOutAddresses[fuzzedAddress]); + _; + } + + function setUp() public { + vm.startPrank(minter1); + proxyAdmin = new ProxyAdmin(); + // initialize with dummy BackingEigen address + eigenImpl = new EigenHarness(IERC20(address(0))); + eigen = Eigen(address(new TransparentUpgradeableProxy(address(eigenImpl), address(proxyAdmin), ""))); + vm.stopPrank(); + + fuzzedOutAddresses[minter1] = true; + fuzzedOutAddresses[minter2] = true; + fuzzedOutAddresses[address(proxyAdmin)] = true; + fuzzedOutAddresses[address(eigen)] = true; + fuzzedOutAddresses[address(0)] = true; + } + + function test_AllowedFromCanSendAnywhere(address to) public filterAddress(to) { + _simulateMint(); + + // minter1 and eigenminter2 are already allowedFrom + vm.startPrank(minter1); + eigen.transfer(to, eigen.balanceOf(minter1) / 2); + + vm.startPrank(minter2); + eigen.transfer(to, eigen.balanceOf(minter2) / 2); + } + + function test_CanSetAllowedFrom(address from, address to) public filterAddress(from) filterAddress(to) { + _simulateMint(); + + // set allowedFrom[from] = true + vm.startPrank(minter1); + vm.expectEmit(true, true, true, true, address(eigen)); + emit SetAllowedFrom(from, true); + eigen.setAllowedFrom(from, true); + assertEq(eigen.allowedFrom(from), true, "EigenTest.test_CanSetAllowedFrom: allowedFrom was not set correctly"); + + // new allowedFrom can send + vm.startPrank(from); + eigen.transfer(to, eigen.balanceOf(from) / 2); + + // set allowedFrom[from] = false + vm.startPrank(minter1); + vm.expectEmit(true, true, true, true, address(eigen)); + emit SetAllowedFrom(from, false); + eigen.setAllowedFrom(from, false); + assertEq(eigen.allowedFrom(from), false, "EigenTest.test_CanSetAllowedFrom: allowedFrom was not set correctly"); + } + + function test_OnlyOwnerCanSetAllowedFrom(address notOwner) public filterAddress(notOwner) { + _simulateMint(); + + // set allowedFrom[from] = true + vm.startPrank(notOwner); + vm.expectRevert("Ownable: caller is not the owner"); + eigen.setAllowedFrom(notOwner, true); + } + + function test_NotAllowedFromCannotSendIfNoAllowedTos(address from, address to) public filterAddress(from) filterAddress(to) { + _simulateMint(); + + // send other tokens from minter1 + vm.startPrank(minter1); + eigen.transfer(from, eigen.balanceOf(minter1) / 2); + + // sending from other will revert + vm.startPrank(from); + uint256 fromBalance = eigen.balanceOf(from); + vm.expectRevert("Eigen._beforeTokenTransfer: from or to must be whitelisted"); + eigen.transfer(to, fromBalance / 2); + } + + function test_CanSetAllowedTo(address from, address to) public filterAddress(from) filterAddress(to) { + _simulateMint(); + + // set allowedFrom[from] = true + vm.startPrank(minter1); + vm.expectEmit(true, true, true, true, address(eigen)); + emit SetAllowedTo(to, true); + eigen.setAllowedTo(to, true); + assertEq(eigen.allowedTo(to), true, "EigenTest.test_CanSetAllowedTo: allowedTo was not set correctly"); + + // new allowedFrom can send + vm.startPrank(from); + eigen.transfer(to, eigen.balanceOf(to) / 2); + + // set allowedFrom[from] = false + vm.startPrank(minter1); + vm.expectEmit(true, true, true, true, address(eigen)); + emit SetAllowedTo(to, false); + eigen.setAllowedTo(to, false); + assertEq(eigen.allowedTo(to), false, "EigenTest.test_CanSetAllowedTo: allowedTo was not set correctly"); + } + + function test_OnlyOwnerCanSetAllowedTo(address notOwner) public filterAddress(notOwner) { + _simulateMint(); + + // set allowedFrom[from] = true + vm.startPrank(notOwner); + vm.expectRevert("Ownable: caller is not the owner"); + eigen.setAllowedTo(notOwner, true); + } + + function test_disableTransferRestrictions(address from, address to) public filterAddress(from) filterAddress(to) { + _simulateMint(); + + vm.startPrank(minter1); + eigen.transfer(from, eigen.balanceOf(minter1) / 2); + + // transfer will revert + vm.startPrank(from); + uint256 fromBalance = eigen.balanceOf(from); + vm.expectRevert("Eigen._beforeTokenTransfer: from or to must be whitelisted"); + eigen.transfer(to, fromBalance / 2); + + assertEq(eigen.transferRestrictionsDisabledAfter(), type(uint256).max, "invalid test setup"); + + // set transfer restrictions to be disabled after one year in the future + vm.startPrank(minter1); + vm.expectEmit(true, true, true, true, address(eigen)); + emit TransferRestrictionsDisabled(); + eigen.disableTransferRestrictions(); + assertEq(eigen.transferRestrictionsDisabledAfter(), 0, "EigenTest.test_disableTransferRestrictions: transfer restrictions were not disabled correctly"); + + vm.startPrank(from); + // transfer restrictions are disabled + assertTrue(eigen.transfer(to, fromBalance / 2), "transfer returned false"); + } + + function _simulateMint() internal { + // dummy mint + EigenHarness(address(eigen)).mint(minter1, totalSupply / 2); + EigenHarness(address(eigen)).mint(minter2, totalSupply / 2); + + // set allowed froms + EigenHarness(address(eigen)).setAllowedFromPermissionless(minter1, true); + EigenHarness(address(eigen)).setAllowedFromPermissionless(minter2, true); + + // set transfer restrictions to be disabled after to max + EigenHarness(address(eigen)).setTransferRestrictionsDisabledAfterToMax(); + + // set owner to minter1 + EigenHarness(address(eigen)).transferOwnershipPermissionless(minter1); + } +} diff --git a/src/test/token/EigenWrapping.t.sol b/src/test/token/EigenWrapping.t.sol new file mode 100644 index 000000000..d2a8683aa --- /dev/null +++ b/src/test/token/EigenWrapping.t.sol @@ -0,0 +1,200 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.12; + +import "forge-std/Test.sol"; + +import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "../harnesses/EigenHarness.sol"; + +import "../../contracts/token/BackingEigen.sol"; + +contract EigenWrappingTests is Test { + mapping(address => bool) fuzzedOutAddresses; + + address minter1 = 0xbb00DDa2832850a43840A3A86515E3Fe226865F2; + address minter2 = 0x87787389BB2Eb2EC8Fe4aA6a2e33D671d925A60f; + + ProxyAdmin proxyAdmin; + + EigenHarness eigenImpl; + Eigen eigen; + + BackingEigen bEIGENImpl; + BackingEigen bEIGEN; + + uint256 totalSupply = 1.67e9 ether; + + // EVENTS FROM EIGEN.sol + /// @notice event emitted when the allowedFrom status of an address is set + event SetAllowedFrom(address indexed from, bool isAllowedFrom); + /// @notice event emitted when the allowedTo status of an address is set + event SetAllowedTo(address indexed to, bool isAllowedTo); + /// @notice event emitted when a minter mints + event Mint(address indexed minter, uint256 amount); + /// @notice event emitted when the transfer restrictions are disabled + event TransferRestrictionsDisabled(); + + modifier filterAddress(address fuzzedAddress) { + vm.assume(!fuzzedOutAddresses[fuzzedAddress]); + _; + } + + function setUp() public { + vm.startPrank(minter1); + proxyAdmin = new ProxyAdmin(); + + // deploy proxies + eigen = Eigen(address(new TransparentUpgradeableProxy(address(proxyAdmin), address(proxyAdmin), ""))); + bEIGEN = BackingEigen(address(new TransparentUpgradeableProxy(address(proxyAdmin), address(proxyAdmin), ""))); + + // deploy impls + eigenImpl = new EigenHarness(IERC20(address(bEIGEN))); + bEIGENImpl = new BackingEigen(IERC20(address(eigen))); + + // upgrade proxies + proxyAdmin.upgrade(TransparentUpgradeableProxy(payable(address(eigen))), address(eigenImpl)); + proxyAdmin.upgrade(TransparentUpgradeableProxy(payable(address(bEIGEN))), address(bEIGENImpl)); + + vm.stopPrank(); + + fuzzedOutAddresses[minter1] = true; + fuzzedOutAddresses[minter2] = true; + fuzzedOutAddresses[address(proxyAdmin)] = true; + fuzzedOutAddresses[address(eigen)] = true; + fuzzedOutAddresses[address(bEIGEN)] = true; + fuzzedOutAddresses[address(0)] = true; + } + + function test_AnyoneCanUnwrap(address unwrapper, uint256 unwrapAmount) public filterAddress(unwrapper) { + vm.assume(unwrapper != address(0)); + + _simulateMint(); + _simulateBackingAndSetTransferRestrictions(); + + // initial bEIGEN balance + uint256 initialBEIGENBalanceOfEigenToken = bEIGEN.balanceOf(address(eigen)); + // initial EIGEN token supply + uint256 initialEigenSupply = eigen.totalSupply(); + // minter1 balance + uint256 minter1Balance = eigen.balanceOf(minter1); + + // send EIGEN to unwrapper + vm.prank(minter1); + eigen.transfer(unwrapper, minter1Balance); + + // unwrap + // unwrap amount should be less than minter1 balance + unwrapAmount = unwrapAmount % minter1Balance; + vm.prank(unwrapper); + eigen.unwrap(unwrapAmount); + + // check that the total supply of bEIGEN is equal to the total supply of EIGEN + assertEq(eigen.totalSupply(), initialEigenSupply); + assertEq(bEIGEN.balanceOf(address(eigen)), initialBEIGENBalanceOfEigenToken - unwrapAmount); + assertEq(eigen.balanceOf(address(unwrapper)), minter1Balance - unwrapAmount); + assertEq(bEIGEN.balanceOf(address(unwrapper)), unwrapAmount); + } + + function test_AnyoneCanWrap(address wrapper, uint256 wrapAmount) public filterAddress(wrapper) { + vm.assume(wrapper != address(0)); + + _simulateMint(); + _simulateBackingAndSetTransferRestrictions(); + + // initial bEIGEN balance + uint256 initialBEIGENBalanceOfEigenToken = bEIGEN.balanceOf(address(eigen)); + // initial EIGEN token supply + uint256 initialEigenSupply = eigen.totalSupply(); + // minter1 balance + uint256 minter1Balance = eigen.balanceOf(minter1); + + // unwrap + vm.startPrank(minter1); + eigen.unwrap(minter1Balance); + + // send bEIGEN to wrapper + bEIGEN.transfer(wrapper, minter1Balance); + vm.stopPrank(); + + // wrap + // wrap amount should be less than minter1 balance + wrapAmount = wrapAmount % minter1Balance; + vm.startPrank(wrapper); + // approve bEIGEN + bEIGEN.approve(address(eigen), wrapAmount); + // wrap + eigen.wrap(wrapAmount); + vm.stopPrank(); + + // check that the total supply of bEIGEN is equal to the total supply of EIGEN + assertEq(eigen.totalSupply(), initialEigenSupply); + assertEq(bEIGEN.balanceOf(address(eigen)), initialBEIGENBalanceOfEigenToken - minter1Balance + wrapAmount); + assertEq(eigen.balanceOf(address(wrapper)), wrapAmount); + assertEq(bEIGEN.balanceOf(address(wrapper)), minter1Balance - wrapAmount); + } + + function test_CannotUnwrapMoreThanBalance(address unwrapper, uint256 unwrapAmount) public filterAddress(unwrapper) { + _simulateMint(); + _simulateBackingAndSetTransferRestrictions(); + + // unwrap amount should be less than minter1 balance + unwrapAmount = unwrapAmount % eigen.balanceOf(minter1); + + // send EIGEN to unwrapper + vm.prank(minter1); + eigen.transfer(unwrapper, unwrapAmount); + + // unwrap + vm.prank(unwrapper); + vm.expectRevert("ERC20: transfer amount exceeds balance"); + eigen.unwrap(unwrapAmount + 1); + } + + function test_CannotWrapMoreThanBalance(address wrapper, uint256 wrapAmount) public filterAddress(wrapper) { + _simulateMint(); + _simulateBackingAndSetTransferRestrictions(); + + // wrap amount should be less than minter1 balance + wrapAmount = wrapAmount % eigen.balanceOf(minter1); + + // unwrap + vm.startPrank(minter1); + eigen.unwrap(wrapAmount); + bEIGEN.transfer(wrapper, wrapAmount); + vm.stopPrank(); + + // wrap + vm.startPrank(wrapper); + // approve bEIGEN + bEIGEN.approve(address(eigen), type(uint256).max); + // send bEIGEN to wrapper + vm.expectRevert("ERC20: transfer amount exceeds balance"); + eigen.wrap(wrapAmount + 1); + vm.stopPrank(); + } + + function _simulateMint() internal { + // dummy mint + EigenHarness(address(eigen)).mint(minter1, totalSupply / 2); + EigenHarness(address(eigen)).mint(minter2, totalSupply / 2); + + // set allowed froms + EigenHarness(address(eigen)).setAllowedFromPermissionless(minter1, true); + EigenHarness(address(eigen)).setAllowedFromPermissionless(minter2, true); + + // set transfer restrictions to be disabled after to max + EigenHarness(address(eigen)).setTransferRestrictionsDisabledAfterToMax(); + + // set owner to minter1 + EigenHarness(address(eigen)).transferOwnershipPermissionless(minter1); + } + + function _simulateBackingAndSetTransferRestrictions() internal { + bEIGEN.initialize(minter1); + + vm.startPrank(minter1); + bEIGEN.setAllowedFrom(minter1, true); + vm.stopPrank(); + } +} diff --git a/src/test/token/bEIGEN.t.sol b/src/test/token/bEIGEN.t.sol new file mode 100644 index 000000000..5338c5702 --- /dev/null +++ b/src/test/token/bEIGEN.t.sol @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.12; + +import "forge-std/Test.sol"; + +import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "../harnesses/EigenHarness.sol"; + +import "../../contracts/token/BackingEigen.sol"; + + +contract bEIGENTest is Test { + mapping(address => bool) fuzzedOutAddresses; + + address minter1 = 0xbb00DDa2832850a43840A3A86515E3Fe226865F2; + + ProxyAdmin proxyAdmin; + + EigenHarness eigenImpl; + Eigen eigen; + + BackingEigen bEIGENImpl; + BackingEigen bEIGEN; + + + function setUp() public { + vm.startPrank(minter1); + proxyAdmin = new ProxyAdmin(); + + // deploy proxies + eigen = Eigen(address(new TransparentUpgradeableProxy(address(proxyAdmin), address(proxyAdmin), ""))); + bEIGEN = BackingEigen(address(new TransparentUpgradeableProxy(address(proxyAdmin), address(proxyAdmin), ""))); + + // deploy impls + eigenImpl = new EigenHarness(IERC20(address(bEIGEN))); + bEIGENImpl = new BackingEigen(IERC20(address(eigen))); + + // upgrade proxies + proxyAdmin.upgrade(TransparentUpgradeableProxy(payable(address(eigen))), address(eigenImpl)); + proxyAdmin.upgrade(TransparentUpgradeableProxy(payable(address(bEIGEN))), address(bEIGENImpl)); + + vm.stopPrank(); + } + + function test_Initialize() public { + bEIGEN.initialize(minter1); + + // check that the owner is minter1 + assertEq(bEIGEN.owner(), minter1); + // check the transfer restrictions are disabled after one year in the future + assertEq(bEIGEN.transferRestrictionsDisabledAfter(), type(uint256).max); + } + + function testFuzz_CanBackTheEigenToken(uint eigenSupply) public { + StdCheats.deal(address(eigen), address(this), eigenSupply); + + bEIGEN.initialize(minter1); + + // check that the total supply of bEIGEN is equal to the total supply of EIGEN + assertEq(bEIGEN.totalSupply(), eigen.totalSupply()); + assertEq(bEIGEN.balanceOf(address(eigen)), bEIGEN.totalSupply()); + } +} diff --git a/src/test/unit/AVSDirectoryUnit.t.sol b/src/test/unit/AVSDirectoryUnit.t.sol index d18b98fe9..8876651ca 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.12; import "@openzeppelin/contracts/mocks/ERC1271WalletMock.sol"; diff --git a/src/test/unit/DelayedWithdrawalRouterUnit.t.sol b/src/test/unit/DelayedWithdrawalRouterUnit.t.sol index 40c5d661d..848d1319e 100644 --- a/src/test/unit/DelayedWithdrawalRouterUnit.t.sol +++ b/src/test/unit/DelayedWithdrawalRouterUnit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; @@ -471,4 +471,4 @@ contract DelayedWithdrawalRouterUnitTests is Test { _pseudorandomNumber = uint256(keccak256(abi.encode(_pseudorandomNumber))); return _pseudorandomNumber; } -} \ No newline at end of file +} diff --git a/src/test/unit/DelegationUnit.t.sol b/src/test/unit/DelegationUnit.t.sol index bcb874fdb..6805993b4 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.12; import "@openzeppelin/contracts/mocks/ERC1271WalletMock.sol"; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; @@ -2026,6 +2026,8 @@ contract DelegationManagerUnitTests_delegateToBySignature is DelegationManagerUn uint256 stakerExpiry, uint256 delegationApproverExpiry ) public filterFuzzedAddressInputs(caller) { + cheats.assume(caller != defaultOperator); + // roll to a very late timestamp skip(type(uint256).max / 2); @@ -2757,6 +2759,8 @@ contract DelegationManagerUnitTests_Undelegate is DelegationManagerUnitTests { * 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); @@ -2854,6 +2858,7 @@ contract DelegationManagerUnitTests_queueWithdrawals is DelegationManagerUnitTes withdrawalAmount: 100 }); cheats.expectRevert("DelegationManager.queueWithdrawal: withdrawer must be staker"); + cheats.prank(defaultStaker); delegationManager.queueWithdrawals(queuedWithdrawalParams); } @@ -3344,4 +3349,4 @@ contract DelegationManagerUnitTests_completeQueuedWithdrawal is DelegationManage assertEq(operatorSharesAfter, operatorSharesBefore + withdrawalAmount, "operator shares not increased correctly"); assertFalse(delegationManager.pendingWithdrawals(withdrawalRoot), "withdrawalRoot should be completed and marked false now"); } -} \ No newline at end of file +} diff --git a/src/test/unit/EigenPod-PodManagerUnit.t.sol b/src/test/unit/EigenPod-PodManagerUnit.t.sol index b0507257b..ca33ffde0 100644 --- a/src/test/unit/EigenPod-PodManagerUnit.t.sol +++ b/src/test/unit/EigenPod-PodManagerUnit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.8.12; +pragma solidity ^0.8.12; import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; diff --git a/src/test/unit/EigenPodManagerUnit.t.sol b/src/test/unit/EigenPodManagerUnit.t.sol index f88697273..bc553243c 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.12; import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; diff --git a/src/test/unit/EigenPodUnit.t.sol b/src/test/unit/EigenPodUnit.t.sol index f9100c7fe..6af23d1bd 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.12; import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; import "@openzeppelin/contracts/utils/Create2.sol"; @@ -731,7 +731,7 @@ contract EigenPodUnitTests_WithdrawalTests is EigenPodHarnessSetup, ProofParsing eigenPodHarness.activateRestaking(); // Expect revert - cheats.expectRevert("EigenPod.proofIsForValidTimestamp: beacon chain proof must be for timestamp after mostRecentWithdrawalTimestamp"); + cheats.expectRevert("EigenPod.proofIsForValidTimestamp: beacon chain proof must be at or after mostRecentWithdrawalTimestamp"); eigenPodHarness.verifyAndProcessWithdrawal( beaconStateRoot, withdrawalToProve, @@ -805,6 +805,50 @@ contract EigenPodUnitTests_WithdrawalTests is EigenPodHarnessSetup, ProofParsing assertTrue(eigenPodHarness.provenWithdrawal(validatorPubKeyHash, withdrawalTimestamp), "Withdrawal not set to proven"); } + // regression test for off-by-one error + function test_verifyAndProcessWithdrawal_atLatestWithdrawalTimestamp() public setWithdrawalCredentialsExcess { + // Set JSON & params + setJSON("./src/test/test-data/fullWithdrawalProof_Latest.json"); + _setWithdrawalProofParams(); + + uint64 withdrawalTimestamp = withdrawalToProve.getWithdrawalTimestamp(); + // set the `mostRecentWithdrawalTimestamp` to be equal to the withdrawal timestamp + eigenPodHarness.setMostRecentWithdrawalTimestamp(withdrawalTimestamp); + + // Process withdrawal + eigenPodHarness.verifyAndProcessWithdrawal( + beaconStateRoot, + withdrawalToProve, + validatorFieldsProof, + validatorFields, + withdrawalFields + ); + + // Verify storage + bytes32 validatorPubKeyHash = validatorFields.getPubkeyHash(); + assertTrue(eigenPodHarness.provenWithdrawal(validatorPubKeyHash, withdrawalTimestamp), "Withdrawal not set to proven"); + } + + function test_revert_verifyAndProcessWithdrawal_beforeLatestWithdrawalTimestamp() public setWithdrawalCredentialsExcess { + // Set JSON & params + setJSON("./src/test/test-data/fullWithdrawalProof_Latest.json"); + _setWithdrawalProofParams(); + + uint64 withdrawalTimestamp = withdrawalToProve.getWithdrawalTimestamp(); + // set the `mostRecentWithdrawalTimestamp` to just after the withdrawal timestamp + eigenPodHarness.setMostRecentWithdrawalTimestamp(withdrawalTimestamp + 1); + + // Process withdrawal, expect revert + cheats.expectRevert("EigenPod.proofIsForValidTimestamp: beacon chain proof must be at or after mostRecentWithdrawalTimestamp"); + eigenPodHarness.verifyAndProcessWithdrawal( + beaconStateRoot, + withdrawalToProve, + validatorFieldsProof, + validatorFields, + withdrawalFields + ); + } + /// @notice Tests processing a full withdrawal > MAX_RESTAKED_GWEI_PER_VALIDATOR function test_processFullWithdrawal_excess32ETH() public setWithdrawalCredentialsExcess { // Set JSON & params @@ -1047,4 +1091,4 @@ contract EigenPodUnitTests_WithdrawalTests is EigenPodHarnessSetup, ProofParsing ); _; } -} \ No newline at end of file +} diff --git a/src/test/unit/PausableUnit.t.sol b/src/test/unit/PausableUnit.t.sol index 4d5bc3a52..c8f03aa92 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.12; import "forge-std/Test.sol"; @@ -173,4 +173,4 @@ contract PausableUnitTests is Test { cheats.stopPrank(); } -} \ No newline at end of file +} diff --git a/src/test/unit/PauserRegistryUnit.t.sol b/src/test/unit/PauserRegistryUnit.t.sol index c29dde4f1..802c228e8 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.12; import "forge-std/Test.sol"; @@ -98,4 +98,4 @@ contract PauserRegistryUnitTests is Test { pauserRegistry.setUnpauser(newUnpauser); cheats.stopPrank(); } -} \ No newline at end of file +} diff --git a/src/test/unit/StrategyBaseTVLLimitsUnit.sol b/src/test/unit/StrategyBaseTVLLimitsUnit.sol index b2a4ee7f3..6a2b1d8f9 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.12; import "./StrategyBaseUnit.t.sol"; @@ -283,4 +283,4 @@ contract StrategyBaseTVLLimitsUnitTests is StrategyBaseUnitTests { ) public virtual override filterToValidDepositAmounts(amountToDeposit) { StrategyBaseUnitTests.testWithdrawWithPriorTotalSharesAndAmountSharesNotEqual(amountToDeposit, sharesToWithdraw); } -} \ No newline at end of file +} diff --git a/src/test/unit/StrategyBaseUnit.t.sol b/src/test/unit/StrategyBaseUnit.t.sol index 9d33abf94..659acf1c8 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.12; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; @@ -375,4 +375,4 @@ contract StrategyBaseUnitTests is Test { strategy.withdraw(address(this), underlyingToken, sharesToWithdraw); cheats.stopPrank(); } -} \ No newline at end of file +} diff --git a/src/test/unit/StrategyManagerUnit.t.sol b/src/test/unit/StrategyManagerUnit.t.sol index 578b5f3a0..d4793f901 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.12; import "@openzeppelin/contracts/mocks/ERC1271WalletMock.sol"; import "src/contracts/core/StrategyManager.sol"; diff --git a/src/test/utils/EigenLayerUnitTestBase.sol b/src/test/utils/EigenLayerUnitTestBase.sol index d0b533398..9a776e9bf 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.12; 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 a6d5bd0cf..5c8d86a4d 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.12; import "src/test/mocks/StrategyManagerMock.sol"; import "src/test/mocks/DelegationManagerMock.sol"; diff --git a/src/test/utils/Operators.sol b/src/test/utils/Operators.sol index 84287def6..7c5faabd6 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.12; 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 5f93d50bf..9c32971ab 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.12; 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 5baf260b7..fd69678ec 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.12; import "forge-std/Test.sol"; import "forge-std/StdJson.sol"; @@ -196,4 +196,4 @@ contract ProofParsing is Test { } return validatorFieldsProof; } -} \ No newline at end of file +} diff --git a/src/test/utils/SignatureCompaction.sol b/src/test/utils/SignatureCompaction.sol index dd5f0dcef..c10b2db1d 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.12; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; diff --git a/src/test/utils/Utils.sol b/src/test/utils/Utils.sol index acae8d956..10c5653eb 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.12; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "src/contracts/strategies/StrategyBase.sol";