{"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":"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}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"canSlash(address,address)":"d98128c0","canWithdraw(address,uint32,uint256)":"8105e043","contractCanSlashOperatorUntilBlock(address,address)":"6f0c2f74","delegation()":"df5cf723","freezeOperator(address)":"38c8ee64","getCorrectValueForInsertAfter(address,uint32)":"723e59c7","getMiddlewareTimesIndexServeUntilBlock(address,uint32)":"7259a45c","getMiddlewareTimesIndexStalestUpdateBlock(address,uint32)":"1874e5ae","isFrozen(address)":"e5839836","latestUpdateBlock(address,address)":"da16e29b","middlewareTimesLength(address)":"a49db732","operatorToMiddlewareTimes(address,uint256)":"282670fc","operatorWhitelistedContractsLinkedListEntry(address,address)":"855fcc4a","operatorWhitelistedContractsLinkedListSize(address)":"e921d4fa","optIntoSlashing(address)":"f73b7519","recordFirstStakeUpdate(address,uint32)":"175d3205","recordLastStakeUpdateAndRevokeSlashingAbility(address,uint32)":"0ffabbce","recordStakeUpdate(address,uint32,uint32,uint256)":"c747075b","resetFrozenStatus(address[])":"7cf72bba","strategyManager()":"39b70e38"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previouslySlashedAddress\",\"type\":\"address\"}],\"name\":\"FrozenStatusReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"stalestUpdateBlock\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"latestServeUntilBlock\",\"type\":\"uint32\"}],\"name\":\"MiddlewareTimesAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"slashedOperator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"slashingContract\",\"type\":\"address\"}],\"name\":\"OperatorFrozen\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"OptedIntoSlashing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"contractCanSlashOperatorUntilBlock\",\"type\":\"uint32\"}],\"name\":\"SlashingAbilityRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"toBeSlashed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"slashingContract\",\"type\":\"address\"}],\"name\":\"canSlash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\"}],\"name\":\"canWithdraw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceContract\",\"type\":\"address\"}],\"name\":\"contractCanSlashOperatorUntilBlock\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegation\",\"outputs\":[{\"internalType\":\"contract IDelegationManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"toBeFrozen\",\"type\":\"address\"}],\"name\":\"freezeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"updateBlock\",\"type\":\"uint32\"}],\"name\":\"getCorrectValueForInsertAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"getMiddlewareTimesIndexServeUntilBlock\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"getMiddlewareTimesIndexStalestUpdateBlock\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"serviceContract\",\"type\":\"address\"}],\"name\":\"latestUpdateBlock\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"middlewareTimesLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"arrayIndex\",\"type\":\"uint256\"}],\"name\":\"operatorToMiddlewareTimes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"stalestUpdateBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestServeUntilBlock\",\"type\":\"uint32\"}],\"internalType\":\"struct ISlasher.MiddlewareTimes\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"node\",\"type\":\"address\"}],\"name\":\"operatorWhitelistedContractsLinkedListEntry\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"operatorWhitelistedContractsLinkedListSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"optIntoSlashing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"serveUntilBlock\",\"type\":\"uint32\"}],\"name\":\"recordFirstStakeUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"serveUntilBlock\",\"type\":\"uint32\"}],\"name\":\"recordLastStakeUpdateAndRevokeSlashingAbility\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"updateBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"serveUntilBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"insertAfter\",\"type\":\"uint256\"}],\"name\":\"recordStakeUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"frozenAddresses\",\"type\":\"address[]\"}],\"name\":\"resetFrozenStatus\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"strategyManager\",\"outputs\":[{\"internalType\":\"contract IStrategyManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Layr Labs, Inc.\",\"events\":{\"OperatorFrozen(address,address)\":{\"details\":\"The `slashingContract` must have permission to slash the `slashedOperator`, i.e. `canSlash(slasherOperator, slashingContract)` must return 'true'.\"}},\"kind\":\"dev\",\"methods\":{\"canWithdraw(address,uint32,uint256)\":{\"details\":\"The correct `middlewareTimesIndex` input should be computable off-chain.\",\"params\":{\"middlewareTimesIndex\":\"Indicates an index in `operatorToMiddlewareTimes[operator]` to consult as proof of the `operator`'s ability to withdraw\",\"operator\":\"Either the operator who queued the withdrawal themselves, or if the withdrawing party is a staker who delegated to an operator, this address is the operator *who the staker was delegated to* at the time of the `withdrawalStartBlock`.\",\"withdrawalStartBlock\":\"The block number at which the withdrawal was initiated.\"}},\"freezeOperator(address)\":{\"details\":\"Technically the operator is 'frozen' (hence the name of this function), and then subject to slashing pending a decision by a human-in-the-loop.The operator must have previously given the caller (which should be a contract) the ability to slash them, through a call to `optIntoSlashing`.\",\"params\":{\"toBeFrozen\":\"The operator to be frozen.\"}},\"isFrozen(address)\":{\"params\":{\"staker\":\"The staker of interest.\"},\"returns\":{\"_0\":\"Returns 'true' if `staker` themselves has their status set to frozen, OR if the staker is delegated to an operator who has their status set to frozen. Otherwise returns 'false'.\"}},\"optIntoSlashing(address)\":{\"details\":\"Typically, this function must be called prior to registering for a middleware.\"},\"recordFirstStakeUpdate(address,uint32)\":{\"details\":\"adds the middleware's slashing contract to the operator's linked list\",\"params\":{\"operator\":\"the operator whose stake update is being recorded\",\"serveUntilBlock\":\"the block until which the operator's stake at the current block is slashable\"}},\"recordLastStakeUpdateAndRevokeSlashingAbility(address,uint32)\":{\"details\":\"removes the middleware's slashing contract to the operator's linked list and revokes the middleware's (i.e. caller's) ability to slash `operator` once `serveUntil` is reached\",\"params\":{\"operator\":\"the operator whose stake update is being recorded\",\"serveUntilBlock\":\"the block until which the operator's stake at the current block is slashable\"}},\"recordStakeUpdate(address,uint32,uint32,uint256)\":{\"details\":\"insertAfter should be calculated offchain before making the transaction that calls this. this is subject to race conditions, but it is anticipated to be rare and not detrimental.\",\"params\":{\"insertAfter\":\"the element of the operators linked list that the currently updating middleware should be inserted after\",\"operator\":\"the operator whose stake update is being recorded\",\"serveUntilBlock\":\"the block until which the operator's stake at updateBlock is slashable\",\"updateBlock\":\"the block for which the stake update is being recorded\"}},\"resetFrozenStatus(address[])\":{\"details\":\"Callable only by the contract owner (i.e. governance).\"}},\"title\":\"Interface for the primary 'slashing' contract for EigenLayer.\",\"version\":1},\"userdoc\":{\"events\":{\"FrozenStatusReset(address)\":{\"notice\":\"Emitted when `previouslySlashedAddress` is 'unfrozen', allowing them to again move deposited funds within EigenLayer.\"},\"MiddlewareTimesAdded(address,uint256,uint32,uint32)\":{\"notice\":\"Emitted when a middleware times is added to `operator`'s array.\"},\"OperatorFrozen(address,address)\":{\"notice\":\"Emitted when `slashingContract` 'freezes' the `slashedOperator`.\"},\"OptedIntoSlashing(address,address)\":{\"notice\":\"Emitted when `operator` begins to allow `contractAddress` to slash them.\"},\"SlashingAbilityRevoked(address,address,uint32)\":{\"notice\":\"Emitted when `contractAddress` signals that it will no longer be able to slash `operator` after the `contractCanSlashOperatorUntilBlock`.\"}},\"kind\":\"user\",\"methods\":{\"canSlash(address,address)\":{\"notice\":\"Returns true if `slashingContract` is currently allowed to slash `toBeSlashed`.\"},\"canWithdraw(address,uint32,uint256)\":{\"notice\":\"Returns 'true' if `operator` can currently complete a withdrawal started at the `withdrawalStartBlock`, with `middlewareTimesIndex` used to specify the index of a `MiddlewareTimes` struct in the operator's list (i.e. an index in `operatorToMiddlewareTimes[operator]`). The specified struct is consulted as proof of the `operator`'s ability (or lack thereof) to complete the withdrawal. This function will return 'false' if the operator cannot currently complete a withdrawal started at the `withdrawalStartBlock`, *or* in the event that an incorrect `middlewareTimesIndex` is supplied, even if one or more correct inputs exist.\"},\"contractCanSlashOperatorUntilBlock(address,address)\":{\"notice\":\"Returns the block until which `serviceContract` is allowed to slash the `operator`.\"},\"delegation()\":{\"notice\":\"The DelegationManager contract of EigenLayer\"},\"freezeOperator(address)\":{\"notice\":\"Used for 'slashing' a certain operator.\"},\"getCorrectValueForInsertAfter(address,uint32)\":{\"notice\":\"A search routine for finding the correct input value of `insertAfter` to `recordStakeUpdate` / `_updateMiddlewareList`.\"},\"getMiddlewareTimesIndexServeUntilBlock(address,uint32)\":{\"notice\":\"Getter function for fetching `operatorToMiddlewareTimes[operator][index].latestServeUntil`.\"},\"getMiddlewareTimesIndexStalestUpdateBlock(address,uint32)\":{\"notice\":\"Getter function for fetching `operatorToMiddlewareTimes[operator][index].stalestUpdateBlock`.\"},\"isFrozen(address)\":{\"notice\":\"Used to determine whether `staker` is actively 'frozen'. If a staker is frozen, then they are potentially subject to slashing of their funds, and cannot cannot deposit or withdraw from the strategyManager until the slashing process is completed and the staker's status is reset (to 'unfrozen').\"},\"latestUpdateBlock(address,address)\":{\"notice\":\"Returns the block at which the `serviceContract` last updated its view of the `operator`'s stake\"},\"middlewareTimesLength(address)\":{\"notice\":\"Getter function for fetching `operatorToMiddlewareTimes[operator].length`\"},\"operatorToMiddlewareTimes(address,uint256)\":{\"notice\":\"operator => [ ( the least recent update block of all of the middlewares it's serving/served, latest time that the stake bonded at that update needed to serve until ) ]\"},\"operatorWhitelistedContractsLinkedListEntry(address,address)\":{\"notice\":\"Getter function for fetching a single node in the operator's linked list (`_operatorToWhitelistedContractsByUpdate[operator]`).\"},\"operatorWhitelistedContractsLinkedListSize(address)\":{\"notice\":\"Getter function for fetching `_operatorToWhitelistedContractsByUpdate[operator].size`.\"},\"optIntoSlashing(address)\":{\"notice\":\"Gives the `contractAddress` permission to slash the funds of the caller.\"},\"recordFirstStakeUpdate(address,uint32)\":{\"notice\":\"this function is a called by middlewares during an operator's registration to make sure the operator's stake at registration is slashable until serveUntil\"},\"recordLastStakeUpdateAndRevokeSlashingAbility(address,uint32)\":{\"notice\":\"this function is a called by middlewares during an operator's deregistration to make sure the operator's stake at deregistration is slashable until serveUntil\"},\"recordStakeUpdate(address,uint32,uint32,uint256)\":{\"notice\":\"this function is a called by middlewares during a stake update for an operator (perhaps to free pending withdrawals) to make sure the operator's stake at updateBlock is slashable until serveUntil\"},\"resetFrozenStatus(address[])\":{\"notice\":\"Removes the 'frozen' status from each of the `frozenAddresses`\"},\"strategyManager()\":{\"notice\":\"The StrategyManager contract of EigenLayer\"}},\"notice\":\"Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-serviceSee the `Slasher` contract itself for implementation details.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol\":\"ISlasher\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@credible-squaring/=src/\",\":@eigenlayer-middleware/=lib/eigenlayer-middleware/\",\":@eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/\",\":@eigenlayer/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/\",\":@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/\",\":@openzeppelin-v4.9.0/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":@openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-contracts/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/\",\":erc4626-tests/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/\",\":openzeppelin-contracts-upgradeable/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts-v4.9.0/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/\",\":openzeppelin-contracts/=lib/eigenlayer-contracts/lib/openzeppelin-contracts/\",\":openzeppelin/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/\"]},\"sources\":{\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol\":{\"keccak256\":\"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983\",\"dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol\":{\"keccak256\":\"0x7179a98578e495167d92e4adae802e7d68bee0f0e67f411636e0c3f87c494b64\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://7c2ec7d551fea897f6b68dc196d5236afec6952e6169a46f5f3e90375783ddc5\",\"dweb:/ipfs/Qmd5UJQnoCc2S7d82mjuLNRXJFv9T2ZrxMi37tqxig41B4\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol\":{\"keccak256\":\"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91\",\"dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol\":{\"keccak256\":\"0x3bb371aa779366ac9bafa1f612d71c617c2bdb3b10784662f16ef9401f18a34e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://82bba4971cc559e7173f0cb6fa64d606d6421c4e23447ac92dc7a8b4c9a907da\",\"dweb:/ipfs/QmQQfChLBTM7MjRzMZt7AWv5BfFPEnR95jtFJ5MJDZduZQ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol\":{\"keccak256\":\"0x22b7a17d53696412f80645f1fa65274ae89040bdc706262e3b6cc577dbafcaa4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b15002346892a48fd7cf9a8a4cf121e17ba133d21e4822e71fbffac85117d6b2\",\"dweb:/ipfs/QmRBPJUcRQ6uKmSvCYhhtVWcKCAWkQFSVZZwZR7HR42kiz\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0x33a935182f77cfd508fc57ec8e45afc8dc3748e1e9b764d36bf90ae6466f257b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://d3981b5bbf435cda04e2ed2f348f886ebf1500c18dd4bbf67b1f1bc0272e2d3f\",\"dweb:/ipfs/QmYHDzQx29ataM2ejRCXFcPxaPdxWqX8v7uwUAYoG9572w\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol\":{\"keccak256\":\"0xffafae142d5337a5c204519e8f82fe3a5fae137286ebf597fa50699cf12c2474\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b577a12f7788095b230fd069b36ba9b3cdb376a0b7c3d8ae71588e5bf0c2f574\",\"dweb:/ipfs/QmXd1cDzYpxecyFEwowLiBKKjzRHgV8cs1qvLwypdEbVYy\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol\":{\"keccak256\":\"0x3b62ea6ee304cbab976ff206bcf55268f18a3291708021557f93f899f99862e4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b59a96fbf9940a7795d9a5fcb9e03939a87216317fb67872b7017285bf7eb49b\",\"dweb:/ipfs/QmdiH5AfYBvuTpzxTqfhorLG25t2dhSTKWh1cvBbYxGDJH\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol\":{\"keccak256\":\"0x7655919fae553e75ff196b31c9244079ff222e34ff43f36c41429ee826cfad9b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://d5d35a784a9511b351826cb70b00d92c3d374474f256b01af05cd1acb1ce6c10\",\"dweb:/ipfs/QmZog3BrpLa213wj5qxVYMQv7jdrkf5AAufLCVaMZsL7Gs\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol\":{\"keccak256\":\"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73\",\"dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol\":{\"keccak256\":\"0x160fea76cd2e64e4e4bb66f4d793ff4a6ddb7cb785a30a0615e9f4956aa12c8b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://03f16b6f03051893671ba0d1445fb45bc6105f05ee3ca3002fd400ac63c8fd20\",\"dweb:/ipfs/QmRbQ6k4kJYjfDTv5Z7bSfy5ewjjgHUVEhsWPWsyz57sUa\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol\":{\"keccak256\":\"0x633b5fb10209891f696a9c8db4d7327ed7f560a2e9710489e38a67daeda59a96\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c8381baaec3afa6b200420c093706974776dfd14f6887abe7457eb867351a068\",\"dweb:/ipfs/QmP9H9ttS1sJ6FrvMEefJhU6B4z1wMCjcYYZqVfsLXagJE\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol\":{\"keccak256\":\"0x098850d09b65bb7dbad5ea0513eacb77f2701e135d9727b3627e13f303b2ff41\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3519f5a415b99d196f3cecef3f48ea116f2f3a2b381efcc96a5d7eff6934c2f3\",\"dweb:/ipfs/QmbCcFWgmFjXeZrvfEFQ17AgEueW9wS17HhvjkxMi5x3H8\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol\":{\"keccak256\":\"0x6e82a559dc583bf4b15867654e82f3aca9a862589209abac1c4356142a3b2211\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8a1a4819b95c7da710e11efb279bd4b596139dc12c96c45a366d8e1893018eb1\",\"dweb:/ipfs/QmZBHPLKoYepZmA7AL9ECJFkbBhujSNvvc8pJmNC9MnRni\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.12+commit.f00d7308"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"previouslySlashedAddress","type":"address","indexed":true}],"type":"event","name":"FrozenStatusReset","anonymous":false},{"inputs":[{"internalType":"address","name":"operator","type":"address","indexed":false},{"internalType":"uint256","name":"index","type":"uint256","indexed":false},{"internalType":"uint32","name":"stalestUpdateBlock","type":"uint32","indexed":false},{"internalType":"uint32","name":"latestServeUntilBlock","type":"uint32","indexed":false}],"type":"event","name":"MiddlewareTimesAdded","anonymous":false},{"inputs":[{"internalType":"address","name":"slashedOperator","type":"address","indexed":true},{"internalType":"address","name":"slashingContract","type":"address","indexed":true}],"type":"event","name":"OperatorFrozen","anonymous":false},{"inputs":[{"internalType":"address","name":"operator","type":"address","indexed":true},{"internalType":"address","name":"contractAddress","type":"address","indexed":true}],"type":"event","name":"OptedIntoSlashing","anonymous":false},{"inputs":[{"internalType":"address","name":"operator","type":"address","indexed":true},{"internalType":"address","name":"contractAddress","type":"address","indexed":true},{"internalType":"uint32","name":"contractCanSlashOperatorUntilBlock","type":"uint32","indexed":false}],"type":"event","name":"SlashingAbilityRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"toBeSlashed","type":"address"},{"internalType":"address","name":"slashingContract","type":"address"}],"stateMutability":"view","type":"function","name":"canSlash","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint32","name":"withdrawalStartBlock","type":"uint32"},{"internalType":"uint256","name":"middlewareTimesIndex","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"canWithdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"serviceContract","type":"address"}],"stateMutability":"view","type":"function","name":"contractCanSlashOperatorUntilBlock","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"delegation","outputs":[{"internalType":"contract IDelegationManager","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"toBeFrozen","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"freezeOperator"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint32","name":"updateBlock","type":"uint32"}],"stateMutability":"view","type":"function","name":"getCorrectValueForInsertAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint32","name":"index","type":"uint32"}],"stateMutability":"view","type":"function","name":"getMiddlewareTimesIndexServeUntilBlock","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint32","name":"index","type":"uint32"}],"stateMutability":"view","type":"function","name":"getMiddlewareTimesIndexStalestUpdateBlock","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"stateMutability":"view","type":"function","name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"serviceContract","type":"address"}],"stateMutability":"view","type":"function","name":"latestUpdateBlock","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"middlewareTimesLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"arrayIndex","type":"uint256"}],"stateMutability":"view","type":"function","name":"operatorToMiddlewareTimes","outputs":[{"internalType":"struct ISlasher.MiddlewareTimes","name":"","type":"tuple","components":[{"internalType":"uint32","name":"stalestUpdateBlock","type":"uint32"},{"internalType":"uint32","name":"latestServeUntilBlock","type":"uint32"}]}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"node","type":"address"}],"stateMutability":"view","type":"function","name":"operatorWhitelistedContractsLinkedListEntry","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"operatorWhitelistedContractsLinkedListSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"optIntoSlashing"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint32","name":"serveUntilBlock","type":"uint32"}],"stateMutability":"nonpayable","type":"function","name":"recordFirstStakeUpdate"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint32","name":"serveUntilBlock","type":"uint32"}],"stateMutability":"nonpayable","type":"function","name":"recordLastStakeUpdateAndRevokeSlashingAbility"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint32","name":"updateBlock","type":"uint32"},{"internalType":"uint32","name":"serveUntilBlock","type":"uint32"},{"internalType":"uint256","name":"insertAfter","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"recordStakeUpdate"},{"inputs":[{"internalType":"address[]","name":"frozenAddresses","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"resetFrozenStatus"},{"inputs":[],"stateMutability":"view","type":"function","name":"strategyManager","outputs":[{"internalType":"contract IStrategyManager","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"canWithdraw(address,uint32,uint256)":{"details":"The correct `middlewareTimesIndex` input should be computable off-chain.","params":{"middlewareTimesIndex":"Indicates an index in `operatorToMiddlewareTimes[operator]` to consult as proof of the `operator`'s ability to withdraw","operator":"Either the operator who queued the withdrawal themselves, or if the withdrawing party is a staker who delegated to an operator, this address is the operator *who the staker was delegated to* at the time of the `withdrawalStartBlock`.","withdrawalStartBlock":"The block number at which the withdrawal was initiated."}},"freezeOperator(address)":{"details":"Technically the operator is 'frozen' (hence the name of this function), and then subject to slashing pending a decision by a human-in-the-loop.The operator must have previously given the caller (which should be a contract) the ability to slash them, through a call to `optIntoSlashing`.","params":{"toBeFrozen":"The operator to be frozen."}},"isFrozen(address)":{"params":{"staker":"The staker of interest."},"returns":{"_0":"Returns 'true' if `staker` themselves has their status set to frozen, OR if the staker is delegated to an operator who has their status set to frozen. Otherwise returns 'false'."}},"optIntoSlashing(address)":{"details":"Typically, this function must be called prior to registering for a middleware."},"recordFirstStakeUpdate(address,uint32)":{"details":"adds the middleware's slashing contract to the operator's linked list","params":{"operator":"the operator whose stake update is being recorded","serveUntilBlock":"the block until which the operator's stake at the current block is slashable"}},"recordLastStakeUpdateAndRevokeSlashingAbility(address,uint32)":{"details":"removes the middleware's slashing contract to the operator's linked list and revokes the middleware's (i.e. caller's) ability to slash `operator` once `serveUntil` is reached","params":{"operator":"the operator whose stake update is being recorded","serveUntilBlock":"the block until which the operator's stake at the current block is slashable"}},"recordStakeUpdate(address,uint32,uint32,uint256)":{"details":"insertAfter should be calculated offchain before making the transaction that calls this. this is subject to race conditions, but it is anticipated to be rare and not detrimental.","params":{"insertAfter":"the element of the operators linked list that the currently updating middleware should be inserted after","operator":"the operator whose stake update is being recorded","serveUntilBlock":"the block until which the operator's stake at updateBlock is slashable","updateBlock":"the block for which the stake update is being recorded"}},"resetFrozenStatus(address[])":{"details":"Callable only by the contract owner (i.e. governance)."}},"version":1},"userdoc":{"kind":"user","methods":{"canSlash(address,address)":{"notice":"Returns true if `slashingContract` is currently allowed to slash `toBeSlashed`."},"canWithdraw(address,uint32,uint256)":{"notice":"Returns 'true' if `operator` can currently complete a withdrawal started at the `withdrawalStartBlock`, with `middlewareTimesIndex` used to specify the index of a `MiddlewareTimes` struct in the operator's list (i.e. an index in `operatorToMiddlewareTimes[operator]`). The specified struct is consulted as proof of the `operator`'s ability (or lack thereof) to complete the withdrawal. This function will return 'false' if the operator cannot currently complete a withdrawal started at the `withdrawalStartBlock`, *or* in the event that an incorrect `middlewareTimesIndex` is supplied, even if one or more correct inputs exist."},"contractCanSlashOperatorUntilBlock(address,address)":{"notice":"Returns the block until which `serviceContract` is allowed to slash the `operator`."},"delegation()":{"notice":"The DelegationManager contract of EigenLayer"},"freezeOperator(address)":{"notice":"Used for 'slashing' a certain operator."},"getCorrectValueForInsertAfter(address,uint32)":{"notice":"A search routine for finding the correct input value of `insertAfter` to `recordStakeUpdate` / `_updateMiddlewareList`."},"getMiddlewareTimesIndexServeUntilBlock(address,uint32)":{"notice":"Getter function for fetching `operatorToMiddlewareTimes[operator][index].latestServeUntil`."},"getMiddlewareTimesIndexStalestUpdateBlock(address,uint32)":{"notice":"Getter function for fetching `operatorToMiddlewareTimes[operator][index].stalestUpdateBlock`."},"isFrozen(address)":{"notice":"Used to determine whether `staker` is actively 'frozen'. If a staker is frozen, then they are potentially subject to slashing of their funds, and cannot cannot deposit or withdraw from the strategyManager until the slashing process is completed and the staker's status is reset (to 'unfrozen')."},"latestUpdateBlock(address,address)":{"notice":"Returns the block at which the `serviceContract` last updated its view of the `operator`'s stake"},"middlewareTimesLength(address)":{"notice":"Getter function for fetching `operatorToMiddlewareTimes[operator].length`"},"operatorToMiddlewareTimes(address,uint256)":{"notice":"operator => [ ( the least recent update block of all of the middlewares it's serving/served, latest time that the stake bonded at that update needed to serve until ) ]"},"operatorWhitelistedContractsLinkedListEntry(address,address)":{"notice":"Getter function for fetching a single node in the operator's linked list (`_operatorToWhitelistedContractsByUpdate[operator]`)."},"operatorWhitelistedContractsLinkedListSize(address)":{"notice":"Getter function for fetching `_operatorToWhitelistedContractsByUpdate[operator].size`."},"optIntoSlashing(address)":{"notice":"Gives the `contractAddress` permission to slash the funds of the caller."},"recordFirstStakeUpdate(address,uint32)":{"notice":"this function is a called by middlewares during an operator's registration to make sure the operator's stake at registration is slashable until serveUntil"},"recordLastStakeUpdateAndRevokeSlashingAbility(address,uint32)":{"notice":"this function is a called by middlewares during an operator's deregistration to make sure the operator's stake at deregistration is slashable until serveUntil"},"recordStakeUpdate(address,uint32,uint32,uint256)":{"notice":"this function is a called by middlewares during a stake update for an operator (perhaps to free pending withdrawals) to make sure the operator's stake at updateBlock is slashable until serveUntil"},"resetFrozenStatus(address[])":{"notice":"Removes the 'frozen' status from each of the `frozenAddresses`"},"strategyManager()":{"notice":"The StrategyManager contract of EigenLayer"}},"version":1}},"settings":{"remappings":["@credible-squaring/=src/","@eigenlayer-middleware/=lib/eigenlayer-middleware/","@eigenlayer-scripts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/script/","@eigenlayer/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/","@openzeppelin-upgrades-v4.9.0/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/","@openzeppelin-v4.9.0/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","@openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","eigenlayer-contracts/=lib/eigenlayer-contracts/","eigenlayer-middleware/=lib/eigenlayer-middleware/","erc4626-tests/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable-v4.9.0/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/","openzeppelin-contracts-upgradeable/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts-v4.9.0/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/","openzeppelin-contracts/=lib/eigenlayer-contracts/lib/openzeppelin-contracts/","openzeppelin/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol":"ISlasher"},"evmVersion":"london","libraries":{}},"sources":{"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61","urls":["bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354","dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol":{"keccak256":"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00","urls":["bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983","dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol":{"keccak256":"0x7179a98578e495167d92e4adae802e7d68bee0f0e67f411636e0c3f87c494b64","urls":["bzz-raw://7c2ec7d551fea897f6b68dc196d5236afec6952e6169a46f5f3e90375783ddc5","dweb:/ipfs/Qmd5UJQnoCc2S7d82mjuLNRXJFv9T2ZrxMi37tqxig41B4"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol":{"keccak256":"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c","urls":["bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91","dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz"],"license":"CC0-1.0"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol":{"keccak256":"0x3bb371aa779366ac9bafa1f612d71c617c2bdb3b10784662f16ef9401f18a34e","urls":["bzz-raw://82bba4971cc559e7173f0cb6fa64d606d6421c4e23447ac92dc7a8b4c9a907da","dweb:/ipfs/QmQQfChLBTM7MjRzMZt7AWv5BfFPEnR95jtFJ5MJDZduZQ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol":{"keccak256":"0x22b7a17d53696412f80645f1fa65274ae89040bdc706262e3b6cc577dbafcaa4","urls":["bzz-raw://b15002346892a48fd7cf9a8a4cf121e17ba133d21e4822e71fbffac85117d6b2","dweb:/ipfs/QmRBPJUcRQ6uKmSvCYhhtVWcKCAWkQFSVZZwZR7HR42kiz"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol":{"keccak256":"0x33a935182f77cfd508fc57ec8e45afc8dc3748e1e9b764d36bf90ae6466f257b","urls":["bzz-raw://d3981b5bbf435cda04e2ed2f348f886ebf1500c18dd4bbf67b1f1bc0272e2d3f","dweb:/ipfs/QmYHDzQx29ataM2ejRCXFcPxaPdxWqX8v7uwUAYoG9572w"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol":{"keccak256":"0xffafae142d5337a5c204519e8f82fe3a5fae137286ebf597fa50699cf12c2474","urls":["bzz-raw://b577a12f7788095b230fd069b36ba9b3cdb376a0b7c3d8ae71588e5bf0c2f574","dweb:/ipfs/QmXd1cDzYpxecyFEwowLiBKKjzRHgV8cs1qvLwypdEbVYy"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol":{"keccak256":"0x3b62ea6ee304cbab976ff206bcf55268f18a3291708021557f93f899f99862e4","urls":["bzz-raw://b59a96fbf9940a7795d9a5fcb9e03939a87216317fb67872b7017285bf7eb49b","dweb:/ipfs/QmdiH5AfYBvuTpzxTqfhorLG25t2dhSTKWh1cvBbYxGDJH"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol":{"keccak256":"0x7655919fae553e75ff196b31c9244079ff222e34ff43f36c41429ee826cfad9b","urls":["bzz-raw://d5d35a784a9511b351826cb70b00d92c3d374474f256b01af05cd1acb1ce6c10","dweb:/ipfs/QmZog3BrpLa213wj5qxVYMQv7jdrkf5AAufLCVaMZsL7Gs"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol":{"keccak256":"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420","urls":["bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73","dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol":{"keccak256":"0x160fea76cd2e64e4e4bb66f4d793ff4a6ddb7cb785a30a0615e9f4956aa12c8b","urls":["bzz-raw://03f16b6f03051893671ba0d1445fb45bc6105f05ee3ca3002fd400ac63c8fd20","dweb:/ipfs/QmRbQ6k4kJYjfDTv5Z7bSfy5ewjjgHUVEhsWPWsyz57sUa"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol":{"keccak256":"0x633b5fb10209891f696a9c8db4d7327ed7f560a2e9710489e38a67daeda59a96","urls":["bzz-raw://c8381baaec3afa6b200420c093706974776dfd14f6887abe7457eb867351a068","dweb:/ipfs/QmP9H9ttS1sJ6FrvMEefJhU6B4z1wMCjcYYZqVfsLXagJE"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol":{"keccak256":"0x098850d09b65bb7dbad5ea0513eacb77f2701e135d9727b3627e13f303b2ff41","urls":["bzz-raw://3519f5a415b99d196f3cecef3f48ea116f2f3a2b381efcc96a5d7eff6934c2f3","dweb:/ipfs/QmbCcFWgmFjXeZrvfEFQ17AgEueW9wS17HhvjkxMi5x3H8"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol":{"keccak256":"0x6e82a559dc583bf4b15867654e82f3aca9a862589209abac1c4356142a3b2211","urls":["bzz-raw://8a1a4819b95c7da710e11efb279bd4b596139dc12c96c45a366d8e1893018eb1","dweb:/ipfs/QmZBHPLKoYepZmA7AL9ECJFkbBhujSNvvc8pJmNC9MnRni"],"license":"MIT"}},"version":1},"id":88}