From 529755a45d46d27e23b5b80a3b0476ed7350b47a Mon Sep 17 00:00:00 2001 From: Kevin Halliday Date: Mon, 11 Mar 2024 17:24:48 -0400 Subject: [PATCH] feat(contracts): add initial stake deposit contract --- contracts/Makefile | 2 +- contracts/bindings/omniavs.go | 1061 +++++++++++++++++++++++++- contracts/bindings/omnistake.go | 369 +++++++++ contracts/src/protocol/OmniStake.sol | 25 + 4 files changed, 1420 insertions(+), 37 deletions(-) create mode 100644 contracts/bindings/omnistake.go create mode 100644 contracts/src/protocol/OmniStake.sol diff --git a/contracts/Makefile b/contracts/Makefile index 42dd5c843..2e71db12d 100644 --- a/contracts/Makefile +++ b/contracts/Makefile @@ -19,7 +19,7 @@ build: version ## Build contracts. .PHONY: bindings bindings: check-abigen-version build ## Generate golang contract bindings. - ./bindings/scripts/gen.sh OmniPortal FeeOracleV1 OmniAVS TransparentUpgradeableProxy ProxyAdmin DelegationManager StrategyManager StrategyBase MockERC20 AVSDirectory + ./bindings/scripts/gen.sh OmniPortal FeeOracleV1 OmniAVS OmniStake TransparentUpgradeableProxy ProxyAdmin DelegationManager StrategyManager StrategyBase MockERC20 AVSDirectory go run ./bindings/scripts/commenttypes.go -- bindings/strategymanager.go IStrategyManagerDeprecatedStructQueuedWithdrawal IStrategyManagerDeprecatedStructWithdrawerAndNonce go run ./bindings/scripts/commenttypes.go -- bindings/avsdirectory.go ISignatureUtilsSignatureWithSaltAndExpiry diff --git a/contracts/bindings/omniavs.go b/contracts/bindings/omniavs.go index 094295f8f..200694d57 100644 --- a/contracts/bindings/omniavs.go +++ b/contracts/bindings/omniavs.go @@ -51,8 +51,8 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // OmniAVSMetaData contains all meta data concerning the OmniAVS contract. var OmniAVSMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"delegationManager_\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"avsDirectory_\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addToAllowlist\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"allowlistEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"canRegister\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"disableAllowlist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableAllowlist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ethStakeInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"feeForSync\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorRestakedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRestakeableStrategies\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"owner_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"omni_\",\"type\":\"address\",\"internalType\":\"contractIOmniPortal\"},{\"name\":\"omniChainId_\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"ethStakeInbox_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minOperatorStake_\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"maxOperatorCount_\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategyParams_\",\"type\":\"tuple[]\",\"internalType\":\"structIOmniAVS.StrategyParam[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isInAllowlist\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxOperatorCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minOperatorStake\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"omni\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIOmniPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"omniChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operators\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIOmniAVS.Operator[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegated\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"staked\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"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\":\"removeFromAllowlist\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEthStakeInbox\",\"inputs\":[{\"name\":\"inbox\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxOperatorCount\",\"inputs\":[{\"name\":\"count\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinOperatorStake\",\"inputs\":[{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOmniChainId\",\"inputs\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOmniPortal\",\"inputs\":[{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"contractIOmniPortal\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyParams\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIOmniAVS.StrategyParam[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setXCallGasLimits\",\"inputs\":[{\"name\":\"base\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"perOperator\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyParams\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIOmniAVS.StrategyParam[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"syncWithOmni\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"xcallBaseGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xcallGasLimitPerOperator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AllowlistDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllowlistEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAdded\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAllowed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDisallowed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemoved\",\"inputs\":[{\"name\":\"operator\",\"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\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false}]", - Bin: "0x60c06040523480156200001157600080fd5b5060405162002e3438038062002e34833981016040819052620000349162000133565b6001600160a01b03808316608052811660a0526200005162000059565b505062000172565b600054610100900460ff1615620000c65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161462000118576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013057600080fd5b50565b600080604083850312156200014757600080fd5b825162000154816200011a565b602084015190925062000167816200011a565b809150509250929050565b60805160a051612c79620001bb6000396000818161043f01528181610c14015281816110d0015261126301526000818161089c01528181611b50015261205e0152612c796000f3fe6080604052600436106102255760003560e01c80638da5cb5b11610123578063d17efb36116100ab578063eedc8a211161006f578063eedc8a21146106ba578063f2fde38b146106da578063f36b8d36146106fa578063f57f33d01461071a578063f8e86ece1461073c57600080fd5b8063d17efb361461060b578063d775cb611461062b578063e481af9d14610663578063e673df8a14610678578063eb3162351461069a57600080fd5b8063ae30f16d116100f2578063ae30f16d1461056c578063b98912b01461058c578063c6a2aac8146105af578063c75e3aed146105c4578063cf8e629a146105f657600080fd5b80638da5cb5b146104ed57806394c8e4ff1461050b5780639926ee7d1461052c578063a364f4da1461054c57600080fd5b806354c74ed3116101b1578063715018a611610175578063715018a614610463578063750521f5146104785780637815873d146104985780638456cb59146104b85780638cc8d5a8146104cd57600080fd5b806354c74ed3146103b15780635c78b0e2146103d85780635c975abb146103f85780635da93d7e146104105780636b3aa72e1461043057600080fd5b806329d0fdc0116101f857806329d0fdc0146102c0578063320d46d41461030957806333cfb7b71461033757806339acf9f1146103645780633f4ba83a1461039c57600080fd5b80630c4158841461022a578063110ff5f11461024c57806313efbe9214610291578063243d51c714610299575b600080fd5b34801561023657600080fd5b5061024a6102453660046122ec565b61075c565b005b34801561025857600080fd5b50609a546102749064010000000090046001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b61024a610786565b3480156102a557600080fd5b50609a5461027490600160a01b90046001600160401b031681565b3480156102cc57600080fd5b506102f96102db3660046122ec565b6001600160a01b031660009081526099602052604090205460ff1690565b6040519015158152602001610288565b34801561031557600080fd5b506103296103243660046122ec565b610877565b604051610288929190612356565b34801561034357600080fd5b506103576103523660046122ec565b610a9c565b6040516102889190612379565b34801561037057600080fd5b50609d54610384906001600160a01b031681565b6040516001600160a01b039091168152602001610288565b3480156103a857600080fd5b5061024a610acd565b3480156103bd57600080fd5b50609a5461027490600160601b90046001600160401b031681565b3480156103e457600080fd5b5061024a6103f33660046123e2565b610adf565b34801561040457600080fd5b5060655460ff166102f9565b34801561041c57600080fd5b5061024a61042b3660046122ec565b610b16565b34801561043c57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610384565b34801561046f57600080fd5b5061024a610be3565b34801561048457600080fd5b5061024a6104933660046124c2565b610bf5565b3480156104a457600080fd5b50609c54610384906001600160a01b031681565b3480156104c457600080fd5b5061024a610c7e565b3480156104d957600080fd5b5061024a6104e836600461257e565b610c8e565b3480156104f957600080fd5b506033546001600160a01b0316610384565b34801561051757600080fd5b50609b546102f990600160601b900460ff1681565b34801561053857600080fd5b5061024a61054736600461262c565b610e84565b34801561055857600080fd5b5061024a6105673660046122ec565b611171565b34801561057857600080fd5b5061024a6105873660046126d6565b6112f6565b34801561059857600080fd5b506105a161130c565b604051908152602001610288565b3480156105bb57600080fd5b5061024a611400565b3480156105d057600080fd5b50609a546105e19063ffffffff1681565b60405163ffffffff9091168152602001610288565b34801561060257600080fd5b5061024a6114a0565b34801561061757600080fd5b5061024a6106263660046122ec565b611539565b34801561063757600080fd5b50609b5461064b906001600160601b031681565b6040516001600160601b039091168152602001610288565b34801561066f57600080fd5b50610357611563565b34801561068457600080fd5b5061068d611572565b6040516102889190612717565b3480156106a657600080fd5b5061024a6106b5366004612786565b61157c565b3480156106c657600080fd5b5061024a6106d53660046127a3565b6115ab565b3480156106e657600080fd5b5061024a6106f53660046122ec565b611602565b34801561070657600080fd5b5061024a6107153660046127d6565b61167b565b34801561072657600080fd5b5061072f61169f565b60405161028891906127f1565b34801561074857600080fd5b5061024a6107573660046122ec565b61171b565b61076461182e565b609d80546001600160a01b0319166001600160a01b0392909216919091179055565b61078e611888565b60006107986118ce565b609d54609a54609c546040519394506001600160a01b03928316936370e8b56a93349364010000000090046001600160401b03169216906333364ffb60e11b906107e6908890602401612717565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152865161082390611a23565b6040518663ffffffff1660e01b81526004016108429493929190612845565b6000604051808303818588803b15801561085b57600080fd5b505af115801561086f573d6000803e3d6000fd5b505050505050565b6040516336b87bd760e11b81526001600160a01b0382811660048301526000916060917f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa1580156108e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610907919061288a565b61093b57505060408051808201909152600f81526e3737ba1030b71037b832b930ba37b960891b6020820152600092909150565b609b54600160601b900460ff16801561096d57506001600160a01b03831660009081526099602052604090205460ff16155b156109a357505060408051808201909152601081526f1b9bdd081a5b88185b1b1bdddb1a5cdd60821b6020820152600092909150565b6109ac83611a58565b156109e4575050604080518082019091526012815271185b1c9958591e481c9959da5cdd195c995960721b6020820152600092909150565b609a5460985463ffffffff90911611610a2d5750506040805180820190915260158152741b585e081bdc195c985d1bdc9cc81c995858da1959605a1b6020820152600092909150565b609b546001600160601b0316610a4284611ab8565b6001600160601b03161015610a835750506040805180820190915260118152701b5a5b881cdd185ad9481b9bdd081b595d607a1b6020820152600092909150565b5050604080516020810190915260008152600192909150565b6060610aa782611a58565b610abf57505060408051600081526020810190915290565b610ac7611be9565b92915050565b610ad561182e565b610add611ca1565b565b610ae761182e565b609a80546001600160401b03909216640100000000026bffffffffffffffff0000000019909216919091179055565b610b1e61182e565b6001600160a01b03811660009081526099602052604090205460ff16610b8b5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e694156533a206e6f7420696e20616c6c6f776c6973740000000000000060448201526064015b60405180910390fd5b6001600160a01b038116600081815260996020908152604091829020805460ff1916905590519182527f8560daa191dd8e6fba276b053006b3990c46c94b842f85490f52c49b15cfe5cb91015b60405180910390a150565b610beb61182e565b610add6000611cf3565b610bfd61182e565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590610c499084906004016128ac565b600060405180830381600087803b158015610c6357600080fd5b505af1158015610c77573d6000803e3d6000fd5b5050505050565b610c8661182e565b610add611d45565b600054610100900460ff1615808015610cae5750600054600160ff909116105b80610cc85750303b158015610cc8575060005460ff166001145b610d2b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b82565b6000805460ff191660011790558015610d4e576000805461ff0019166101001790555b609d80546001600160a01b03199081166001600160a01b038b811691909117909255609a8054609b8054600160601b6cffffffffffffffffffffffffff199091166001600160601b038c161717905561249f60a31b73ffffffffffffffffffffffffffffffff00000000199091166401000000006001600160401b038d160267ffffffffffffffff60601b191617610c3560641b177fffffffff0000000000000000ffffffffffffffffffffffffffffffff000000001663ffffffff891617179055609c8054909116918816919091179055610e2989611cf3565b610e338383611d82565b8015610e79576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b610e8c611888565b336001600160a01b03831614610edd5760405162461bcd60e51b815260206004820152601660248201527527b6b734a0ab299d1037b7363c9037b832b930ba37b960511b6044820152606401610b82565b609b54600160601b900460ff161580610f0e57506001600160a01b03821660009081526099602052604090205460ff165b610f515760405162461bcd60e51b815260206004820152601460248201527313db5b9a505594ce881b9bdd08185b1b1bddd95960621b6044820152606401610b82565b610f5a82611a58565b15610fa75760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694156533a20616c726561647920616e206f70657261746f72000000006044820152606401610b82565b609a5460985463ffffffff909116116110025760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694156533a206d6178206f70657261746f7273207265616368656400006044820152606401610b82565b609b546001600160601b031661101783611ab8565b6001600160601b0316101561106e5760405162461bcd60e51b815260206004820152601a60248201527f4f6d6e694156533a206d696e207374616b65206e6f74206d65740000000000006044820152606401610b82565b609880546001810182556000919091527f2237a976fa961f5921fd19f2b03c925c725d77b20ce8f790c19709c03de4d8140180546001600160a01b0319166001600160a01b038416179055604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d9061110790859085906004016128bf565b600060405180830381600087803b15801561112157600080fd5b505af1158015611135573d6000803e3d6000fd5b50506040516001600160a01b03851692507fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d9150600090a25050565b611179611888565b336001600160a01b038216148061119a57506033546001600160a01b031633145b6111e65760405162461bcd60e51b815260206004820152601f60248201527f4f6d6e694156533a206f6e6c79206f70657261746f72206f72206f776e6572006044820152606401610b82565b6111ef81611a58565b61123b5760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694156533a206e6f7420616e206f70657261746f7200000000000000006044820152606401610b82565b61124481611f3a565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90602401600060405180830381600087803b1580156112a757600080fd5b505af11580156112bb573d6000803e3d6000fd5b50506040516001600160a01b03841692507f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d9150600090a250565b6112fe61182e565b6113088282611d82565b5050565b6000806113176118ce565b609d54609a546040519293506001600160a01b0390911691638dd9523c9164010000000090046001600160401b0316906333364ffb60e11b9061135e908690602401612717565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152845161139b90611a23565b6040518463ffffffff1660e01b81526004016113b99392919061290a565b602060405180830381865afa1580156113d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fa9190612940565b91505090565b61140861182e565b609b54600160601b900460ff16156114625760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694156533a20616c726561647920656e61626c656400000000000000006044820152606401610b82565b609b805460ff60601b1916600160601b1790556040517f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec390600090a1565b6114a861182e565b609b54600160601b900460ff166115015760405162461bcd60e51b815260206004820152601960248201527f4f6d6e694156533a20616c72656164792064697361626c6564000000000000006044820152606401610b82565b609b805460ff60601b191690556040517f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb0790600090a1565b61154161182e565b609c80546001600160a01b0319166001600160a01b0392909216919091179055565b606061156d611be9565b905090565b606061156d6118ce565b61158461182e565b609b80546bffffffffffffffffffffffff19166001600160601b0392909216919091179055565b6115b361182e565b609a80546fffffffffffffffffffffffffffffffff60601b1916600160a01b6001600160401b039485160267ffffffffffffffff60601b191617600160601b9290931691909102919091179055565b61160a61182e565b6001600160a01b03811661166f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b82565b61167881611cf3565b50565b61168361182e565b609a805463ffffffff191663ffffffff92909216919091179055565b60606097805480602002602001604051908101604052809291908181526020016000905b8282101561171257600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016116c3565b50505050905090565b61172361182e565b6001600160a01b0381166117715760405162461bcd60e51b81526020600482015260156024820152744f6d6e694156533a207a65726f206164647265737360581b6044820152606401610b82565b6001600160a01b03811660009081526099602052604090205460ff16156117da5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694156533a20616c726561647920696e20616c6c6f776c6973740000006044820152606401610b82565b6001600160a01b038116600081815260996020908152604091829020805460ff1916600117905590519182527fdde65206cdee4ea27ef1b170724ba50b41ad09a3bf2dda12935fc40c4dbf6e759101610bd8565b6033546001600160a01b03163314610add5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b82565b60655460ff1615610add5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610b82565b6098546060906000906001600160401b038111156118ee576118ee6123fd565b60405190808252806020026020018201604052801561193957816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161190c5790505b50905060005b8151811015611a1d5760006098828154811061195d5761195d612959565b60009182526020822001546001600160a01b0316915061197c82611ab8565b9050600061198983612038565b90506000816001600160601b0316836001600160601b0316116119ad5760006119b7565b6119b78284612985565b90506040518060600160405280856001600160a01b03168152602001826001600160601b03168152602001836001600160601b0316815250868681518110611a0157611a01612959565b602002602001018190525084806001019550505050505061193f565b50919050565b609a546000906001600160401b03600160a01b8204811691611a4e91600160601b90910416846129ad565b610ac791906129dc565b6000805b609854811015611aaf57826001600160a01b031660988281548110611a8357611a83612959565b6000918252602090912001546001600160a01b03161415611aa75750600192915050565b600101611a5c565b50600092915050565b6040805180820190915260008082526020820181905290819060005b609754811015611be05760978181548110611af157611af1612959565b6000918252602080832060408051808201825293909101546001600160a01b03808216808652600160a01b9092046001600160601b031693850193909352905163778e55f360e01b8152898316600482015260248101919091529194507f0000000000000000000000000000000000000000000000000000000000000000169063778e55f390604401602060405180830381865afa158015611b97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbb9190612940565b9050611bcb81846020015161222d565b611bd59085612a07565b935050600101611ad4565b50909392505050565b6097546060906000906001600160401b03811115611c0957611c096123fd565b604051908082528060200260200182016040528015611c32578160200160208202803683370190505b50905060005b609754811015611a1d5760978181548110611c5557611c55612959565b60009182526020909120015482516001600160a01b0390911690839083908110611c8157611c81612959565b6001600160a01b0390921660209283029190910190910152600101611c38565b611ca961225c565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611d4d611888565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611cd63390565b611d8e609760006122a5565b60005b81811015611f35576000838383818110611dad57611dad612959565b611dc392602060409092020190810191506122ec565b6001600160a01b03161415611e1a5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e694156533a206e6f207a65726f207374726174656779000000000000006044820152606401610b82565b6000611e27826001612a29565b90505b82811015611eea57838382818110611e4457611e44612959565b611e5a92602060409092020190810191506122ec565b6001600160a01b0316848484818110611e7557611e75612959565b611e8b92602060409092020190810191506122ec565b6001600160a01b03161415611ee25760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694156533a206e6f206475706c696361746520737472617465677900006044820152606401610b82565b600101611e2a565b506097838383818110611eff57611eff612959565b83546001810185556000948552602090942060409091029290920192919091019050611f2b8282612a41565b5050600101611d91565b505050565b60005b60985481101561130857816001600160a01b031660988281548110611f6457611f64612959565b6000918252602090912001546001600160a01b031614156120305760988054611f8f90600190612a83565b81548110611f9f57611f9f612959565b600091825260209091200154609880546001600160a01b039092169183908110611fcb57611fcb612959565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550609880548061200a5761200a612a9a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b600101611f3d565b6040516367c0439f60e11b81526001600160a01b038281166004830152600091829182917f00000000000000000000000000000000000000000000000000000000000000009091169063cf80873e90602401600060405180830381865afa1580156120a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120cf9190810190612b3e565b90925090506000805b83518110156122245760008482815181106120f5576120f5612959565b6020026020010151905061212e604051806040016040528060006001600160a01b0316815260200160006001600160601b031681525090565b60005b6097548110156121d057826001600160a01b03166097828154811061215857612158612959565b6000918252602090912001546001600160a01b031614156121c8576097818154811061218657612186612959565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b03169181019190915291506121d0565b600101612131565b5080516001600160a01b03166121e75750506120d8565b61220e8584815181106121fc576121fc612959565b6020026020010151826020015161222d565b6122189085612a07565b935050506001016120d8565b50949350505050565b6000670de0b6b3a764000061224b6001600160601b03841685612c02565b6122559190612c21565b9392505050565b60655460ff16610add5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610b82565b508054600082559060005260206000209081019061167891905b808211156122d357600081556001016122bf565b5090565b6001600160a01b038116811461167857600080fd5b6000602082840312156122fe57600080fd5b8135612255816122d7565b6000815180845260005b8181101561232f57602081850181015186830182015201612313565b81811115612341576000602083870101525b50601f01601f19169290920160200192915050565b82151581526040602082015260006123716040830184612309565b949350505050565b6020808252825182820181905260009190848201906040850190845b818110156123ba5783516001600160a01b031683529284019291840191600101612395565b50909695505050505050565b80356001600160401b03811681146123dd57600080fd5b919050565b6000602082840312156123f457600080fd5b612255826123c6565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715612435576124356123fd565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612463576124636123fd565b604052919050565b60006001600160401b03831115612484576124846123fd565b612497601f8401601f191660200161243b565b90508281528383830111156124ab57600080fd5b828260208301376000602084830101529392505050565b6000602082840312156124d457600080fd5b81356001600160401b038111156124ea57600080fd5b8201601f810184136124fb57600080fd5b6123718482356020840161246b565b6001600160601b038116811461167857600080fd5b803563ffffffff811681146123dd57600080fd5b60008083601f84011261254557600080fd5b5081356001600160401b0381111561255c57600080fd5b6020830191508360208260061b850101111561257757600080fd5b9250929050565b60008060008060008060008060e0898b03121561259a57600080fd5b88356125a5816122d7565b975060208901356125b5816122d7565b96506125c360408a016123c6565b955060608901356125d3816122d7565b945060808901356125e38161250a565b93506125f160a08a0161251f565b925060c08901356001600160401b0381111561260c57600080fd5b6126188b828c01612533565b999c989b5096995094979396929594505050565b6000806040838503121561263f57600080fd5b823561264a816122d7565b915060208301356001600160401b038082111561266657600080fd5b908401906060828703121561267a57600080fd5b612682612413565b82358281111561269157600080fd5b83019150601f820187136126a457600080fd5b6126b38783356020850161246b565b815260208301356020820152604083013560408201528093505050509250929050565b600080602083850312156126e957600080fd5b82356001600160401b038111156126ff57600080fd5b61270b85828601612533565b90969095509350505050565b602080825282518282018190526000919060409081850190868401855b8281101561277957815180516001600160a01b03168552868101516001600160601b039081168887015290860151168585015260609093019290850190600101612734565b5091979650505050505050565b60006020828403121561279857600080fd5b81356122558161250a565b600080604083850312156127b657600080fd5b6127bf836123c6565b91506127cd602084016123c6565b90509250929050565b6000602082840312156127e857600080fd5b6122558261251f565b602080825282518282018190526000919060409081850190868401855b8281101561277957815180516001600160a01b031685528601516001600160601b031686850152928401929085019060010161280e565b60006001600160401b03808716835260018060a01b0386166020840152608060408401526128766080840186612309565b915080841660608401525095945050505050565b60006020828403121561289c57600080fd5b8151801515811461225557600080fd5b6020815260006122556020830184612309565b60018060a01b03831681526040602082015260008251606060408401526128e960a0840182612309565b90506020840151606084015260408401516080840152809150509392505050565b60006001600160401b0380861683526060602084015261292d6060840186612309565b9150808416604084015250949350505050565b60006020828403121561295257600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001600160601b03838116908316818110156129a5576129a561296f565b039392505050565b60006001600160401b03808316818516818304811182151516156129d3576129d361296f565b02949350505050565b60006001600160401b038083168185168083038211156129fe576129fe61296f565b01949350505050565b60006001600160601b038083168185168083038211156129fe576129fe61296f565b60008219821115612a3c57612a3c61296f565b500190565b8135612a4c816122d7565b81546001600160a01b03199081166001600160a01b039290921691821783556020840135612a798161250a565b60a01b1617905550565b600082821015612a9557612a9561296f565b500390565b634e487b7160e01b600052603160045260246000fd5b60006001600160401b03821115612ac957612ac96123fd565b5060051b60200190565b600082601f830112612ae457600080fd5b81516020612af9612af483612ab0565b61243b565b82815260059290921b84018101918181019086841115612b1857600080fd5b8286015b84811015612b335780518352918301918301612b1c565b509695505050505050565b60008060408385031215612b5157600080fd5b82516001600160401b0380821115612b6857600080fd5b818501915085601f830112612b7c57600080fd5b81516020612b8c612af483612ab0565b82815260059290921b84018101918181019089841115612bab57600080fd5b948201945b83861015612bd2578551612bc3816122d7565b82529482019490820190612bb0565b91880151919650909350505080821115612beb57600080fd5b50612bf885828601612ad3565b9150509250929050565b6000816000190483118215151615612c1c57612c1c61296f565b500290565b600082612c3e57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220bf3e634337305a44a0e88f6f3577902c1f008ad6dfedc2e8cc9e899dd8e58d9e64736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"delegationManager_\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"avsDirectory_\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addToAllowlist\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"allowlistEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"canRegister\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"disableAllowlist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableAllowlist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ethStakeInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"feeForSync\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorRestakedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRestakeableStrategies\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"owner_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"omni_\",\"type\":\"address\",\"internalType\":\"contractIOmniPortal\"},{\"name\":\"omniChainId_\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"ethStakeInbox_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minOperatorStake_\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"maxOperatorCount_\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategyParams_\",\"type\":\"tuple[]\",\"internalType\":\"structIOmniAVS.StrategyParam[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isInAllowlist\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxOperatorCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minOperatorStake\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"omni\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIOmniPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"omniChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operators\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIOmniAVS.Operator[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegated\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"staked\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"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\":\"removeFromAllowlist\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEthStakeInbox\",\"inputs\":[{\"name\":\"inbox\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxOperatorCount\",\"inputs\":[{\"name\":\"count\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinOperatorStake\",\"inputs\":[{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOmniChainId\",\"inputs\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOmniPortal\",\"inputs\":[{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"contractIOmniPortal\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyParams\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIOmniAVS.StrategyParam[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setXCallGasLimits\",\"inputs\":[{\"name\":\"base\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"perOperator\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyParams\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIOmniAVS.StrategyParam[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"syncWithOmni\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"xcallBaseGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xcallGasLimitPerOperator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AllowlistDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllowlistEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EthStakeInboxSet\",\"inputs\":[{\"name\":\"inbox\",\"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\":\"MaxOperatorCountSet\",\"inputs\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinOperatorStakeSet\",\"inputs\":[{\"name\":\"minOperatorStake\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OmniChainIdSet\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OmniPortalSet\",\"inputs\":[{\"name\":\"portal\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAdded\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAllowed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDisallowed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemoved\",\"inputs\":[{\"name\":\"operator\",\"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\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyParamsSet\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"structIOmniAVS.StrategyParam[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XCallGasLimitsSet\",\"inputs\":[{\"name\":\"base\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"perValidator\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false}]", + Bin: "0x60c06040523480156200001157600080fd5b5060405162002f8538038062002f85833981016040819052620000349162000133565b6001600160a01b03808316608052811660a0526200005162000059565b505062000172565b600054610100900460ff1615620000c65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161462000118576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013057600080fd5b50565b600080604083850312156200014757600080fd5b825162000154816200011a565b602084015190925062000167816200011a565b809150509250929050565b60805160a051612dca620001bb6000396000818161043f01528181610bc901528181610ff7015261118a0152600081816108860152818161190e01526121440152612dca6000f3fe6080604052600436106102255760003560e01c80638da5cb5b11610123578063d17efb36116100ab578063eedc8a211161006f578063eedc8a21146106ba578063f2fde38b146106da578063f36b8d36146106fa578063f57f33d01461071a578063f8e86ece1461073c57600080fd5b8063d17efb361461060b578063d775cb611461062b578063e481af9d14610663578063e673df8a14610678578063eb3162351461069a57600080fd5b8063ae30f16d116100f2578063ae30f16d1461056c578063b98912b01461058c578063c6a2aac8146105af578063c75e3aed146105c4578063cf8e629a146105f657600080fd5b80638da5cb5b146104ed57806394c8e4ff1461050b5780639926ee7d1461052c578063a364f4da1461054c57600080fd5b806354c74ed3116101b1578063715018a611610175578063715018a614610463578063750521f5146104785780637815873d146104985780638456cb59146104b85780638cc8d5a8146104cd57600080fd5b806354c74ed3146103b15780635c78b0e2146103d85780635c975abb146103f85780635da93d7e146104105780636b3aa72e1461043057600080fd5b806329d0fdc0116101f857806329d0fdc0146102c0578063320d46d41461030957806333cfb7b71461033757806339acf9f1146103645780633f4ba83a1461039c57600080fd5b80630c4158841461022a578063110ff5f11461024c57806313efbe9214610291578063243d51c714610299575b600080fd5b34801561023657600080fd5b5061024a6102453660046123d2565b61075c565b005b34801561025857600080fd5b50609a546102749064010000000090046001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b61024a610770565b3480156102a557600080fd5b50609a5461027490600160a01b90046001600160401b031681565b3480156102cc57600080fd5b506102f96102db3660046123d2565b6001600160a01b031660009081526099602052604090205460ff1690565b6040519015158152602001610288565b34801561031557600080fd5b506103296103243660046123d2565b610861565b60405161028892919061243c565b34801561034357600080fd5b506103576103523660046123d2565b610a86565b604051610288919061245f565b34801561037057600080fd5b50609d54610384906001600160a01b031681565b6040516001600160a01b039091168152602001610288565b3480156103a857600080fd5b5061024a610ab7565b3480156103bd57600080fd5b50609a5461027490600160601b90046001600160401b031681565b3480156103e457600080fd5b5061024a6103f33660046124c8565b610ac9565b34801561040457600080fd5b5060655460ff166102f9565b34801561041c57600080fd5b5061024a61042b3660046123d2565b610ada565b34801561043c57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610384565b34801561046f57600080fd5b5061024a610b98565b34801561048457600080fd5b5061024a6104933660046125a8565b610baa565b3480156104a457600080fd5b50609c54610384906001600160a01b031681565b3480156104c457600080fd5b5061024a610c33565b3480156104d957600080fd5b5061024a6104e8366004612664565b610c43565b3480156104f957600080fd5b506033546001600160a01b0316610384565b34801561051757600080fd5b50609b546102f990600160601b900460ff1681565b34801561053857600080fd5b5061024a610547366004612712565b610dab565b34801561055857600080fd5b5061024a6105673660046123d2565b611098565b34801561057857600080fd5b5061024a6105873660046127bc565b61121d565b34801561059857600080fd5b506105a1611233565b604051908152602001610288565b3480156105bb57600080fd5b5061024a611327565b3480156105d057600080fd5b50609a546105e19063ffffffff1681565b60405163ffffffff9091168152602001610288565b34801561060257600080fd5b5061024a611337565b34801561061757600080fd5b5061024a6106263660046123d2565b611347565b34801561063757600080fd5b50609b5461064b906001600160601b031681565b6040516001600160601b039091168152602001610288565b34801561066f57600080fd5b50610357611358565b34801561068457600080fd5b5061068d611367565b60405161028891906127fd565b3480156106a657600080fd5b5061024a6106b536600461286c565b611371565b3480156106c657600080fd5b5061024a6106d5366004612889565b611382565b3480156106e657600080fd5b5061024a6106f53660046123d2565b611394565b34801561070657600080fd5b5061024a6107153660046128bc565b61140a565b34801561072657600080fd5b5061072f61141b565b60405161028891906128d7565b34801561074857600080fd5b5061024a6107573660046123d2565b611497565b6107646115a2565b61076d816115fc565b50565b610778611646565b600061078261168c565b609d54609a54609c546040519394506001600160a01b03928316936370e8b56a93349364010000000090046001600160401b03169216906333364ffb60e11b906107d09088906024016127fd565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152865161080d906117e1565b6040518663ffffffff1660e01b815260040161082c949392919061292b565b6000604051808303818588803b15801561084557600080fd5b505af1158015610859573d6000803e3d6000fd5b505050505050565b6040516336b87bd760e11b81526001600160a01b0382811660048301526000916060917f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa1580156108cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f19190612970565b61092557505060408051808201909152600f81526e3737ba1030b71037b832b930ba37b960891b6020820152600092909150565b609b54600160601b900460ff16801561095757506001600160a01b03831660009081526099602052604090205460ff16155b1561098d57505060408051808201909152601081526f1b9bdd081a5b88185b1b1bdddb1a5cdd60821b6020820152600092909150565b61099683611816565b156109ce575050604080518082019091526012815271185b1c9958591e481c9959da5cdd195c995960721b6020820152600092909150565b609a5460985463ffffffff90911611610a175750506040805180820190915260158152741b585e081bdc195c985d1bdc9cc81c995858da1959605a1b6020820152600092909150565b609b546001600160601b0316610a2c84611876565b6001600160601b03161015610a6d5750506040805180820190915260118152701b5a5b881cdd185ad9481b9bdd081b595d607a1b6020820152600092909150565b5050604080516020810190915260008152600192909150565b6060610a9182611816565b610aa957505060408051600081526020810190915290565b610ab16119a7565b92915050565b610abf6115a2565b610ac7611a5f565b565b610ad16115a2565b61076d81611ab1565b610ae26115a2565b6001600160a01b03811660009081526099602052604090205460ff16610b4f5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e694156533a206e6f7420696e20616c6c6f776c6973740000000000000060448201526064015b60405180910390fd5b6001600160a01b038116600081815260996020526040808220805460ff19169055517f8560daa191dd8e6fba276b053006b3990c46c94b842f85490f52c49b15cfe5cb9190a250565b610ba06115a2565b610ac76000611b0a565b610bb26115a2565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590610bfe908490600401612992565b600060405180830381600087803b158015610c1857600080fd5b505af1158015610c2c573d6000803e3d6000fd5b5050505050565b610c3b6115a2565b610ac7611b5c565b600054610100900460ff1615808015610c635750600054600160ff909116105b80610c7d5750303b158015610c7d575060005460ff166001145b610ce05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b46565b6000805460ff191660011790558015610d03576000805461ff0019166101001790555b610d0c886115fc565b610d1587611ab1565b610d24620124f861c350611b99565b610d2d86611c26565b610d3685611c70565b610d3f84611cca565b610d498383611d12565b610d51611ef7565b610d5a89611b0a565b8015610da0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b610db3611646565b336001600160a01b03831614610e045760405162461bcd60e51b815260206004820152601660248201527527b6b734a0ab299d1037b7363c9037b832b930ba37b960511b6044820152606401610b46565b609b54600160601b900460ff161580610e3557506001600160a01b03821660009081526099602052604090205460ff165b610e785760405162461bcd60e51b815260206004820152601460248201527313db5b9a505594ce881b9bdd08185b1b1bddd95960621b6044820152606401610b46565b610e8182611816565b15610ece5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694156533a20616c726561647920616e206f70657261746f72000000006044820152606401610b46565b609a5460985463ffffffff90911611610f295760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694156533a206d6178206f70657261746f7273207265616368656400006044820152606401610b46565b609b546001600160601b0316610f3e83611876565b6001600160601b03161015610f955760405162461bcd60e51b815260206004820152601a60248201527f4f6d6e694156533a206d696e207374616b65206e6f74206d65740000000000006044820152606401610b46565b609880546001810182556000919091527f2237a976fa961f5921fd19f2b03c925c725d77b20ce8f790c19709c03de4d8140180546001600160a01b0319166001600160a01b038416179055604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d9061102e90859085906004016129a5565b600060405180830381600087803b15801561104857600080fd5b505af115801561105c573d6000803e3d6000fd5b50506040516001600160a01b03851692507fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d9150600090a25050565b6110a0611646565b336001600160a01b03821614806110c157506033546001600160a01b031633145b61110d5760405162461bcd60e51b815260206004820152601f60248201527f4f6d6e694156533a206f6e6c79206f70657261746f72206f72206f776e6572006044820152606401610b46565b61111681611816565b6111625760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694156533a206e6f7420616e206f70657261746f7200000000000000006044820152606401610b46565b61116b81611f8f565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90602401600060405180830381600087803b1580156111ce57600080fd5b505af11580156111e2573d6000803e3d6000fd5b50506040516001600160a01b03841692507f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d9150600090a250565b6112256115a2565b61122f8282611d12565b5050565b60008061123e61168c565b609d54609a546040519293506001600160a01b0390911691638dd9523c9164010000000090046001600160401b0316906333364ffb60e11b906112859086906024016127fd565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915284516112c2906117e1565b6040518463ffffffff1660e01b81526004016112e0939291906129f0565b602060405180830381865afa1580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113219190612a26565b91505090565b61132f6115a2565b610ac7611ef7565b61133f6115a2565b610ac761208d565b61134f6115a2565b61076d81611c26565b60606113626119a7565b905090565b606061136261168c565b6113796115a2565b61076d81611c70565b61138a6115a2565b61122f8282611b99565b61139c6115a2565b6001600160a01b0381166114015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b46565b61076d81611b0a565b6114126115a2565b61076d81611cca565b60606097805480602002602001604051908101604052809291908181526020016000905b8282101561148e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161143f565b50505050905090565b61149f6115a2565b6001600160a01b0381166114ed5760405162461bcd60e51b81526020600482015260156024820152744f6d6e694156533a207a65726f206164647265737360581b6044820152606401610b46565b6001600160a01b03811660009081526099602052604090205460ff16156115565760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694156533a20616c726561647920696e20616c6c6f776c6973740000006044820152606401610b46565b6001600160a01b038116600081815260996020526040808220805460ff19166001179055517fdde65206cdee4ea27ef1b170724ba50b41ad09a3bf2dda12935fc40c4dbf6e759190a250565b6033546001600160a01b03163314610ac75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b46565b609d80546001600160a01b0319166001600160a01b0383169081179091556040517f79162c8d053a07e70cdc1ccc536f0440b571f8508377d2bef51094fadab98f4790600090a250565b60655460ff1615610ac75760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610b46565b6098546060906000906001600160401b038111156116ac576116ac6124e3565b6040519080825280602002602001820160405280156116f757816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816116ca5790505b50905060005b81518110156117db5760006098828154811061171b5761171b612a3f565b60009182526020822001546001600160a01b0316915061173a82611876565b905060006117478361211e565b90506000816001600160601b0316836001600160601b03161161176b576000611775565b6117758284612a6b565b90506040518060600160405280856001600160a01b03168152602001826001600160601b03168152602001836001600160601b03168152508686815181106117bf576117bf612a3f565b60200260200101819052508480600101955050505050506116fd565b50919050565b609a546000906001600160401b03600160a01b820481169161180c91600160601b9091041684612a93565b610ab19190612ac2565b6000805b60985481101561186d57826001600160a01b03166098828154811061184157611841612a3f565b6000918252602090912001546001600160a01b031614156118655750600192915050565b60010161181a565b50600092915050565b6040805180820190915260008082526020820181905290819060005b60975481101561199e57609781815481106118af576118af612a3f565b6000918252602080832060408051808201825293909101546001600160a01b03808216808652600160a01b9092046001600160601b031693850193909352905163778e55f360e01b8152898316600482015260248101919091529194507f0000000000000000000000000000000000000000000000000000000000000000169063778e55f390604401602060405180830381865afa158015611955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119799190612a26565b9050611989818460200151612313565b6119939085612aed565b935050600101611892565b50909392505050565b6097546060906000906001600160401b038111156119c7576119c76124e3565b6040519080825280602002602001820160405280156119f0578160200160208202803683370190505b50905060005b6097548110156117db5760978181548110611a1357611a13612a3f565b60009182526020909120015482516001600160a01b0390911690839083908110611a3f57611a3f612a3f565b6001600160a01b03909216602092830291909101909101526001016119f6565b611a67612342565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b609a80546bffffffffffffffff0000000019166401000000006001600160401b038416908102919091179091556040517f86c6800e7c164327530b6a334cd4599a5389a8b31d5e262d82034b1121dd8b8690600090a250565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611b64611646565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a943390565b609a80546fffffffffffffffffffffffffffffffff60601b1916600160a01b6001600160401b0385811691820267ffffffffffffffff60601b191692909217600160601b928516928302179092556040805192835260208301919091527fe8bd84272b361621aa78d2bf3b1232f4ec8bf4d53ea7e262b568952fd89dba3091015b60405180910390a15050565b609c80546001600160a01b0319166001600160a01b0383169081179091556040517f51939cde6a90c107a83ed16cd83879c0fa830cbddb121deea9050042fae5ce6790600090a250565b609b80546bffffffffffffffffffffffff19166001600160601b0383169081179091556040519081527f9b13fd38c94948514c63f3132d22b60ecb8ed37521ba05fdfad046cfbc3a772a906020015b60405180910390a150565b609a805463ffffffff191663ffffffff83169081179091556040519081527f4867705ef2f7341363cb4d4bb0e1501ad37f84ae371b9f31e73a1c25c39840e490602001611cbf565b611d1e6097600061238b565b60005b81811015611ec5576000838383818110611d3d57611d3d612a3f565b611d5392602060409092020190810191506123d2565b6001600160a01b03161415611daa5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e694156533a206e6f207a65726f207374726174656779000000000000006044820152606401610b46565b6000611db7826001612b0f565b90505b82811015611e7a57838382818110611dd457611dd4612a3f565b611dea92602060409092020190810191506123d2565b6001600160a01b0316848484818110611e0557611e05612a3f565b611e1b92602060409092020190810191506123d2565b6001600160a01b03161415611e725760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694156533a206e6f206475706c696361746520737472617465677900006044820152606401610b46565b600101611dba565b506097838383818110611e8f57611e8f612a3f565b83546001810185556000948552602090942060409091029290920192919091019050611ebb8282612b27565b5050600101611d21565b507f236150b37b22bc9557672069e2dfb3f05be1dafd1f9ead78df2f8b855ee696408282604051611c1a929190612b69565b609b54600160601b900460ff1615611f515760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694156533a20616c726561647920656e61626c656400000000000000006044820152606401610b46565b609b805460ff60601b1916600160601b1790556040517f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec390600090a1565b60005b60985481101561122f57816001600160a01b031660988281548110611fb957611fb9612a3f565b6000918252602090912001546001600160a01b031614156120855760988054611fe490600190612bd4565b81548110611ff457611ff4612a3f565b600091825260209091200154609880546001600160a01b03909216918390811061202057612020612a3f565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550609880548061205f5761205f612beb565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b600101611f92565b609b54600160601b900460ff166120e65760405162461bcd60e51b815260206004820152601960248201527f4f6d6e694156533a20616c72656164792064697361626c6564000000000000006044820152606401610b46565b609b805460ff60601b191690556040517f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb0790600090a1565b6040516367c0439f60e11b81526001600160a01b038281166004830152600091829182917f00000000000000000000000000000000000000000000000000000000000000009091169063cf80873e90602401600060405180830381865afa15801561218d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121b59190810190612c8f565b90925090506000805b835181101561230a5760008482815181106121db576121db612a3f565b60200260200101519050612214604051806040016040528060006001600160a01b0316815260200160006001600160601b031681525090565b60005b6097548110156122b657826001600160a01b03166097828154811061223e5761223e612a3f565b6000918252602090912001546001600160a01b031614156122ae576097818154811061226c5761226c612a3f565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b03169181019190915291506122b6565b600101612217565b5080516001600160a01b03166122cd5750506121be565b6122f48584815181106122e2576122e2612a3f565b60200260200101518260200151612313565b6122fe9085612aed565b935050506001016121be565b50949350505050565b6000670de0b6b3a76400006123316001600160601b03841685612d53565b61233b9190612d72565b9392505050565b60655460ff16610ac75760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610b46565b508054600082559060005260206000209081019061076d91905b808211156123b957600081556001016123a5565b5090565b6001600160a01b038116811461076d57600080fd5b6000602082840312156123e457600080fd5b813561233b816123bd565b6000815180845260005b81811015612415576020818501810151868301820152016123f9565b81811115612427576000602083870101525b50601f01601f19169290920160200192915050565b821515815260406020820152600061245760408301846123ef565b949350505050565b6020808252825182820181905260009190848201906040850190845b818110156124a05783516001600160a01b03168352928401929184019160010161247b565b50909695505050505050565b80356001600160401b03811681146124c357600080fd5b919050565b6000602082840312156124da57600080fd5b61233b826124ac565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561251b5761251b6124e3565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612549576125496124e3565b604052919050565b60006001600160401b0383111561256a5761256a6124e3565b61257d601f8401601f1916602001612521565b905082815283838301111561259157600080fd5b828260208301376000602084830101529392505050565b6000602082840312156125ba57600080fd5b81356001600160401b038111156125d057600080fd5b8201601f810184136125e157600080fd5b61245784823560208401612551565b6001600160601b038116811461076d57600080fd5b803563ffffffff811681146124c357600080fd5b60008083601f84011261262b57600080fd5b5081356001600160401b0381111561264257600080fd5b6020830191508360208260061b850101111561265d57600080fd5b9250929050565b60008060008060008060008060e0898b03121561268057600080fd5b883561268b816123bd565b9750602089013561269b816123bd565b96506126a960408a016124ac565b955060608901356126b9816123bd565b945060808901356126c9816125f0565b93506126d760a08a01612605565b925060c08901356001600160401b038111156126f257600080fd5b6126fe8b828c01612619565b999c989b5096995094979396929594505050565b6000806040838503121561272557600080fd5b8235612730816123bd565b915060208301356001600160401b038082111561274c57600080fd5b908401906060828703121561276057600080fd5b6127686124f9565b82358281111561277757600080fd5b83019150601f8201871361278a57600080fd5b61279987833560208501612551565b815260208301356020820152604083013560408201528093505050509250929050565b600080602083850312156127cf57600080fd5b82356001600160401b038111156127e557600080fd5b6127f185828601612619565b90969095509350505050565b602080825282518282018190526000919060409081850190868401855b8281101561285f57815180516001600160a01b03168552868101516001600160601b03908116888701529086015116858501526060909301929085019060010161281a565b5091979650505050505050565b60006020828403121561287e57600080fd5b813561233b816125f0565b6000806040838503121561289c57600080fd5b6128a5836124ac565b91506128b3602084016124ac565b90509250929050565b6000602082840312156128ce57600080fd5b61233b82612605565b602080825282518282018190526000919060409081850190868401855b8281101561285f57815180516001600160a01b031685528601516001600160601b03168685015292840192908501906001016128f4565b60006001600160401b03808716835260018060a01b03861660208401526080604084015261295c60808401866123ef565b915080841660608401525095945050505050565b60006020828403121561298257600080fd5b8151801515811461233b57600080fd5b60208152600061233b60208301846123ef565b60018060a01b03831681526040602082015260008251606060408401526129cf60a08401826123ef565b90506020840151606084015260408401516080840152809150509392505050565b60006001600160401b03808616835260606020840152612a1360608401866123ef565b9150808416604084015250949350505050565b600060208284031215612a3857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001600160601b0383811690831681811015612a8b57612a8b612a55565b039392505050565b60006001600160401b0380831681851681830481118215151615612ab957612ab9612a55565b02949350505050565b60006001600160401b03808316818516808303821115612ae457612ae4612a55565b01949350505050565b60006001600160601b03808316818516808303821115612ae457612ae4612a55565b60008219821115612b2257612b22612a55565b500190565b8135612b32816123bd565b81546001600160a01b03199081166001600160a01b039290921691821783556020840135612b5f816125f0565b60a01b1617905550565b6020808252818101839052600090604080840186845b87811015612bc7578135612b92816123bd565b6001600160a01b0316835281850135612baa816125f0565b6001600160601b0316838601529183019190830190600101612b7f565b5090979650505050505050565b600082821015612be657612be6612a55565b500390565b634e487b7160e01b600052603160045260246000fd5b60006001600160401b03821115612c1a57612c1a6124e3565b5060051b60200190565b600082601f830112612c3557600080fd5b81516020612c4a612c4583612c01565b612521565b82815260059290921b84018101918181019086841115612c6957600080fd5b8286015b84811015612c845780518352918301918301612c6d565b509695505050505050565b60008060408385031215612ca257600080fd5b82516001600160401b0380821115612cb957600080fd5b818501915085601f830112612ccd57600080fd5b81516020612cdd612c4583612c01565b82815260059290921b84018101918181019089841115612cfc57600080fd5b948201945b83861015612d23578551612d14816123bd565b82529482019490820190612d01565b91880151919650909350505080821115612d3c57600080fd5b50612d4985828601612c24565b9150509250929050565b6000816000190483118215151615612d6d57612d6d612a55565b500290565b600082612d8f57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220654f8b3df1b25e44aa8f9c1ea858cc6048d99e1143bf79166397713408d711bd64736f6c634300080c0033", } // OmniAVSABI is the input ABI used to generate the binding from. @@ -1467,6 +1467,150 @@ func (_OmniAVS *OmniAVSFilterer) ParseAllowlistEnabled(log types.Log) (*OmniAVSA return event, nil } +// OmniAVSEthStakeInboxSetIterator is returned from FilterEthStakeInboxSet and is used to iterate over the raw logs and unpacked data for EthStakeInboxSet events raised by the OmniAVS contract. +type OmniAVSEthStakeInboxSetIterator struct { + Event *OmniAVSEthStakeInboxSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniAVSEthStakeInboxSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniAVSEthStakeInboxSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniAVSEthStakeInboxSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniAVSEthStakeInboxSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniAVSEthStakeInboxSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniAVSEthStakeInboxSet represents a EthStakeInboxSet event raised by the OmniAVS contract. +type OmniAVSEthStakeInboxSet struct { + Inbox common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterEthStakeInboxSet is a free log retrieval operation binding the contract event 0x51939cde6a90c107a83ed16cd83879c0fa830cbddb121deea9050042fae5ce67. +// +// Solidity: event EthStakeInboxSet(address indexed inbox) +func (_OmniAVS *OmniAVSFilterer) FilterEthStakeInboxSet(opts *bind.FilterOpts, inbox []common.Address) (*OmniAVSEthStakeInboxSetIterator, error) { + + var inboxRule []interface{} + for _, inboxItem := range inbox { + inboxRule = append(inboxRule, inboxItem) + } + + logs, sub, err := _OmniAVS.contract.FilterLogs(opts, "EthStakeInboxSet", inboxRule) + if err != nil { + return nil, err + } + return &OmniAVSEthStakeInboxSetIterator{contract: _OmniAVS.contract, event: "EthStakeInboxSet", logs: logs, sub: sub}, nil +} + +// WatchEthStakeInboxSet is a free log subscription operation binding the contract event 0x51939cde6a90c107a83ed16cd83879c0fa830cbddb121deea9050042fae5ce67. +// +// Solidity: event EthStakeInboxSet(address indexed inbox) +func (_OmniAVS *OmniAVSFilterer) WatchEthStakeInboxSet(opts *bind.WatchOpts, sink chan<- *OmniAVSEthStakeInboxSet, inbox []common.Address) (event.Subscription, error) { + + var inboxRule []interface{} + for _, inboxItem := range inbox { + inboxRule = append(inboxRule, inboxItem) + } + + logs, sub, err := _OmniAVS.contract.WatchLogs(opts, "EthStakeInboxSet", inboxRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniAVSEthStakeInboxSet) + if err := _OmniAVS.contract.UnpackLog(event, "EthStakeInboxSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseEthStakeInboxSet is a log parse operation binding the contract event 0x51939cde6a90c107a83ed16cd83879c0fa830cbddb121deea9050042fae5ce67. +// +// Solidity: event EthStakeInboxSet(address indexed inbox) +func (_OmniAVS *OmniAVSFilterer) ParseEthStakeInboxSet(log types.Log) (*OmniAVSEthStakeInboxSet, error) { + event := new(OmniAVSEthStakeInboxSet) + if err := _OmniAVS.contract.UnpackLog(event, "EthStakeInboxSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // OmniAVSInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the OmniAVS contract. type OmniAVSInitializedIterator struct { Event *OmniAVSInitialized // Event containing the contract specifics and raw log @@ -1534,30 +1678,586 @@ func (it *OmniAVSInitializedIterator) Close() error { return nil } -// OmniAVSInitialized represents a Initialized event raised by the OmniAVS contract. -type OmniAVSInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos +// OmniAVSInitialized represents a Initialized event raised by the OmniAVS contract. +type OmniAVSInitialized 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 (_OmniAVS *OmniAVSFilterer) FilterInitialized(opts *bind.FilterOpts) (*OmniAVSInitializedIterator, error) { + + logs, sub, err := _OmniAVS.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &OmniAVSInitializedIterator{contract: _OmniAVS.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 (_OmniAVS *OmniAVSFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *OmniAVSInitialized) (event.Subscription, error) { + + logs, sub, err := _OmniAVS.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(OmniAVSInitialized) + if err := _OmniAVS.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 (_OmniAVS *OmniAVSFilterer) ParseInitialized(log types.Log) (*OmniAVSInitialized, error) { + event := new(OmniAVSInitialized) + if err := _OmniAVS.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OmniAVSMaxOperatorCountSetIterator is returned from FilterMaxOperatorCountSet and is used to iterate over the raw logs and unpacked data for MaxOperatorCountSet events raised by the OmniAVS contract. +type OmniAVSMaxOperatorCountSetIterator struct { + Event *OmniAVSMaxOperatorCountSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniAVSMaxOperatorCountSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniAVSMaxOperatorCountSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniAVSMaxOperatorCountSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniAVSMaxOperatorCountSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniAVSMaxOperatorCountSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniAVSMaxOperatorCountSet represents a MaxOperatorCountSet event raised by the OmniAVS contract. +type OmniAVSMaxOperatorCountSet struct { + MaxOperatorCount uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMaxOperatorCountSet is a free log retrieval operation binding the contract event 0x4867705ef2f7341363cb4d4bb0e1501ad37f84ae371b9f31e73a1c25c39840e4. +// +// Solidity: event MaxOperatorCountSet(uint32 maxOperatorCount) +func (_OmniAVS *OmniAVSFilterer) FilterMaxOperatorCountSet(opts *bind.FilterOpts) (*OmniAVSMaxOperatorCountSetIterator, error) { + + logs, sub, err := _OmniAVS.contract.FilterLogs(opts, "MaxOperatorCountSet") + if err != nil { + return nil, err + } + return &OmniAVSMaxOperatorCountSetIterator{contract: _OmniAVS.contract, event: "MaxOperatorCountSet", logs: logs, sub: sub}, nil +} + +// WatchMaxOperatorCountSet is a free log subscription operation binding the contract event 0x4867705ef2f7341363cb4d4bb0e1501ad37f84ae371b9f31e73a1c25c39840e4. +// +// Solidity: event MaxOperatorCountSet(uint32 maxOperatorCount) +func (_OmniAVS *OmniAVSFilterer) WatchMaxOperatorCountSet(opts *bind.WatchOpts, sink chan<- *OmniAVSMaxOperatorCountSet) (event.Subscription, error) { + + logs, sub, err := _OmniAVS.contract.WatchLogs(opts, "MaxOperatorCountSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniAVSMaxOperatorCountSet) + if err := _OmniAVS.contract.UnpackLog(event, "MaxOperatorCountSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseMaxOperatorCountSet is a log parse operation binding the contract event 0x4867705ef2f7341363cb4d4bb0e1501ad37f84ae371b9f31e73a1c25c39840e4. +// +// Solidity: event MaxOperatorCountSet(uint32 maxOperatorCount) +func (_OmniAVS *OmniAVSFilterer) ParseMaxOperatorCountSet(log types.Log) (*OmniAVSMaxOperatorCountSet, error) { + event := new(OmniAVSMaxOperatorCountSet) + if err := _OmniAVS.contract.UnpackLog(event, "MaxOperatorCountSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OmniAVSMinOperatorStakeSetIterator is returned from FilterMinOperatorStakeSet and is used to iterate over the raw logs and unpacked data for MinOperatorStakeSet events raised by the OmniAVS contract. +type OmniAVSMinOperatorStakeSetIterator struct { + Event *OmniAVSMinOperatorStakeSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniAVSMinOperatorStakeSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniAVSMinOperatorStakeSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniAVSMinOperatorStakeSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniAVSMinOperatorStakeSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniAVSMinOperatorStakeSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniAVSMinOperatorStakeSet represents a MinOperatorStakeSet event raised by the OmniAVS contract. +type OmniAVSMinOperatorStakeSet struct { + MinOperatorStake *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMinOperatorStakeSet is a free log retrieval operation binding the contract event 0x9b13fd38c94948514c63f3132d22b60ecb8ed37521ba05fdfad046cfbc3a772a. +// +// Solidity: event MinOperatorStakeSet(uint96 minOperatorStake) +func (_OmniAVS *OmniAVSFilterer) FilterMinOperatorStakeSet(opts *bind.FilterOpts) (*OmniAVSMinOperatorStakeSetIterator, error) { + + logs, sub, err := _OmniAVS.contract.FilterLogs(opts, "MinOperatorStakeSet") + if err != nil { + return nil, err + } + return &OmniAVSMinOperatorStakeSetIterator{contract: _OmniAVS.contract, event: "MinOperatorStakeSet", logs: logs, sub: sub}, nil +} + +// WatchMinOperatorStakeSet is a free log subscription operation binding the contract event 0x9b13fd38c94948514c63f3132d22b60ecb8ed37521ba05fdfad046cfbc3a772a. +// +// Solidity: event MinOperatorStakeSet(uint96 minOperatorStake) +func (_OmniAVS *OmniAVSFilterer) WatchMinOperatorStakeSet(opts *bind.WatchOpts, sink chan<- *OmniAVSMinOperatorStakeSet) (event.Subscription, error) { + + logs, sub, err := _OmniAVS.contract.WatchLogs(opts, "MinOperatorStakeSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniAVSMinOperatorStakeSet) + if err := _OmniAVS.contract.UnpackLog(event, "MinOperatorStakeSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseMinOperatorStakeSet is a log parse operation binding the contract event 0x9b13fd38c94948514c63f3132d22b60ecb8ed37521ba05fdfad046cfbc3a772a. +// +// Solidity: event MinOperatorStakeSet(uint96 minOperatorStake) +func (_OmniAVS *OmniAVSFilterer) ParseMinOperatorStakeSet(log types.Log) (*OmniAVSMinOperatorStakeSet, error) { + event := new(OmniAVSMinOperatorStakeSet) + if err := _OmniAVS.contract.UnpackLog(event, "MinOperatorStakeSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OmniAVSOmniChainIdSetIterator is returned from FilterOmniChainIdSet and is used to iterate over the raw logs and unpacked data for OmniChainIdSet events raised by the OmniAVS contract. +type OmniAVSOmniChainIdSetIterator struct { + Event *OmniAVSOmniChainIdSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniAVSOmniChainIdSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniAVSOmniChainIdSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniAVSOmniChainIdSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniAVSOmniChainIdSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniAVSOmniChainIdSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniAVSOmniChainIdSet represents a OmniChainIdSet event raised by the OmniAVS contract. +type OmniAVSOmniChainIdSet struct { + ChainID uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOmniChainIdSet is a free log retrieval operation binding the contract event 0x86c6800e7c164327530b6a334cd4599a5389a8b31d5e262d82034b1121dd8b86. +// +// Solidity: event OmniChainIdSet(uint64 indexed chainID) +func (_OmniAVS *OmniAVSFilterer) FilterOmniChainIdSet(opts *bind.FilterOpts, chainID []uint64) (*OmniAVSOmniChainIdSetIterator, error) { + + var chainIDRule []interface{} + for _, chainIDItem := range chainID { + chainIDRule = append(chainIDRule, chainIDItem) + } + + logs, sub, err := _OmniAVS.contract.FilterLogs(opts, "OmniChainIdSet", chainIDRule) + if err != nil { + return nil, err + } + return &OmniAVSOmniChainIdSetIterator{contract: _OmniAVS.contract, event: "OmniChainIdSet", logs: logs, sub: sub}, nil +} + +// WatchOmniChainIdSet is a free log subscription operation binding the contract event 0x86c6800e7c164327530b6a334cd4599a5389a8b31d5e262d82034b1121dd8b86. +// +// Solidity: event OmniChainIdSet(uint64 indexed chainID) +func (_OmniAVS *OmniAVSFilterer) WatchOmniChainIdSet(opts *bind.WatchOpts, sink chan<- *OmniAVSOmniChainIdSet, chainID []uint64) (event.Subscription, error) { + + var chainIDRule []interface{} + for _, chainIDItem := range chainID { + chainIDRule = append(chainIDRule, chainIDItem) + } + + logs, sub, err := _OmniAVS.contract.WatchLogs(opts, "OmniChainIdSet", chainIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniAVSOmniChainIdSet) + if err := _OmniAVS.contract.UnpackLog(event, "OmniChainIdSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOmniChainIdSet is a log parse operation binding the contract event 0x86c6800e7c164327530b6a334cd4599a5389a8b31d5e262d82034b1121dd8b86. +// +// Solidity: event OmniChainIdSet(uint64 indexed chainID) +func (_OmniAVS *OmniAVSFilterer) ParseOmniChainIdSet(log types.Log) (*OmniAVSOmniChainIdSet, error) { + event := new(OmniAVSOmniChainIdSet) + if err := _OmniAVS.contract.UnpackLog(event, "OmniChainIdSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OmniAVSOmniPortalSetIterator is returned from FilterOmniPortalSet and is used to iterate over the raw logs and unpacked data for OmniPortalSet events raised by the OmniAVS contract. +type OmniAVSOmniPortalSetIterator struct { + Event *OmniAVSOmniPortalSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniAVSOmniPortalSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniAVSOmniPortalSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniAVSOmniPortalSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniAVSOmniPortalSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniAVSOmniPortalSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniAVSOmniPortalSet represents a OmniPortalSet event raised by the OmniAVS contract. +type OmniAVSOmniPortalSet struct { + Portal common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// FilterOmniPortalSet is a free log retrieval operation binding the contract event 0x79162c8d053a07e70cdc1ccc536f0440b571f8508377d2bef51094fadab98f47. // -// Solidity: event Initialized(uint8 version) -func (_OmniAVS *OmniAVSFilterer) FilterInitialized(opts *bind.FilterOpts) (*OmniAVSInitializedIterator, error) { +// Solidity: event OmniPortalSet(address indexed portal) +func (_OmniAVS *OmniAVSFilterer) FilterOmniPortalSet(opts *bind.FilterOpts, portal []common.Address) (*OmniAVSOmniPortalSetIterator, error) { - logs, sub, err := _OmniAVS.contract.FilterLogs(opts, "Initialized") + var portalRule []interface{} + for _, portalItem := range portal { + portalRule = append(portalRule, portalItem) + } + + logs, sub, err := _OmniAVS.contract.FilterLogs(opts, "OmniPortalSet", portalRule) if err != nil { return nil, err } - return &OmniAVSInitializedIterator{contract: _OmniAVS.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &OmniAVSOmniPortalSetIterator{contract: _OmniAVS.contract, event: "OmniPortalSet", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// WatchOmniPortalSet is a free log subscription operation binding the contract event 0x79162c8d053a07e70cdc1ccc536f0440b571f8508377d2bef51094fadab98f47. // -// Solidity: event Initialized(uint8 version) -func (_OmniAVS *OmniAVSFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *OmniAVSInitialized) (event.Subscription, error) { +// Solidity: event OmniPortalSet(address indexed portal) +func (_OmniAVS *OmniAVSFilterer) WatchOmniPortalSet(opts *bind.WatchOpts, sink chan<- *OmniAVSOmniPortalSet, portal []common.Address) (event.Subscription, error) { - logs, sub, err := _OmniAVS.contract.WatchLogs(opts, "Initialized") + var portalRule []interface{} + for _, portalItem := range portal { + portalRule = append(portalRule, portalItem) + } + + logs, sub, err := _OmniAVS.contract.WatchLogs(opts, "OmniPortalSet", portalRule) if err != nil { return nil, err } @@ -1567,8 +2267,8 @@ func (_OmniAVS *OmniAVSFilterer) WatchInitialized(opts *bind.WatchOpts, sink cha select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(OmniAVSInitialized) - if err := _OmniAVS.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(OmniAVSOmniPortalSet) + if err := _OmniAVS.contract.UnpackLog(event, "OmniPortalSet", log); err != nil { return err } event.Raw = log @@ -1589,12 +2289,12 @@ func (_OmniAVS *OmniAVSFilterer) WatchInitialized(opts *bind.WatchOpts, sink cha }), nil } -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// ParseOmniPortalSet is a log parse operation binding the contract event 0x79162c8d053a07e70cdc1ccc536f0440b571f8508377d2bef51094fadab98f47. // -// Solidity: event Initialized(uint8 version) -func (_OmniAVS *OmniAVSFilterer) ParseInitialized(log types.Log) (*OmniAVSInitialized, error) { - event := new(OmniAVSInitialized) - if err := _OmniAVS.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event OmniPortalSet(address indexed portal) +func (_OmniAVS *OmniAVSFilterer) ParseOmniPortalSet(log types.Log) (*OmniAVSOmniPortalSet, error) { + event := new(OmniAVSOmniPortalSet) + if err := _OmniAVS.contract.UnpackLog(event, "OmniPortalSet", log); err != nil { return nil, err } event.Raw = log @@ -1820,10 +2520,15 @@ type OmniAVSOperatorAllowed struct { // FilterOperatorAllowed is a free log retrieval operation binding the contract event 0xdde65206cdee4ea27ef1b170724ba50b41ad09a3bf2dda12935fc40c4dbf6e75. // -// Solidity: event OperatorAllowed(address operator) -func (_OmniAVS *OmniAVSFilterer) FilterOperatorAllowed(opts *bind.FilterOpts) (*OmniAVSOperatorAllowedIterator, error) { +// Solidity: event OperatorAllowed(address indexed operator) +func (_OmniAVS *OmniAVSFilterer) FilterOperatorAllowed(opts *bind.FilterOpts, operator []common.Address) (*OmniAVSOperatorAllowedIterator, error) { - logs, sub, err := _OmniAVS.contract.FilterLogs(opts, "OperatorAllowed") + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _OmniAVS.contract.FilterLogs(opts, "OperatorAllowed", operatorRule) if err != nil { return nil, err } @@ -1832,10 +2537,15 @@ func (_OmniAVS *OmniAVSFilterer) FilterOperatorAllowed(opts *bind.FilterOpts) (* // WatchOperatorAllowed is a free log subscription operation binding the contract event 0xdde65206cdee4ea27ef1b170724ba50b41ad09a3bf2dda12935fc40c4dbf6e75. // -// Solidity: event OperatorAllowed(address operator) -func (_OmniAVS *OmniAVSFilterer) WatchOperatorAllowed(opts *bind.WatchOpts, sink chan<- *OmniAVSOperatorAllowed) (event.Subscription, error) { +// Solidity: event OperatorAllowed(address indexed operator) +func (_OmniAVS *OmniAVSFilterer) WatchOperatorAllowed(opts *bind.WatchOpts, sink chan<- *OmniAVSOperatorAllowed, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } - logs, sub, err := _OmniAVS.contract.WatchLogs(opts, "OperatorAllowed") + logs, sub, err := _OmniAVS.contract.WatchLogs(opts, "OperatorAllowed", operatorRule) if err != nil { return nil, err } @@ -1869,7 +2579,7 @@ func (_OmniAVS *OmniAVSFilterer) WatchOperatorAllowed(opts *bind.WatchOpts, sink // ParseOperatorAllowed is a log parse operation binding the contract event 0xdde65206cdee4ea27ef1b170724ba50b41ad09a3bf2dda12935fc40c4dbf6e75. // -// Solidity: event OperatorAllowed(address operator) +// Solidity: event OperatorAllowed(address indexed operator) func (_OmniAVS *OmniAVSFilterer) ParseOperatorAllowed(log types.Log) (*OmniAVSOperatorAllowed, error) { event := new(OmniAVSOperatorAllowed) if err := _OmniAVS.contract.UnpackLog(event, "OperatorAllowed", log); err != nil { @@ -1954,10 +2664,15 @@ type OmniAVSOperatorDisallowed struct { // FilterOperatorDisallowed is a free log retrieval operation binding the contract event 0x8560daa191dd8e6fba276b053006b3990c46c94b842f85490f52c49b15cfe5cb. // -// Solidity: event OperatorDisallowed(address operator) -func (_OmniAVS *OmniAVSFilterer) FilterOperatorDisallowed(opts *bind.FilterOpts) (*OmniAVSOperatorDisallowedIterator, error) { +// Solidity: event OperatorDisallowed(address indexed operator) +func (_OmniAVS *OmniAVSFilterer) FilterOperatorDisallowed(opts *bind.FilterOpts, operator []common.Address) (*OmniAVSOperatorDisallowedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } - logs, sub, err := _OmniAVS.contract.FilterLogs(opts, "OperatorDisallowed") + logs, sub, err := _OmniAVS.contract.FilterLogs(opts, "OperatorDisallowed", operatorRule) if err != nil { return nil, err } @@ -1966,10 +2681,15 @@ func (_OmniAVS *OmniAVSFilterer) FilterOperatorDisallowed(opts *bind.FilterOpts) // WatchOperatorDisallowed is a free log subscription operation binding the contract event 0x8560daa191dd8e6fba276b053006b3990c46c94b842f85490f52c49b15cfe5cb. // -// Solidity: event OperatorDisallowed(address operator) -func (_OmniAVS *OmniAVSFilterer) WatchOperatorDisallowed(opts *bind.WatchOpts, sink chan<- *OmniAVSOperatorDisallowed) (event.Subscription, error) { +// Solidity: event OperatorDisallowed(address indexed operator) +func (_OmniAVS *OmniAVSFilterer) WatchOperatorDisallowed(opts *bind.WatchOpts, sink chan<- *OmniAVSOperatorDisallowed, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } - logs, sub, err := _OmniAVS.contract.WatchLogs(opts, "OperatorDisallowed") + logs, sub, err := _OmniAVS.contract.WatchLogs(opts, "OperatorDisallowed", operatorRule) if err != nil { return nil, err } @@ -2003,7 +2723,7 @@ func (_OmniAVS *OmniAVSFilterer) WatchOperatorDisallowed(opts *bind.WatchOpts, s // ParseOperatorDisallowed is a log parse operation binding the contract event 0x8560daa191dd8e6fba276b053006b3990c46c94b842f85490f52c49b15cfe5cb. // -// Solidity: event OperatorDisallowed(address operator) +// Solidity: event OperatorDisallowed(address indexed operator) func (_OmniAVS *OmniAVSFilterer) ParseOperatorDisallowed(log types.Log) (*OmniAVSOperatorDisallowed, error) { event := new(OmniAVSOperatorDisallowed) if err := _OmniAVS.contract.UnpackLog(event, "OperatorDisallowed", log); err != nil { @@ -2444,6 +3164,140 @@ func (_OmniAVS *OmniAVSFilterer) ParsePaused(log types.Log) (*OmniAVSPaused, err return event, nil } +// OmniAVSStrategyParamsSetIterator is returned from FilterStrategyParamsSet and is used to iterate over the raw logs and unpacked data for StrategyParamsSet events raised by the OmniAVS contract. +type OmniAVSStrategyParamsSetIterator struct { + Event *OmniAVSStrategyParamsSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniAVSStrategyParamsSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniAVSStrategyParamsSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniAVSStrategyParamsSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniAVSStrategyParamsSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniAVSStrategyParamsSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniAVSStrategyParamsSet represents a StrategyParamsSet event raised by the OmniAVS contract. +type OmniAVSStrategyParamsSet struct { + Params []IOmniAVSStrategyParam + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyParamsSet is a free log retrieval operation binding the contract event 0x236150b37b22bc9557672069e2dfb3f05be1dafd1f9ead78df2f8b855ee69640. +// +// Solidity: event StrategyParamsSet((address,uint96)[] params) +func (_OmniAVS *OmniAVSFilterer) FilterStrategyParamsSet(opts *bind.FilterOpts) (*OmniAVSStrategyParamsSetIterator, error) { + + logs, sub, err := _OmniAVS.contract.FilterLogs(opts, "StrategyParamsSet") + if err != nil { + return nil, err + } + return &OmniAVSStrategyParamsSetIterator{contract: _OmniAVS.contract, event: "StrategyParamsSet", logs: logs, sub: sub}, nil +} + +// WatchStrategyParamsSet is a free log subscription operation binding the contract event 0x236150b37b22bc9557672069e2dfb3f05be1dafd1f9ead78df2f8b855ee69640. +// +// Solidity: event StrategyParamsSet((address,uint96)[] params) +func (_OmniAVS *OmniAVSFilterer) WatchStrategyParamsSet(opts *bind.WatchOpts, sink chan<- *OmniAVSStrategyParamsSet) (event.Subscription, error) { + + logs, sub, err := _OmniAVS.contract.WatchLogs(opts, "StrategyParamsSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniAVSStrategyParamsSet) + if err := _OmniAVS.contract.UnpackLog(event, "StrategyParamsSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseStrategyParamsSet is a log parse operation binding the contract event 0x236150b37b22bc9557672069e2dfb3f05be1dafd1f9ead78df2f8b855ee69640. +// +// Solidity: event StrategyParamsSet((address,uint96)[] params) +func (_OmniAVS *OmniAVSFilterer) ParseStrategyParamsSet(log types.Log) (*OmniAVSStrategyParamsSet, error) { + event := new(OmniAVSStrategyParamsSet) + if err := _OmniAVS.contract.UnpackLog(event, "StrategyParamsSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // OmniAVSUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the OmniAVS contract. type OmniAVSUnpausedIterator struct { Event *OmniAVSUnpaused // Event containing the contract specifics and raw log @@ -2577,3 +3431,138 @@ func (_OmniAVS *OmniAVSFilterer) ParseUnpaused(log types.Log) (*OmniAVSUnpaused, event.Raw = log return event, nil } + +// OmniAVSXCallGasLimitsSetIterator is returned from FilterXCallGasLimitsSet and is used to iterate over the raw logs and unpacked data for XCallGasLimitsSet events raised by the OmniAVS contract. +type OmniAVSXCallGasLimitsSetIterator struct { + Event *OmniAVSXCallGasLimitsSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniAVSXCallGasLimitsSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniAVSXCallGasLimitsSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniAVSXCallGasLimitsSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniAVSXCallGasLimitsSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniAVSXCallGasLimitsSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniAVSXCallGasLimitsSet represents a XCallGasLimitsSet event raised by the OmniAVS contract. +type OmniAVSXCallGasLimitsSet struct { + Base uint64 + PerValidator uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterXCallGasLimitsSet is a free log retrieval operation binding the contract event 0xe8bd84272b361621aa78d2bf3b1232f4ec8bf4d53ea7e262b568952fd89dba30. +// +// Solidity: event XCallGasLimitsSet(uint64 base, uint64 perValidator) +func (_OmniAVS *OmniAVSFilterer) FilterXCallGasLimitsSet(opts *bind.FilterOpts) (*OmniAVSXCallGasLimitsSetIterator, error) { + + logs, sub, err := _OmniAVS.contract.FilterLogs(opts, "XCallGasLimitsSet") + if err != nil { + return nil, err + } + return &OmniAVSXCallGasLimitsSetIterator{contract: _OmniAVS.contract, event: "XCallGasLimitsSet", logs: logs, sub: sub}, nil +} + +// WatchXCallGasLimitsSet is a free log subscription operation binding the contract event 0xe8bd84272b361621aa78d2bf3b1232f4ec8bf4d53ea7e262b568952fd89dba30. +// +// Solidity: event XCallGasLimitsSet(uint64 base, uint64 perValidator) +func (_OmniAVS *OmniAVSFilterer) WatchXCallGasLimitsSet(opts *bind.WatchOpts, sink chan<- *OmniAVSXCallGasLimitsSet) (event.Subscription, error) { + + logs, sub, err := _OmniAVS.contract.WatchLogs(opts, "XCallGasLimitsSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniAVSXCallGasLimitsSet) + if err := _OmniAVS.contract.UnpackLog(event, "XCallGasLimitsSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseXCallGasLimitsSet is a log parse operation binding the contract event 0xe8bd84272b361621aa78d2bf3b1232f4ec8bf4d53ea7e262b568952fd89dba30. +// +// Solidity: event XCallGasLimitsSet(uint64 base, uint64 perValidator) +func (_OmniAVS *OmniAVSFilterer) ParseXCallGasLimitsSet(log types.Log) (*OmniAVSXCallGasLimitsSet, error) { + event := new(OmniAVSXCallGasLimitsSet) + if err := _OmniAVS.contract.UnpackLog(event, "XCallGasLimitsSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/bindings/omnistake.go b/contracts/bindings/omnistake.go new file mode 100644 index 000000000..cfe705cde --- /dev/null +++ b/contracts/bindings/omnistake.go @@ -0,0 +1,369 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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 +) + +// OmniStakeMetaData contains all meta data concerning the OmniStake contract. +var OmniStakeMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"depositor\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x6080604052348015600f57600080fd5b5060968061001e6000396000f3fe608060405260043610601c5760003560e01c8063d0e30db0146021575b600080fd5b60276029565b005b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a256fea2646970667358221220a691d6a4925781aa228829d6819ea739aaeccd931fb7f409c754af6bfe9bfb5d64736f6c63430008170033", +} + +// OmniStakeABI is the input ABI used to generate the binding from. +// Deprecated: Use OmniStakeMetaData.ABI instead. +var OmniStakeABI = OmniStakeMetaData.ABI + +// OmniStakeBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use OmniStakeMetaData.Bin instead. +var OmniStakeBin = OmniStakeMetaData.Bin + +// DeployOmniStake deploys a new Ethereum contract, binding an instance of OmniStake to it. +func DeployOmniStake(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *OmniStake, error) { + parsed, err := OmniStakeMetaData.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(OmniStakeBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OmniStake{OmniStakeCaller: OmniStakeCaller{contract: contract}, OmniStakeTransactor: OmniStakeTransactor{contract: contract}, OmniStakeFilterer: OmniStakeFilterer{contract: contract}}, nil +} + +// OmniStake is an auto generated Go binding around an Ethereum contract. +type OmniStake struct { + OmniStakeCaller // Read-only binding to the contract + OmniStakeTransactor // Write-only binding to the contract + OmniStakeFilterer // Log filterer for contract events +} + +// OmniStakeCaller is an auto generated read-only Go binding around an Ethereum contract. +type OmniStakeCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OmniStakeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type OmniStakeTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OmniStakeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type OmniStakeFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OmniStakeSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type OmniStakeSession struct { + Contract *OmniStake // 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 +} + +// OmniStakeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type OmniStakeCallerSession struct { + Contract *OmniStakeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// OmniStakeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type OmniStakeTransactorSession struct { + Contract *OmniStakeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// OmniStakeRaw is an auto generated low-level Go binding around an Ethereum contract. +type OmniStakeRaw struct { + Contract *OmniStake // Generic contract binding to access the raw methods on +} + +// OmniStakeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type OmniStakeCallerRaw struct { + Contract *OmniStakeCaller // Generic read-only contract binding to access the raw methods on +} + +// OmniStakeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type OmniStakeTransactorRaw struct { + Contract *OmniStakeTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewOmniStake creates a new instance of OmniStake, bound to a specific deployed contract. +func NewOmniStake(address common.Address, backend bind.ContractBackend) (*OmniStake, error) { + contract, err := bindOmniStake(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OmniStake{OmniStakeCaller: OmniStakeCaller{contract: contract}, OmniStakeTransactor: OmniStakeTransactor{contract: contract}, OmniStakeFilterer: OmniStakeFilterer{contract: contract}}, nil +} + +// NewOmniStakeCaller creates a new read-only instance of OmniStake, bound to a specific deployed contract. +func NewOmniStakeCaller(address common.Address, caller bind.ContractCaller) (*OmniStakeCaller, error) { + contract, err := bindOmniStake(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OmniStakeCaller{contract: contract}, nil +} + +// NewOmniStakeTransactor creates a new write-only instance of OmniStake, bound to a specific deployed contract. +func NewOmniStakeTransactor(address common.Address, transactor bind.ContractTransactor) (*OmniStakeTransactor, error) { + contract, err := bindOmniStake(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OmniStakeTransactor{contract: contract}, nil +} + +// NewOmniStakeFilterer creates a new log filterer instance of OmniStake, bound to a specific deployed contract. +func NewOmniStakeFilterer(address common.Address, filterer bind.ContractFilterer) (*OmniStakeFilterer, error) { + contract, err := bindOmniStake(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OmniStakeFilterer{contract: contract}, nil +} + +// bindOmniStake binds a generic wrapper to an already deployed contract. +func bindOmniStake(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := OmniStakeMetaData.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 (_OmniStake *OmniStakeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OmniStake.Contract.OmniStakeCaller.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 (_OmniStake *OmniStakeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OmniStake.Contract.OmniStakeTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_OmniStake *OmniStakeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OmniStake.Contract.OmniStakeTransactor.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 (_OmniStake *OmniStakeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OmniStake.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 (_OmniStake *OmniStakeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OmniStake.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_OmniStake *OmniStakeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OmniStake.Contract.contract.Transact(opts, method, params...) +} + +// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. +// +// Solidity: function deposit() payable returns() +func (_OmniStake *OmniStakeTransactor) Deposit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OmniStake.contract.Transact(opts, "deposit") +} + +// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. +// +// Solidity: function deposit() payable returns() +func (_OmniStake *OmniStakeSession) Deposit() (*types.Transaction, error) { + return _OmniStake.Contract.Deposit(&_OmniStake.TransactOpts) +} + +// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. +// +// Solidity: function deposit() payable returns() +func (_OmniStake *OmniStakeTransactorSession) Deposit() (*types.Transaction, error) { + return _OmniStake.Contract.Deposit(&_OmniStake.TransactOpts) +} + +// OmniStakeDepositIterator is returned from FilterDeposit and is used to iterate over the raw logs and unpacked data for Deposit events raised by the OmniStake contract. +type OmniStakeDepositIterator struct { + Event *OmniStakeDeposit // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniStakeDepositIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniStakeDeposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniStakeDeposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniStakeDepositIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniStakeDepositIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniStakeDeposit represents a Deposit event raised by the OmniStake contract. +type OmniStakeDeposit struct { + Depositor common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeposit is a free log retrieval operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c. +// +// Solidity: event Deposit(address indexed depositor, uint256 amount) +func (_OmniStake *OmniStakeFilterer) FilterDeposit(opts *bind.FilterOpts, depositor []common.Address) (*OmniStakeDepositIterator, error) { + + var depositorRule []interface{} + for _, depositorItem := range depositor { + depositorRule = append(depositorRule, depositorItem) + } + + logs, sub, err := _OmniStake.contract.FilterLogs(opts, "Deposit", depositorRule) + if err != nil { + return nil, err + } + return &OmniStakeDepositIterator{contract: _OmniStake.contract, event: "Deposit", logs: logs, sub: sub}, nil +} + +// WatchDeposit is a free log subscription operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c. +// +// Solidity: event Deposit(address indexed depositor, uint256 amount) +func (_OmniStake *OmniStakeFilterer) WatchDeposit(opts *bind.WatchOpts, sink chan<- *OmniStakeDeposit, depositor []common.Address) (event.Subscription, error) { + + var depositorRule []interface{} + for _, depositorItem := range depositor { + depositorRule = append(depositorRule, depositorItem) + } + + logs, sub, err := _OmniStake.contract.WatchLogs(opts, "Deposit", depositorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniStakeDeposit) + if err := _OmniStake.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 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c. +// +// Solidity: event Deposit(address indexed depositor, uint256 amount) +func (_OmniStake *OmniStakeFilterer) ParseDeposit(log types.Log) (*OmniStakeDeposit, error) { + event := new(OmniStakeDeposit) + if err := _OmniStake.contract.UnpackLog(event, "Deposit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/src/protocol/OmniStake.sol b/contracts/src/protocol/OmniStake.sol new file mode 100644 index 000000000..b63a255a7 --- /dev/null +++ b/contracts/src/protocol/OmniStake.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity 0.8.23; + +/** + * @title OmniStake + * @notice The deposit contract for OMNI-staked validators. + */ +contract OmniStake { + /** + * @notice Emitted when a user deposits funds into the contract. + * @param depositor Address of the depositor + * @param amount Funds deposited + */ + event Deposit(address indexed depositor, uint256 amount); + + /** + * @notice Deposit OMNI. This is the entry point for validator staking. The consensus chain is + * notified of the deposit, and manages stake accounting / validator onboarding. + */ + function deposit() external payable { + require(msg.value > 1 ether, "OmniStake: deposit amt too low"); + require(msg.value < type(uint64).max, "OmniStake: deposit amt too high"); + emit Deposit(msg.sender, msg.value); + } +}