{"abi":[{"type":"function","name":"FACTORY","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"HOOK_GAS_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"HOOK_RESERVE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"HOOK_SET_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"NETWORK_LIMIT_SET_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"NETWORK_REGISTRY","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"OPERATOR_NETWORK_OPT_IN_SERVICE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"OPERATOR_REGISTRY","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"OPERATOR_VAULT_OPT_IN_SERVICE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"TYPE","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"VAULT_FACTORY","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"VERSION","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"hook","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"maxNetworkLimit","inputs":[{"name":"subnetwork","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"networkLimit","inputs":[{"name":"subnetwork","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"networkLimitAt","inputs":[{"name":"subnetwork","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint48","internalType":"uint48"},{"name":"hint","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"onSlash","inputs":[{"name":"subnetwork","type":"bytes32","internalType":"bytes32"},{"name":"operator","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"captureTimestamp","type":"uint48","internalType":"uint48"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"operator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"setHook","inputs":[{"name":"hook","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMaxNetworkLimit","inputs":[{"name":"identifier","type":"uint96","internalType":"uint96"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setNetworkLimit","inputs":[{"name":"subnetwork","type":"bytes32","internalType":"bytes32"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stake","inputs":[{"name":"subnetwork","type":"bytes32","internalType":"bytes32"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"stakeAt","inputs":[{"name":"subnetwork","type":"bytes32","internalType":"bytes32"},{"name":"operator","type":"address","internalType":"address"},{"name":"timestamp","type":"uint48","internalType":"uint48"},{"name":"hints","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"vault","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"OnSlash","inputs":[{"name":"subnetwork","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"captureTimestamp","type":"uint48","indexed":false,"internalType":"uint48"}],"anonymous":false},{"type":"event","name":"SetHook","inputs":[{"name":"hook","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SetMaxNetworkLimit","inputs":[{"name":"subnetwork","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SetNetworkLimit","inputs":[{"name":"subnetwork","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AlreadySet","inputs":[]},{"type":"error","name":"DuplicateRoleHolder","inputs":[]},{"type":"error","name":"ExceedsMaxNetworkLimit","inputs":[]},{"type":"error","name":"InsufficientHookGas","inputs":[]},{"type":"error","name":"MissingRoleHolders","inputs":[]},{"type":"error","name":"NotInitialized","inputs":[]},{"type":"error","name":"NotNetwork","inputs":[]},{"type":"error","name":"NotOperator","inputs":[]},{"type":"error","name":"NotSlasher","inputs":[]},{"type":"error","name":"NotVault","inputs":[]},{"type":"error","name":"ZeroAddressRoleHolder","inputs":[]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"FACTORY()":"2dd31000","HOOK_GAS_LIMIT()":"ff54740f","HOOK_RESERVE()":"557cab44","HOOK_SET_ROLE()":"6679191e","NETWORK_LIMIT_SET_ROLE()":"7d24bb27","NETWORK_REGISTRY()":"c0cd7c3e","OPERATOR_NETWORK_OPT_IN_SERVICE()":"1a80e500","OPERATOR_REGISTRY()":"83ce0322","OPERATOR_VAULT_OPT_IN_SERVICE()":"128e5d82","TYPE()":"bb24fe8a","VAULT_FACTORY()":"103f2907","VERSION()":"ffa1ad74","hook()":"7f5a7c7b","initialize(bytes)":"439fab91","maxNetworkLimit(bytes32)":"d15b740e","networkLimit(bytes32)":"3eb22c0f","networkLimitAt(bytes32,uint48,bytes)":"5d32a1c9","onSlash(bytes32,address,uint256,uint48,bytes)":"e49561ee","operator()":"570ca735","setHook(address)":"3dfd3873","setMaxNetworkLimit(uint96,uint256)":"23f752d5","setNetworkLimit(bytes32,uint256)":"02145348","stake(bytes32,address)":"fd4d447c","stakeAt(bytes32,address,uint48,bytes)":"e02f6937","vault()":"fbfa77cf"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadySet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateRoleHolder\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExceedsMaxNetworkLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientHookGas\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MissingRoleHolders\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotNetwork\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotSlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressRoleHolder\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subnetwork\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"captureTimestamp\",\"type\":\"uint48\"}],\"name\":\"OnSlash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"}],\"name\":\"SetHook\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subnetwork\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetMaxNetworkLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"subnetwork\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetNetworkLimit\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FACTORY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_RESERVE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HOOK_SET_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NETWORK_LIMIT_SET_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NETWORK_REGISTRY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_NETWORK_OPT_IN_SERVICE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_REGISTRY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_VAULT_OPT_IN_SERVICE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TYPE\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_FACTORY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subnetwork\",\"type\":\"bytes32\"}],\"name\":\"maxNetworkLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subnetwork\",\"type\":\"bytes32\"}],\"name\":\"networkLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subnetwork\",\"type\":\"bytes32\"},{\"internalType\":\"uint48\",\"name\":\"timestamp\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"hint\",\"type\":\"bytes\"}],\"name\":\"networkLimitAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subnetwork\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint48\",\"name\":\"captureTimestamp\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onSlash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"}],\"name\":\"setHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96\",\"name\":\"identifier\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"setMaxNetworkLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subnetwork\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"setNetworkLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subnetwork\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"stake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"subnetwork\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"timestamp\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"hints\",\"type\":\"bytes\"}],\"name\":\"stakeAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"OnSlash(bytes32,address,uint256,uint48)\":{\"params\":{\"amount\":\"amount of the collateral to be slashed\",\"captureTimestamp\":\"time point when the stake was captured\",\"operator\":\"address of the operator\",\"subnetwork\":\"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)\"}},\"SetHook(address)\":{\"params\":{\"hook\":\"address of the hook\"}},\"SetMaxNetworkLimit(bytes32,uint256)\":{\"params\":{\"amount\":\"new maximum subnetwork's limit (how much stake the subnetwork is ready to get)\",\"subnetwork\":\"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)\"}},\"SetNetworkLimit(bytes32,uint256)\":{\"params\":{\"amount\":\"new subnetwork's limit (how much stake the vault curator is ready to give to the subnetwork)\",\"subnetwork\":\"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)\"}}},\"kind\":\"dev\",\"methods\":{\"FACTORY()\":{\"returns\":{\"_0\":\"address of the factory\"}},\"HOOK_GAS_LIMIT()\":{\"returns\":{\"_0\":\"value of the hook gas limit\"}},\"HOOK_RESERVE()\":{\"returns\":{\"_0\":\"value of the reserve gas\"}},\"HOOK_SET_ROLE()\":{\"returns\":{\"_0\":\"identifier of the hook setter role\"}},\"NETWORK_LIMIT_SET_ROLE()\":{\"returns\":{\"_0\":\"identifier of the subnetwork limit setter role\"}},\"NETWORK_REGISTRY()\":{\"returns\":{\"_0\":\"address of the network registry\"}},\"OPERATOR_NETWORK_OPT_IN_SERVICE()\":{\"returns\":{\"_0\":\"address of the operator-network opt-in service\"}},\"OPERATOR_REGISTRY()\":{\"returns\":{\"_0\":\"address of the operator registry\"}},\"OPERATOR_VAULT_OPT_IN_SERVICE()\":{\"returns\":{\"_0\":\"address of the operator-vault opt-in service\"}},\"TYPE()\":{\"returns\":{\"_0\":\"type of the entity\"}},\"VAULT_FACTORY()\":{\"returns\":{\"_0\":\"address of the vault factory\"}},\"VERSION()\":{\"details\":\"Must return 1 for this one.\",\"returns\":{\"_0\":\"version of the delegator\"}},\"hook()\":{\"details\":\"The hook can have arbitrary logic under certain functions, however, it doesn't affect the stake guarantees.\",\"returns\":{\"_0\":\"address of the hook\"}},\"initialize(bytes)\":{\"params\":{\"data\":\"some data to use\"}},\"maxNetworkLimit(bytes32)\":{\"params\":{\"subnetwork\":\"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)\"},\"returns\":{\"_0\":\"maximum limit of the subnetwork\"}},\"networkLimit(bytes32)\":{\"params\":{\"subnetwork\":\"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)\"},\"returns\":{\"_0\":\"limit of the subnetwork\"}},\"networkLimitAt(bytes32,uint48,bytes)\":{\"params\":{\"hint\":\"hint for checkpoint index\",\"subnetwork\":\"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)\",\"timestamp\":\"time point to get the subnetwork limit at\"},\"returns\":{\"_0\":\"limit of the subnetwork at the given timestamp\"}},\"onSlash(bytes32,address,uint256,uint48,bytes)\":{\"details\":\"Only the vault's slasher can call this function.\",\"params\":{\"amount\":\"amount of the collateral slashed\",\"captureTimestamp\":\"time point when the stake was captured\",\"data\":\"some additional data\",\"operator\":\"address of the operator\",\"subnetwork\":\"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)\"}},\"operator()\":{\"returns\":{\"_0\":\"address of the operator\"}},\"setHook(address)\":{\"details\":\"Only a HOOK_SET_ROLE holder can call this function.      The hook can have arbitrary logic under certain functions, however, it doesn't affect the stake guarantees.\",\"params\":{\"hook\":\"address of the hook\"}},\"setMaxNetworkLimit(uint96,uint256)\":{\"details\":\"Only a network can call this function.\",\"params\":{\"amount\":\"new maximum subnetwork's limit\"}},\"setNetworkLimit(bytes32,uint256)\":{\"details\":\"Only a NETWORK_LIMIT_SET_ROLE holder can call this function.\",\"params\":{\"amount\":\"new limit of the subnetwork\",\"subnetwork\":\"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)\"}},\"stake(bytes32,address)\":{\"details\":\"Warning: this function is not safe to use for stake capturing, as it can change by the end of the block.\",\"params\":{\"operator\":\"address of the operator\",\"subnetwork\":\"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)\"},\"returns\":{\"_0\":\"slashable stake until the end of the next epoch\"}},\"stakeAt(bytes32,address,uint48,bytes)\":{\"details\":\"Warning: it is not safe to use timestamp >= current one for the stake capturing, as it can change later.\",\"params\":{\"hints\":\"hints for the checkpoints' indexes\",\"operator\":\"address of the operator\",\"subnetwork\":\"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)\",\"timestamp\":\"time point to capture the stake at\"},\"returns\":{\"_0\":\"slashable stake at the given timestamp until the end of the consequent epoch\"}},\"vault()\":{\"returns\":{\"_0\":\"address of the vault\"}}},\"version\":1},\"userdoc\":{\"events\":{\"OnSlash(bytes32,address,uint256,uint48)\":{\"notice\":\"Emitted when a slash happens.\"},\"SetHook(address)\":{\"notice\":\"Emitted when a hook is set.\"},\"SetMaxNetworkLimit(bytes32,uint256)\":{\"notice\":\"Emitted when a subnetwork's maximum limit is set.\"},\"SetNetworkLimit(bytes32,uint256)\":{\"notice\":\"Emitted when a subnetwork's limit is set.\"}},\"kind\":\"user\",\"methods\":{\"FACTORY()\":{\"notice\":\"Get the factory's address.\"},\"HOOK_GAS_LIMIT()\":{\"notice\":\"Get a gas limit for the hook.\"},\"HOOK_RESERVE()\":{\"notice\":\"Get a reserve gas between the gas limit check and the hook's execution.\"},\"HOOK_SET_ROLE()\":{\"notice\":\"Get a hook setter's role.\"},\"NETWORK_LIMIT_SET_ROLE()\":{\"notice\":\"Get a subnetwork limit setter's role.\"},\"NETWORK_REGISTRY()\":{\"notice\":\"Get the network registry's address.\"},\"OPERATOR_NETWORK_OPT_IN_SERVICE()\":{\"notice\":\"Get the operator-network opt-in service's address.\"},\"OPERATOR_REGISTRY()\":{\"notice\":\"Get the operator registry's address.\"},\"OPERATOR_VAULT_OPT_IN_SERVICE()\":{\"notice\":\"Get the operator-vault opt-in service's address.\"},\"TYPE()\":{\"notice\":\"Get the entity's type.\"},\"VAULT_FACTORY()\":{\"notice\":\"Get the vault factory's address.\"},\"VERSION()\":{\"notice\":\"Get a version of the delegator (different versions mean different interfaces).\"},\"hook()\":{\"notice\":\"Get the hook's address.\"},\"initialize(bytes)\":{\"notice\":\"Initialize this entity contract by using a given data.\"},\"maxNetworkLimit(bytes32)\":{\"notice\":\"Get a particular subnetwork's maximum limit         (meaning the subnetwork is not ready to get more as a stake).\"},\"networkLimit(bytes32)\":{\"notice\":\"Get a subnetwork's limit (how much stake the vault curator is ready to give to the subnetwork).\"},\"networkLimitAt(bytes32,uint48,bytes)\":{\"notice\":\"Get a subnetwork's limit at a given timestamp using a hint         (how much stake the vault curator is ready to give to the subnetwork).\"},\"onSlash(bytes32,address,uint256,uint48,bytes)\":{\"notice\":\"Called when a slash happens.\"},\"operator()\":{\"notice\":\"Get an operator managing the vault's funds.\"},\"setHook(address)\":{\"notice\":\"Set a new hook.\"},\"setMaxNetworkLimit(uint96,uint256)\":{\"notice\":\"Set a maximum limit for a subnetwork (how much stake the subnetwork is ready to get). identifier identifier of the subnetwork\"},\"setNetworkLimit(bytes32,uint256)\":{\"notice\":\"Set a subnetwork's limit (how much stake the vault curator is ready to give to the subnetwork).\"},\"stake(bytes32,address)\":{\"notice\":\"Get a stake that a given subnetwork will be able to slash         for a certain operator until the end of the next epoch (if no cross-slashing and no slashings by the subnetwork).\"},\"stakeAt(bytes32,address,uint48,bytes)\":{\"notice\":\"Get a stake that a given subnetwork could be able to slash for a certain operator at a given timestamp         until the end of the consequent epoch using hints (if no cross-slashing and no slashings by the subnetwork).\"},\"vault()\":{\"notice\":\"Get the vault's address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/core/src/interfaces/delegator/IOperatorSpecificDelegator.sol\":\"IOperatorSpecificDelegator\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@symbioticfi/core/=lib/core/\",\":core/=lib/core/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/core/src/interfaces/common/IEntity.sol\":{\"keccak256\":\"0x8ef4b63d6da63489778ccd5f8d13ebdd527dd4b62730b2c616df5af7474d2d21\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a8d69576a9219d85c50816a18ad53a4d53cfcb27ed38b8cccc808dc2734b71b\",\"dweb:/ipfs/QmYVN3P4Q4REvBWJ97TbAcaxm3uyB2anV6NSGa6ZtSwcEv\"]},\"lib/core/src/interfaces/delegator/IBaseDelegator.sol\":{\"keccak256\":\"0x96bb312f032e17accce3f8f80936d99468029d6b37c9ca74acdb4b026a0148ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a66dcb5b7d1a6ef6a363431ea98ebd78bc4fdd3d7a134d9b542dc66e7d025c2\",\"dweb:/ipfs/QmRhTPLd2ZAyRHmJUFUcWKs9b3if49QY17LYZuRqWmghw8\"]},\"lib/core/src/interfaces/delegator/IOperatorSpecificDelegator.sol\":{\"keccak256\":\"0x72075cab585dc17240cc3e32bc99b92f0d5627ddd988fed680e3e1a52d5a01e4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7448bc90699409ae61d85216b5efc2143a37f0f73354be2aea993bc54afca441\",\"dweb:/ipfs/QmXE4gAxM8pHosZK8mcTcj17puBx484meDCcmrDePskGHZ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.25+commit.b61c2a91"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AlreadySet"},{"inputs":[],"type":"error","name":"DuplicateRoleHolder"},{"inputs":[],"type":"error","name":"ExceedsMaxNetworkLimit"},{"inputs":[],"type":"error","name":"InsufficientHookGas"},{"inputs":[],"type":"error","name":"MissingRoleHolders"},{"inputs":[],"type":"error","name":"NotInitialized"},{"inputs":[],"type":"error","name":"NotNetwork"},{"inputs":[],"type":"error","name":"NotOperator"},{"inputs":[],"type":"error","name":"NotSlasher"},{"inputs":[],"type":"error","name":"NotVault"},{"inputs":[],"type":"error","name":"ZeroAddressRoleHolder"},{"inputs":[{"internalType":"bytes32","name":"subnetwork","type":"bytes32","indexed":true},{"internalType":"address","name":"operator","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"uint48","name":"captureTimestamp","type":"uint48","indexed":false}],"type":"event","name":"OnSlash","anonymous":false},{"inputs":[{"internalType":"address","name":"hook","type":"address","indexed":true}],"type":"event","name":"SetHook","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"subnetwork","type":"bytes32","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"SetMaxNetworkLimit","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"subnetwork","type":"bytes32","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"SetNetworkLimit","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"FACTORY","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"HOOK_GAS_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"HOOK_RESERVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"HOOK_SET_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"NETWORK_LIMIT_SET_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"NETWORK_REGISTRY","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"OPERATOR_NETWORK_OPT_IN_SERVICE","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"OPERATOR_REGISTRY","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"OPERATOR_VAULT_OPT_IN_SERVICE","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TYPE","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"VAULT_FACTORY","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"VERSION","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"hook","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"bytes32","name":"subnetwork","type":"bytes32"}],"stateMutability":"view","type":"function","name":"maxNetworkLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"subnetwork","type":"bytes32"}],"stateMutability":"view","type":"function","name":"networkLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"subnetwork","type":"bytes32"},{"internalType":"uint48","name":"timestamp","type":"uint48"},{"internalType":"bytes","name":"hint","type":"bytes"}],"stateMutability":"view","type":"function","name":"networkLimitAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"subnetwork","type":"bytes32"},{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint48","name":"captureTimestamp","type":"uint48"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"onSlash"},{"inputs":[],"stateMutability":"view","type":"function","name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"hook","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setHook"},{"inputs":[{"internalType":"uint96","name":"identifier","type":"uint96"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setMaxNetworkLimit"},{"inputs":[{"internalType":"bytes32","name":"subnetwork","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setNetworkLimit"},{"inputs":[{"internalType":"bytes32","name":"subnetwork","type":"bytes32"},{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"stake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"subnetwork","type":"bytes32"},{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint48","name":"timestamp","type":"uint48"},{"internalType":"bytes","name":"hints","type":"bytes"}],"stateMutability":"view","type":"function","name":"stakeAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"FACTORY()":{"returns":{"_0":"address of the factory"}},"HOOK_GAS_LIMIT()":{"returns":{"_0":"value of the hook gas limit"}},"HOOK_RESERVE()":{"returns":{"_0":"value of the reserve gas"}},"HOOK_SET_ROLE()":{"returns":{"_0":"identifier of the hook setter role"}},"NETWORK_LIMIT_SET_ROLE()":{"returns":{"_0":"identifier of the subnetwork limit setter role"}},"NETWORK_REGISTRY()":{"returns":{"_0":"address of the network registry"}},"OPERATOR_NETWORK_OPT_IN_SERVICE()":{"returns":{"_0":"address of the operator-network opt-in service"}},"OPERATOR_REGISTRY()":{"returns":{"_0":"address of the operator registry"}},"OPERATOR_VAULT_OPT_IN_SERVICE()":{"returns":{"_0":"address of the operator-vault opt-in service"}},"TYPE()":{"returns":{"_0":"type of the entity"}},"VAULT_FACTORY()":{"returns":{"_0":"address of the vault factory"}},"VERSION()":{"details":"Must return 1 for this one.","returns":{"_0":"version of the delegator"}},"hook()":{"details":"The hook can have arbitrary logic under certain functions, however, it doesn't affect the stake guarantees.","returns":{"_0":"address of the hook"}},"initialize(bytes)":{"params":{"data":"some data to use"}},"maxNetworkLimit(bytes32)":{"params":{"subnetwork":"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)"},"returns":{"_0":"maximum limit of the subnetwork"}},"networkLimit(bytes32)":{"params":{"subnetwork":"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)"},"returns":{"_0":"limit of the subnetwork"}},"networkLimitAt(bytes32,uint48,bytes)":{"params":{"hint":"hint for checkpoint index","subnetwork":"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)","timestamp":"time point to get the subnetwork limit at"},"returns":{"_0":"limit of the subnetwork at the given timestamp"}},"onSlash(bytes32,address,uint256,uint48,bytes)":{"details":"Only the vault's slasher can call this function.","params":{"amount":"amount of the collateral slashed","captureTimestamp":"time point when the stake was captured","data":"some additional data","operator":"address of the operator","subnetwork":"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)"}},"operator()":{"returns":{"_0":"address of the operator"}},"setHook(address)":{"details":"Only a HOOK_SET_ROLE holder can call this function.      The hook can have arbitrary logic under certain functions, however, it doesn't affect the stake guarantees.","params":{"hook":"address of the hook"}},"setMaxNetworkLimit(uint96,uint256)":{"details":"Only a network can call this function.","params":{"amount":"new maximum subnetwork's limit"}},"setNetworkLimit(bytes32,uint256)":{"details":"Only a NETWORK_LIMIT_SET_ROLE holder can call this function.","params":{"amount":"new limit of the subnetwork","subnetwork":"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)"}},"stake(bytes32,address)":{"details":"Warning: this function is not safe to use for stake capturing, as it can change by the end of the block.","params":{"operator":"address of the operator","subnetwork":"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)"},"returns":{"_0":"slashable stake until the end of the next epoch"}},"stakeAt(bytes32,address,uint48,bytes)":{"details":"Warning: it is not safe to use timestamp >= current one for the stake capturing, as it can change later.","params":{"hints":"hints for the checkpoints' indexes","operator":"address of the operator","subnetwork":"full identifier of the subnetwork (address of the network concatenated with the uint96 identifier)","timestamp":"time point to capture the stake at"},"returns":{"_0":"slashable stake at the given timestamp until the end of the consequent epoch"}},"vault()":{"returns":{"_0":"address of the vault"}}},"version":1},"userdoc":{"kind":"user","methods":{"FACTORY()":{"notice":"Get the factory's address."},"HOOK_GAS_LIMIT()":{"notice":"Get a gas limit for the hook."},"HOOK_RESERVE()":{"notice":"Get a reserve gas between the gas limit check and the hook's execution."},"HOOK_SET_ROLE()":{"notice":"Get a hook setter's role."},"NETWORK_LIMIT_SET_ROLE()":{"notice":"Get a subnetwork limit setter's role."},"NETWORK_REGISTRY()":{"notice":"Get the network registry's address."},"OPERATOR_NETWORK_OPT_IN_SERVICE()":{"notice":"Get the operator-network opt-in service's address."},"OPERATOR_REGISTRY()":{"notice":"Get the operator registry's address."},"OPERATOR_VAULT_OPT_IN_SERVICE()":{"notice":"Get the operator-vault opt-in service's address."},"TYPE()":{"notice":"Get the entity's type."},"VAULT_FACTORY()":{"notice":"Get the vault factory's address."},"VERSION()":{"notice":"Get a version of the delegator (different versions mean different interfaces)."},"hook()":{"notice":"Get the hook's address."},"initialize(bytes)":{"notice":"Initialize this entity contract by using a given data."},"maxNetworkLimit(bytes32)":{"notice":"Get a particular subnetwork's maximum limit         (meaning the subnetwork is not ready to get more as a stake)."},"networkLimit(bytes32)":{"notice":"Get a subnetwork's limit (how much stake the vault curator is ready to give to the subnetwork)."},"networkLimitAt(bytes32,uint48,bytes)":{"notice":"Get a subnetwork's limit at a given timestamp using a hint         (how much stake the vault curator is ready to give to the subnetwork)."},"onSlash(bytes32,address,uint256,uint48,bytes)":{"notice":"Called when a slash happens."},"operator()":{"notice":"Get an operator managing the vault's funds."},"setHook(address)":{"notice":"Set a new hook."},"setMaxNetworkLimit(uint96,uint256)":{"notice":"Set a maximum limit for a subnetwork (how much stake the subnetwork is ready to get). identifier identifier of the subnetwork"},"setNetworkLimit(bytes32,uint256)":{"notice":"Set a subnetwork's limit (how much stake the vault curator is ready to give to the subnetwork)."},"stake(bytes32,address)":{"notice":"Get a stake that a given subnetwork will be able to slash         for a certain operator until the end of the next epoch (if no cross-slashing and no slashings by the subnetwork)."},"stakeAt(bytes32,address,uint48,bytes)":{"notice":"Get a stake that a given subnetwork could be able to slash for a certain operator at a given timestamp         until the end of the consequent epoch using hints (if no cross-slashing and no slashings by the subnetwork)."},"vault()":{"notice":"Get the vault's address."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@symbioticfi/core/=lib/core/","core/=lib/core/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/core/src/interfaces/delegator/IOperatorSpecificDelegator.sol":"IOperatorSpecificDelegator"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/core/src/interfaces/common/IEntity.sol":{"keccak256":"0x8ef4b63d6da63489778ccd5f8d13ebdd527dd4b62730b2c616df5af7474d2d21","urls":["bzz-raw://5a8d69576a9219d85c50816a18ad53a4d53cfcb27ed38b8cccc808dc2734b71b","dweb:/ipfs/QmYVN3P4Q4REvBWJ97TbAcaxm3uyB2anV6NSGa6ZtSwcEv"],"license":"MIT"},"lib/core/src/interfaces/delegator/IBaseDelegator.sol":{"keccak256":"0x96bb312f032e17accce3f8f80936d99468029d6b37c9ca74acdb4b026a0148ee","urls":["bzz-raw://2a66dcb5b7d1a6ef6a363431ea98ebd78bc4fdd3d7a134d9b542dc66e7d025c2","dweb:/ipfs/QmRhTPLd2ZAyRHmJUFUcWKs9b3if49QY17LYZuRqWmghw8"],"license":"MIT"},"lib/core/src/interfaces/delegator/IOperatorSpecificDelegator.sol":{"keccak256":"0x72075cab585dc17240cc3e32bc99b92f0d5627ddd988fed680e3e1a52d5a01e4","urls":["bzz-raw://7448bc90699409ae61d85216b5efc2143a37f0f73354be2aea993bc54afca441","dweb:/ipfs/QmXE4gAxM8pHosZK8mcTcj17puBx484meDCcmrDePskGHZ"],"license":"MIT"}},"version":1},"id":46}