diff --git a/contracts/bindings/EigenPod/binding.go b/contracts/bindings/EigenPod/binding.go new file mode 100644 index 00000000..26f4c388 --- /dev/null +++ b/contracts/bindings/EigenPod/binding.go @@ -0,0 +1,2421 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contractEigenPod + +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 +) + +// BeaconChainProofsBalanceUpdateProof is an auto generated low-level Go binding around an user-defined struct. +type BeaconChainProofsBalanceUpdateProof struct { + ValidatorBalanceProof []byte + ValidatorFieldsProof []byte + BalanceRoot [32]byte +} + +// BeaconChainProofsStateRootProof is an auto generated low-level Go binding around an user-defined struct. +type BeaconChainProofsStateRootProof struct { + BeaconStateRoot [32]byte + Proof []byte +} + +// BeaconChainProofsWithdrawalProof is an auto generated low-level Go binding around an user-defined struct. +type BeaconChainProofsWithdrawalProof struct { + WithdrawalProof []byte + SlotProof []byte + ExecutionPayloadProof []byte + TimestampProof []byte + HistoricalSummaryBlockRootProof []byte + BlockRootIndex uint64 + HistoricalSummaryIndex uint64 + WithdrawalIndex uint64 + BlockRoot [32]byte + SlotRoot [32]byte + TimestampRoot [32]byte + ExecutionPayloadRoot [32]byte +} + +// IEigenPodValidatorInfo is an auto generated low-level Go binding around an user-defined struct. +type IEigenPodValidatorInfo struct { + ValidatorIndex uint64 + RestakedBalanceGwei uint64 + MostRecentBalanceUpdateTimestamp uint64 + Status uint8 +} + +// ContractEigenPodMetaData contains all meta data concerning the ContractEigenPod contract. +var ContractEigenPodMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"contractIETHPOSDeposit\",\"name\":\"_ethPOS\",\"type\":\"address\"},{\"internalType\":\"contractIDelayedWithdrawalRouter\",\"name\":\"_delayedWithdrawalRouter\",\"type\":\"address\"},{\"internalType\":\"contractIEigenPodManager\",\"name\":\"_eigenPodManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_GENESIS_TIME\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"}],\"name\":\"EigenPodStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"validatorIndex\",\"type\":\"uint40\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"withdrawalTimestamp\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"withdrawalAmountGwei\",\"type\":\"uint64\"}],\"name\":\"FullWithdrawalRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceived\",\"type\":\"uint256\"}],\"name\":\"NonBeaconChainETHReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWithdrawn\",\"type\":\"uint256\"}],\"name\":\"NonBeaconChainETHWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"validatorIndex\",\"type\":\"uint40\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"withdrawalTimestamp\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"partialWithdrawalAmountGwei\",\"type\":\"uint64\"}],\"name\":\"PartialWithdrawalRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RestakedBeaconChainETHWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"podOwner\",\"type\":\"address\"}],\"name\":\"RestakingActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"validatorIndex\",\"type\":\"uint40\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"balanceTimestamp\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newValidatorBalanceGwei\",\"type\":\"uint64\"}],\"name\":\"ValidatorBalanceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"validatorIndex\",\"type\":\"uint40\"}],\"name\":\"ValidatorRestaked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"GENESIS_TIME\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activateRestaking\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedWithdrawalRouter\",\"outputs\":[{\"internalType\":\"contractIDelayedWithdrawalRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eigenPodManager\",\"outputs\":[{\"internalType\":\"contractIEigenPodManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ethPOS\",\"outputs\":[{\"internalType\":\"contractIETHPOSDeposit\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hasRestaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_podOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mostRecentWithdrawalTimestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonBeaconChainETHBalanceWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"podOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"provenWithdrawal\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20[]\",\"name\":\"tokenList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsToWithdraw\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"recoverTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"depositDataRoot\",\"type\":\"bytes32\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sumOfPartialWithdrawalsClaimedGwei\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\"}],\"name\":\"validatorPubkeyHashToInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"validatorIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"mostRecentBalanceUpdateTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\",\"name\":\"status\",\"type\":\"uint8\"}],\"internalType\":\"structIEigenPod.ValidatorInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"pubkeyHash\",\"type\":\"bytes32\"}],\"name\":\"validatorStatus\",\"outputs\":[{\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"oracleTimestamp\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"beaconStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"name\":\"stateRootProof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"withdrawalProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"slotProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"executionPayloadProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"timestampProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"historicalSummaryBlockRootProof\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"blockRootIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"historicalSummaryIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"withdrawalIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"slotRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"timestampRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"executionPayloadRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structBeaconChainProofs.WithdrawalProof[]\",\"name\":\"withdrawalProofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32[][]\",\"name\":\"validatorFields\",\"type\":\"bytes32[][]\"},{\"internalType\":\"bytes32[][]\",\"name\":\"withdrawalFields\",\"type\":\"bytes32[][]\"}],\"name\":\"verifyAndProcessWithdrawals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"oracleTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint40[]\",\"name\":\"validatorIndices\",\"type\":\"uint40[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"beaconStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"name\":\"stateRootProof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"validatorBalanceProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"validatorFieldsProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"balanceRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structBeaconChainProofs.BalanceUpdateProof[]\",\"name\":\"balanceUpdateProofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32[][]\",\"name\":\"validatorFields\",\"type\":\"bytes32[][]\"}],\"name\":\"verifyBalanceUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"oracleTimestamp\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"beaconStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"name\":\"stateRootProof\",\"type\":\"tuple\"},{\"internalType\":\"uint40[]\",\"name\":\"validatorIndices\",\"type\":\"uint40[]\"},{\"internalType\":\"bytes[]\",\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32[][]\",\"name\":\"validatorFields\",\"type\":\"bytes32[][]\"}],\"name\":\"verifyWithdrawalCredentials\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawBeforeRestaking\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountToWithdraw\",\"type\":\"uint256\"}],\"name\":\"withdrawNonBeaconChainETHBalanceWei\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountWei\",\"type\":\"uint256\"}],\"name\":\"withdrawRestakedBeaconChainETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawableRestakedExecutionLayerGwei\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x6101206040523480156200001257600080fd5b5060405162005a7a38038062005a7a83398101604081905262000035916200016f565b6001600160a01b0380861660805284811660a052831660c0526001600160401b0380831660e0528116610100526200006c62000077565b5050505050620001e7565b600054610100900460ff1615620000e45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000137576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014f57600080fd5b50565b80516001600160401b03811681146200016a57600080fd5b919050565b600080600080600060a086880312156200018857600080fd5b8551620001958162000139565b6020870151909550620001a88162000139565b6040870151909450620001bb8162000139565b9250620001cb6060870162000152565b9150620001db6080870162000152565b90509295509295909350565b60805160a05160c05160e051610100516157b4620002c66000396000818161053f01528181612fd7015261308e01526000818161023f015281816120eb0152818161211f015281816126470152818161267401528181613e9a0152613ed50152600081816103370152818161059e01528181610731015281816109cf01528181610b2401528181610c4701528181610e0201528181610fe2015281816111160152818161122d01528181611778015281816118b70152611a8401526000818161020b0152612c9d0152600081816103fc0152610d1201526157b46000f3fe60806040526004361061014f5760003560e01c806374cdd798116100b6578063c4d66de81161006f578063c4d66de8146104ad578063dda3346c146104cd578063e251ef52146104ed578063e2c834451461050d578063f28824611461052d578063fe80b0871461056157600080fd5b806374cdd798146103ea57806387e0d2891461041e5780639b4e463414610445578063b725bceb14610458578063baa7145a14610478578063c49074421461048d57600080fd5b806334bea20a1161010857806334bea20a146102ca5780633f65cf19146103055780634665bcda146103255780635d3f65b6146103595780636fcd0e53146103795780637439841f146103a657600080fd5b80630b18ff66146101a55780630cd4649e146101e25780631a5057be146101f95780631d905d5c1461022d5780633106ab53146102795780633474aa16146102aa57600080fd5b366101a057346037600082825461016691906146fb565b90915550506040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101b157600080fd5b506033546101c5906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101ee57600080fd5b506101f7610585565b005b34801561020557600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b34801561023957600080fd5b506102617f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b0390911681526020016101d9565b34801561028557600080fd5b5060345461029a90600160401b900460ff1681565b60405190151581526020016101d9565b3480156102b657600080fd5b50603454610261906001600160401b031681565b3480156102d657600080fd5b5061029a6102e536600461472f565b603560209081526000928352604080842090915290825290205460ff1681565b34801561031157600080fd5b506101f76103203660046147be565b6106ee565b34801561033157600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b34801561036557600080fd5b50603854610261906001600160401b031681565b34801561038557600080fd5b5061039961039436600461488c565b610b8f565b6040516101d991906148dd565b3480156103b257600080fd5b506103dd6103c136600461488c565b600090815260366020526040902054600160c01b900460ff1690565b6040516101d99190614925565b3480156103f657600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b34801561042a57600080fd5b5060335461026190600160a01b90046001600160401b031681565b6101f7610453366004614974565b610c3c565b34801561046457600080fd5b506101f76104733660046149e7565b610de9565b34801561048457600080fd5b506101f76111b7565b34801561049957600080fd5b506101f76104a8366004614a8f565b611222565b3480156104b957600080fd5b506101f76104c8366004614abb565b61145f565b3480156104d957600080fd5b506101f76104e8366004614bd5565b611637565b3480156104f957600080fd5b506101f7610508366004614ca6565b611760565b34801561051957600080fd5b506101f7610528366004614a8f565b611b2b565b34801561053957600080fd5b506102617f000000000000000000000000000000000000000000000000000000000000000081565b34801561056d57600080fd5b5061057760375481565b6040519081526020016101d9565b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156105ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106119190614da1565b156106375760405162461bcd60e51b815260040161062e90614dc3565b60405180910390fd5b6033546001600160a01b031633146106615760405162461bcd60e51b815260040161062e90614e20565b603454600160401b900460ff161561068b5760405162461bcd60e51b815260040161062e90614e68565b6034805460ff60401b1916600160401b1790556033546106b3906001600160a01b0316611c65565b6033546040516001600160a01b03909116907fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a250565b6033546001600160a01b031633146107185760405162461bcd60e51b815260040161062e90614e20565b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a49190614da1565b156107c15760405162461bcd60e51b815260040161062e90614dc3565b60335489906001600160401b03600160a01b9091048116908216116107f85760405162461bcd60e51b815260040161062e90614eb7565b603454600160401b900460ff166108705760405162461bcd60e51b815260206004820152603660248201527f456967656e506f642e686173456e61626c656452657374616b696e673a2072656044820152751cdd185ada5b99c81a5cc81b9bdd08195b98589b195960521b606482015260840161062e565b868514801561087e57508483145b61090e5760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a40161062e565b42610924613f486001600160401b038d166146fb565b10156109ad5760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a40161062e565b60405163d1c64cc960e01b81526001600160401b038b166004820152610a56907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa158015610a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a429190614f52565b8a35610a5160208d018d614f6b565b611c99565b6000805b88811015610afa57610adc8c8c358c8c85818110610a7a57610a7a614fb1565b9050602002016020810190610a8f9190614fc7565b8b8b86818110610aa157610aa1614fb1565b9050602002810190610ab39190614f6b565b8b8b88818110610ac557610ac5614fb1565b9050602002810190610ad79190614fee565b611e21565b610ae690836146fb565b915080610af281615037565b915050610a5a565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b158015610b6a57600080fd5b505af1158015610b7e573d6000803e3d6000fd5b505050505050505050505050505050565b610bb76040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610c2257610c226148a5565b6002811115610c3357610c336148a5565b90525092915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c845760405162461bcd60e51b815260040161062e90615052565b346801bc16d674ec80000014610d105760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a40161062e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008787610d536122c6565b8888886040518863ffffffff1660e01b8152600401610d7796959493929190615124565b6000604051808303818588803b158015610d9057600080fd5b505af1158015610da4573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051610dda929190615173565b60405180910390a15050505050565b604051635ac86ab760e01b8152600360048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e759190614da1565b15610e925760405162461bcd60e51b815260040161062e90614dc3565b8684148015610ea057508382145b610f285760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f72496e646963657320616e642070726f6f6673206d757374206260648201526c0ca40e6c2daca40d8cadccee8d609b1b608482015260a40161062e565b42610f3e613f486001600160401b038c166146fb565b1015610fc05760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e76657269667942616c616e63655570646174653a207370908201527f656369666965642074696d657374616d7020697320746f6f2066617220696e206064820152631c185cdd60e21b608482015260a40161062e565b60405163d1c64cc960e01b81526001600160401b038a166004820152611064907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611031573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110559190614f52565b8735610a5160208a018a614f6b565b6000805b88811015611108576110ea8b8b8b8481811061108657611086614fb1565b905060200201602081019061109b9190614fc7565b8a358a8a868181106110af576110af614fb1565b90506020028101906110c19190615187565b8989878181106110d3576110d3614fb1565b90506020028101906110e59190614fee565b61230b565b6110f490836151a7565b91508061110081615037565b915050611068565b506033546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163c2c51c40911661114d633b9aca00856151e8565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561119357600080fd5b505af11580156111a7573d6000803e3d6000fd5b5050505050505050505050505050565b6033546001600160a01b031633146111e15760405162461bcd60e51b815260040161062e90614e20565b603454600160401b900460ff161561120b5760405162461bcd60e51b815260040161062e90614e68565b603354611220906001600160a01b0316611c65565b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461126a5760405162461bcd60e51b815260040161062e90615052565b611278633b9aca0082615283565b156113025760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a40161062e565b6000611312633b9aca0083615297565b6034549091506001600160401b0390811690821611156113cb5760405162461bcd60e51b815260206004820152606260248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74477765692065786365656473207769746860648201527f6472617761626c6552657374616b6564457865637574696f6e4c617965724777608482015261656960f01b60a482015260c40161062e565b603480548291906000906113e99084906001600160401b03166152ab565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161144891815260200190565b60405180910390a261145a83836127d0565b505050565b600054610100900460ff161580801561147f5750600054600160ff909116105b806114995750303b158015611499575060005460ff166001145b6114fc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161062e565b6000805460ff19166001179055801561151f576000805461ff0019166101001790555b6001600160a01b0382166115925760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b606482015260840161062e565b603380546001600160a01b0384166001600160a01b031990911681179091556034805460ff60401b1916600160401b1790556040517fca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd90600090a28015611633576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146116615760405162461bcd60e51b815260040161062e90614e20565b81518351146116ec5760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a40161062e565b60005b835181101561175a576117488284838151811061170e5761170e614fb1565b602002602001015186848151811061172857611728614fb1565b60200260200101516001600160a01b03166127da9092919063ffffffff16565b8061175281615037565b9150506116ef565b50505050565b604051635ac86ab760e01b81526004808201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156117c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117eb9190614da1565b156118085760405162461bcd60e51b815260040161062e90614dc3565b838614801561181657508588145b801561182157508782145b611895576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e766572696679416e6450726f636573735769746864726160448201527f77616c733a20696e70757473206d7573742062652073616d65206c656e677468606482015260840161062e565b60405163d1c64cc960e01b81526001600160401b038c166004820152611939907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1c64cc990602401602060405180830381865afa158015611906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192a9190614f52565b8b35610a5160208e018e614f6b565b604080518082019091526000808252602082015260005b83811015611a395760006119f48d358d8d8581811061197157611971614fb1565b905060200281019061198391906152d3565b8c8c8681811061199557611995614fb1565b90506020028101906119a79190614f6b565b8c8c888181106119b9576119b9614fb1565b90506020028101906119cb9190614fee565b8c8c8a8181106119dd576119dd614fb1565b90506020028101906119ef9190614fee565b61282c565b80518451919250908490611a099083906146fb565b9052506020808201519084018051611a229083906151a7565b905250819050611a3181615037565b915050611950565b50805115611a68576033548151611a68916001600160a01b031690611a6390633b9aca00906152ea565b612c73565b602081015115611b1d5760335460208201516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263c2c51c4092911690611abe90633b9aca00906151e8565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611b0457600080fd5b505af1158015611b18573d6000803e3d6000fd5b505050505b505050505050505050505050565b6033546001600160a01b03163314611b555760405162461bcd60e51b815260040161062e90614e20565b603754811115611c065760405162461bcd60e51b815260206004820152606a60248201527f456967656e506f642e77697468647261776e6f6e426561636f6e436861696e4560448201527f544842616c616e63655765693a20616d6f756e74546f5769746864726177206960648201527f732067726561746572207468616e206e6f6e426561636f6e436861696e45544860848201526942616c616e636557656960b01b60a482015260c40161062e565b8060376000828254611c189190615309565b90915550506040518181526001600160a01b038316907f30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f530969060200160405180910390a26116338282612c73565b6033805467ffffffffffffffff60a01b19164263ffffffff16600160a01b021790556000603755611c968147612c73565b50565b611ca5600360206152ea565b8114611d355760405162461bcd60e51b815260206004820152605360248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a2050726f6f6620686064820152720c2e640d2dcc6dee4e4cac6e840d8cadccee8d606b1b608482015260a40161062e565b611d7a82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525088925087915060039050612d01565b61175a5760405162461bcd60e51b815260206004820152606660248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f74416761696e73744c6174657374426c6f636b526f6f743a20496e76616c696460648201527f206c617465737420626c6f636b2068656164657220726f6f74206d65726b6c6560848201526510383937b7b360d11b60a482015260c40161062e565b600080611e60848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d1992505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611ecf57611ecf6148a5565b6002811115611ee057611ee06148a5565b9052509050600081606001516002811115611efd57611efd6148a5565b14611fa65760405162461bcd60e51b815260206004820152606760248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2056616c696461746f72206d757374206265206960648201527f6e61637469766520746f2070726f7665207769746864726177616c2063726564608482015266656e7469616c7360c81b60a482015260c40161062e565b611fae6122c6565b611fb790615320565b611ff3868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d3d92505050565b1461207a5760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e766572696679436f72726563745769746864726177616c60448201527f43726564656e7469616c733a2050726f6f66206973206e6f7420666f7220746860648201526a1a5cc8115a59d95b941bd960aa1b608482015260a40161062e565b60006120b8868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d5292505050565b90506120c88a87878b8b8e612d7d565b6001606083015264ffffffffff891682526001600160401b038b811660408401527f000000000000000000000000000000000000000000000000000000000000000081169082161115612149576001600160401b037f0000000000000000000000000000000000000000000000000000000000000000166020830152612159565b6001600160401b03811660208301525b6000838152603660209081526040918290208451815492860151938601516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060850151859391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b8360028111156121f7576121f76148a5565b02179055505060405164ffffffffff8b1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a17f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df898c84602001516040516122929392919064ffffffffff9390931683526001600160401b03918216602084015216604082015260600190565b60405180910390a1633b9aca0082602001516001600160401b03166122b791906152ea565b9b9a5050505050505050505050565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b60008061231c604086013588612f9e565b9050600061235c858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d1992505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156123cb576123cb6148a5565b60028111156123dc576123dc6148a5565b815250509050896001600160401b031681604001516001600160401b0316106124935760405162461bcd60e51b815260206004820152605c60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20566160448201527f6c696461746f72732062616c616e63652068617320616c72656164792062656560648201527f6e207570646174656420666f7220746869732074696d657374616d7000000000608482015260a40161062e565b6001816060015160028111156124ab576124ab6148a5565b146125135760405162461bcd60e51b815260206004820152603260248201527f456967656e506f642e76657269667942616c616e63655570646174653a2056616044820152716c696461746f72206e6f742061637469766560701b606482015260840161062e565b61251c8a612fd3565b6001600160401b03166125618787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506130bd92505050565b6001600160401b031611612604576000836001600160401b0316116126045760405162461bcd60e51b815260206004820152604d60248201527f456967656e506f642e76657269667942616c616e63655570646174653a20766160448201527f6c696461746f7220697320776974686472617761626c6520627574206861732060648201526c3737ba103bb4ba34323930bbb760991b608482015260a40161062e565b61261d88878761261760208c018c614f6b565b8e612d7d565b6126368860408901356126308a80614f6b565b8d6130d5565b602081015160006001600160401b037f00000000000000000000000000000000000000000000000000000000000000008116908616111561269857507f000000000000000000000000000000000000000000000000000000000000000061269b565b50835b6001600160401b0380821660208086019182528e831660408088019182526000898152603690935290912086518154935192518516600160801b0267ffffffffffffffff60801b19938616600160401b026001600160801b031990951691909516179290921790811683178255606086015186939091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115612743576127436148a5565b0217905550905050816001600160401b0316816001600160401b0316146127c1576040805164ffffffffff8d1681526001600160401b038e8116602083015283168183015290517f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df9181900360600190a16127be818361323e565b95505b50505050509695505050505050565b611633828261325d565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261145a908490613376565b604080518082019091526000808252602082015261285161284c896153b3565b613448565b6033546001600160401b03600160a01b9091048116908216116128865760405162461bcd60e51b815260040161062e90614eb7565b600061289461284c8b6153b3565b905060006128d4888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d1992505050565b905060008082815260366020526040902054600160c01b900460ff166002811115612901576129016148a5565b14156129b85760405162461bcd60e51b815260206004820152607460248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a2056616c696461746f72206e657665722070726f76656e20746f2060648201527f68617665207769746864726177616c2063726564656e7469616c7320706f696e6084820152731d1959081d1bc81d1a1a5cc818dbdb9d1c9858dd60621b60a482015260c40161062e565b60008181526035602090815260408083206001600160401b038616845290915290205460ff1615612a775760405162461bcd60e51b815260206004820152605b60248201527f456967656e506f642e5f766572696679416e6450726f6365737357697468647260448201527f6177616c3a207769746864726177616c2068617320616c72656164792062656560648201527f6e2070726f76656e20666f7220746869732074696d657374616d700000000000608482015260a40161062e565b60008181526035602090815260408083206001600160401b03861684529091529020805460ff19166001179055612ab08c87878e613458565b6000612aee878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613e4092505050565b9050612afe8d8a8a8e8e86612d7d565b6000612b3c888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613e5892505050565b9050612b7a8a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506130bd92505050565b6001600160401b0316612b94612b8f8f6153b3565b613e70565b6001600160401b031610612c4c57603354600084815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352612c4193869388938a936001600160a01b03909316928892916060830190600160c01b900460ff166002811115612c2857612c286148a5565b6002811115612c3957612c396148a5565b905250613e82565b955050505050612c66565b603354612c4190839086906001600160a01b031684614093565b5098975050505050505050565b603354604051633036cd5360e21b81526001600160a01b03918216600482015283821660248201527f00000000000000000000000000000000000000000000000000000000000000009091169063c0db354c9083906044016000604051808303818588803b158015612ce457600080fd5b505af1158015612cf8573d6000803e3d6000fd5b50505050505050565b600083612d0f868585614171565b1495945050505050565b600081600081518110612d2e57612d2e614fb1565b60200260200101519050919050565b600081600181518110612d2e57612d2e614fb1565b6000612d7782600281518110612d6a57612d6a614fb1565b60200260200101516142bd565b92915050565b612d89600360026155d3565b8414612e025760405162461bcd60e51b815260206004820152604e602482015260008051602061573f83398151915260448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a40161062e565b6005612e10602860016146fb565b612e1a91906146fb565b612e259060206152ea565b8214612e935760405162461bcd60e51b8152602060048201526043602482015260008051602061573f83398151915260448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a40161062e565b600064ffffffffff8216612ea9602860016146fb565b600b901b1790506000612eee87878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061432492505050565b9050612f3485858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250859150869050612d01565b612f945760405162461bcd60e51b815260206004820152603d602482015260008051602061573f83398151915260448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f66000000606482015260840161062e565b5050505050505050565b600080612fac6004846155df565b612fb7906040615603565b64ffffffffff169050612fcb84821b6142bd565b949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316826001600160401b0316101561307d5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f642e5f74696d657374616d70546f45706f63683a2074696d6560448201527f7374616d70206973206265666f72652067656e65736973000000000000000000606482015260840161062e565b613089600c6020615630565b6130b37f0000000000000000000000000000000000000000000000000000000000000000846152ab565b612d779190615656565b6000612d7782600781518110612d6a57612d6a614fb1565b60056130e3602660016146fb565b6130ed91906146fb565b6130f89060206152ea565b82146131685760405162461bcd60e51b81526020600482015260446024820181905260008051602061573f833981519152908201527f7242616c616e63653a2050726f6f662068617320696e636f7272656374206c656064820152630dccee8d60e31b608482015260a40161062e565b600061317560048361567c565b64ffffffffff1690508061318b602660016146fb565b600c901b1790506131d684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250899150859050612d01565b6132365760405162461bcd60e51b815260206004820152603e602482015260008051602061573f83398151915260448201527f7242616c616e63653a20496e76616c6964206d65726b6c652070726f6f660000606482015260840161062e565b505050505050565b60006132566001600160401b03808416908516615694565b9392505050565b804710156132ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161062e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146132fa576040519150601f19603f3d011682016040523d82523d6000602084013e6132ff565b606091505b505090508061145a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161062e565b60006133cb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145d19092919063ffffffff16565b80519091501561145a57808060200190518101906133e99190614da1565b61145a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161062e565b6000612d778261014001516142bd565b6134636002806155d3565b82146134d75760405162461bcd60e51b8152602060048201526049602482015260008051602061575f83398151915260448201527f616c3a207769746864726177616c4669656c64732068617320696e636f7272656064820152680c6e840d8cadccee8d60bb1b608482015260a40161062e565b6134e3600d60026155d3565b6134f360c0830160a084016156d3565b6001600160401b03161061355d5760405162461bcd60e51b815260206004820152603f602482015260008051602061575f83398151915260448201527f616c3a20626c6f636b526f6f74496e64657820697320746f6f206c6172676500606482015260840161062e565b613569600460026155d3565b61357a610100830160e084016156d3565b6001600160401b0316106135e6576040805162461bcd60e51b815260206004820152602481019190915260008051602061575f83398151915260448201527f616c3a207769746864726177616c496e64657820697320746f6f206c61726765606482015260840161062e565b6135f2601860026155d3565b61360260e0830160c084016156d3565b6001600160401b03161061367c5760405162461bcd60e51b8152602060048201526047602482015260008051602061575f83398151915260448201527f616c3a20686973746f726963616c53756d6d617279496e64657820697320746f6064820152666f206c6172676560c81b608482015260a40161062e565b6136876004806146fb565b6136929060016146fb565b61369d9060206152ea565b6136a78280614f6b565b90501461371b5760405162461bcd60e51b8152602060048201526048602482015260008051602061575f83398151915260448201527f616c3a207769746864726177616c50726f6f662068617320696e636f727265636064820152670e840d8cadccee8d60c31b608482015260a40161062e565b613727600460036146fb565b6137329060206152ea565b61373f6040830183614f6b565b9050146137b95760405162461bcd60e51b815260206004820152604e602482015260008051602061575f83398151915260448201527f616c3a20657865637574696f6e5061796c6f616450726f6f662068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a40161062e565b6137c5600360206152ea565b6137d26020830183614f6b565b9050146138405760405162461bcd60e51b8152602060048201526042602482015260008051602061575f83398151915260448201527f616c3a20736c6f7450726f6f662068617320696e636f7272656374206c656e676064820152610e8d60f31b608482015260a40161062e565b61384c600460206152ea565b6138596060830183614f6b565b9050146138cc5760405162461bcd60e51b8152602060048201526047602482015260008051602061575f83398151915260448201527f616c3a2074696d657374616d7050726f6f662068617320696e636f7272656374606482015266040d8cadccee8d60cb1b608482015260a40161062e565b600d6138da601860016146fb565b6138e59060056146fb565b6138f09060016146fb565b6138fa91906146fb565b6139059060206152ea565b6139126080830183614f6b565b90501461399b5760405162461bcd60e51b8152602060048201526058602482015260008051602061575f83398151915260448201527f616c3a20686973746f726963616c53756d6d617279426c6f636b526f6f74507260648201527f6f6f662068617320696e636f7272656374206c656e6774680000000000000000608482015260a40161062e565b60006139ad60c0830160a084016156d3565b6001600160401b031660006139c4600d60016146fb565b6139d460e0860160c087016156d3565b6001600160401b0316901b600d6139ed601860016146fb565b6139f89060016146fb565b613a0291906146fb565b601b901b1717179050613a5d613a1b6080840184614f6b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250899250505061010085013584612d01565b613ad05760405162461bcd60e51b815260206004820152604a602482015260008051602061575f83398151915260448201527f616c3a20496e76616c696420686973746f726963616c73756d6d617279206d656064820152693935b63290383937b7b360b11b608482015260a40161062e565b613b27613ae06020840184614f6b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250610100880135935061012088013592509050612d01565b613b875760405162461bcd60e51b815260206004820152603d602482015260008051602061575f83398151915260448201527f616c3a20496e76616c696420736c6f74206d65726b6c652070726f6f66000000606482015260840161062e565b6049613bdf613b996040850185614f6b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061010085013561016086013584612d01565b613c515760405162461bcd60e51b8152602060048201526049602482015260008051602061575f83398151915260448201527f616c3a20496e76616c696420657865637574696f6e5061796c6f6164206d657260648201526835b63290383937b7b360b91b608482015260a40161062e565b50613ca9613c626060840184614f6b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101608401356101408501356009612d01565b613d175760405162461bcd60e51b81526020600482015260446024820181905260008051602061575f833981519152908201527f616c3a20496e76616c696420626c6f636b4e756d626572206d65726b6c6520706064820152633937b7b360e11b608482015260a40161062e565b6000613d2a610100840160e085016156d3565b6001600160401b0316613d3f600460016146fb565b600e901b1790506000613d8486868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061432492505050565b9050613dd4613d938580614f6b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101608601358385612d01565b612cf85760405162461bcd60e51b8152602060048201526043602482015260008051602061575f83398151915260448201527f616c3a20496e76616c6964207769746864726177616c206d65726b6c6520707260648201526237b7b360e91b608482015260a40161062e565b6000612d7782600181518110612d6a57612d6a614fb1565b6000612d7782600381518110612d6a57612d6a614fb1565b600060206130b38361012001516142bd565b604080518082019091526000808252602082015260007f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316846001600160401b03161115613ef957507f0000000000000000000000000000000000000000000000000000000000000000613efc565b50825b6040805180820190915260008082526020820152613f1a82866152ab565b6001600160401b039081168252603480548492600091613f3c918591166156ee565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550613f6e82856020015161323e565b602082810191909152600090850152600260608501819052506000888152603660209081526040918290208651815492880151938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060870151879391929091839160ff60c01b191668ffffffffffffffffff60801b1990911617600160c01b836002811115614025576140256148a5565b0217905550506040805164ffffffffff8c1681526001600160401b038a8116602083015288168183015290516001600160a01b03891692507fb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a09639181900360600190a298975050505050505050565b60408051808201909152600080825260208201526040805164ffffffffff871681526001600160401b0380871660208301528416918101919091526001600160a01b038416907f8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e9060600160405180910390a2603880548391906000906141249084906001600160401b03166156ee565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506040518060400160405280836001600160401b0316815260200160008152509050949350505050565b6000835160001415801561419057506020845161418e9190615283565b155b61421f5760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a40161062e565b604080516020808201909252848152905b855181116142b357614243600285615283565b614276578151600052808601516020526020826040600060026107d05a03fa61426b57600080fd5b6002840493506142a1565b8086015160005281516020526020826040600060026107d05a03fa61429a57600080fd5b6002840493505b6142ac6020826146fb565b9050614230565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b600080600283516143359190615297565b90506000816001600160401b0381111561435157614351614ad8565b60405190808252806020026020018201604052801561437a578160200160208202803683370190505b50905060005b828110156144815760028561439583836152ea565b815181106143a5576143a5614fb1565b6020026020010151868360026143bb91906152ea565b6143c69060016146fb565b815181106143d6576143d6614fb1565b60200260200101516040516020016143f8929190918252602082015260400190565b60408051601f198184030181529082905261441291615719565b602060405180830381855afa15801561442f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906144529190614f52565b82828151811061446457614464614fb1565b60209081029190910101528061447981615037565b915050614380565b5061448d600283615297565b91505b81156145ad5760005b8281101561459a576002826144ae83836152ea565b815181106144be576144be614fb1565b6020026020010151838360026144d491906152ea565b6144df9060016146fb565b815181106144ef576144ef614fb1565b6020026020010151604051602001614511929190918252602082015260400190565b60408051601f198184030181529082905261452b91615719565b602060405180830381855afa158015614548573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061456b9190614f52565b82828151811061457d5761457d614fb1565b60209081029190910101528061459281615037565b915050614499565b506145a6600283615297565b9150614490565b806000815181106145c0576145c0614fb1565b602002602001015192505050919050565b6060612fcb8484600085856001600160a01b0385163b6146335760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161062e565b600080866001600160a01b0316858760405161464f9190615719565b60006040518083038185875af1925050503d806000811461468c576040519150601f19603f3d011682016040523d82523d6000602084013e614691565b606091505b50915091506146a18282866146ac565b979650505050505050565b606083156146bb575081613256565b8251156146cb5782518084602001fd5b8160405162461bcd60e51b815260040161062e919061572b565b634e487b7160e01b600052601160045260246000fd5b6000821982111561470e5761470e6146e5565b500190565b80356001600160401b038116811461472a57600080fd5b919050565b6000806040838503121561474257600080fd5b8235915061475260208401614713565b90509250929050565b60006040828403121561476d57600080fd5b50919050565b60008083601f84011261478557600080fd5b5081356001600160401b0381111561479c57600080fd5b6020830191508360208260051b85010111156147b757600080fd5b9250929050565b60008060008060008060008060a0898b0312156147da57600080fd5b6147e389614713565b975060208901356001600160401b03808211156147ff57600080fd5b61480b8c838d0161475b565b985060408b013591508082111561482157600080fd5b61482d8c838d01614773565b909850965060608b013591508082111561484657600080fd5b6148528c838d01614773565b909650945060808b013591508082111561486b57600080fd5b506148788b828c01614773565b999c989b5096995094979396929594505050565b60006020828403121561489e57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b600381106148d957634e487b7160e01b600052602160045260246000fd5b9052565b60006080820190506001600160401b0380845116835280602085015116602084015280604085015116604084015250606083015161491e60608401826148bb565b5092915050565b60208101612d7782846148bb565b60008083601f84011261494557600080fd5b5081356001600160401b0381111561495c57600080fd5b6020830191508360208285010111156147b757600080fd5b60008060008060006060868803121561498c57600080fd5b85356001600160401b03808211156149a357600080fd5b6149af89838a01614933565b909750955060208801359150808211156149c857600080fd5b506149d588828901614933565b96999598509660400135949350505050565b60008060008060008060008060a0898b031215614a0357600080fd5b614a0c89614713565b975060208901356001600160401b0380821115614a2857600080fd5b614a348c838d01614773565b909950975060408b0135915080821115614a4d57600080fd5b614a598c838d0161475b565b965060608b013591508082111561484657600080fd5b6001600160a01b0381168114611c9657600080fd5b803561472a81614a6f565b60008060408385031215614aa257600080fd5b8235614aad81614a6f565b946020939093013593505050565b600060208284031215614acd57600080fd5b813561325681614a6f565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715614b1157614b11614ad8565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614b3f57614b3f614ad8565b604052919050565b60006001600160401b03821115614b6057614b60614ad8565b5060051b60200190565b600082601f830112614b7b57600080fd5b81356020614b90614b8b83614b47565b614b17565b82815260059290921b84018101918181019086841115614baf57600080fd5b8286015b84811015614bca5780358352918301918301614bb3565b509695505050505050565b600080600060608486031215614bea57600080fd5b83356001600160401b0380821115614c0157600080fd5b818601915086601f830112614c1557600080fd5b81356020614c25614b8b83614b47565b82815260059290921b8401810191818101908a841115614c4457600080fd5b948201945b83861015614c6b578535614c5c81614a6f565b82529482019490820190614c49565b97505087013592505080821115614c8157600080fd5b50614c8e86828701614b6a565b925050614c9d60408501614a84565b90509250925092565b60008060008060008060008060008060c08b8d031215614cc557600080fd5b614cce8b614713565b995060208b01356001600160401b0380821115614cea57600080fd5b614cf68e838f0161475b565b9a5060408d0135915080821115614d0c57600080fd5b614d188e838f01614773565b909a50985060608d0135915080821115614d3157600080fd5b614d3d8e838f01614773565b909850965060808d0135915080821115614d5657600080fd5b614d628e838f01614773565b909650945060a08d0135915080821115614d7b57600080fd5b50614d888d828e01614773565b915080935050809150509295989b9194979a5092959850565b600060208284031215614db357600080fd5b8151801515811461325657600080fd5b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b6020808252602f908201527f456967656e506f642e6861734e6576657252657374616b65643a20726573746160408201526e1ada5b99c81a5cc8195b98589b1959608a1b606082015260800190565b6020808252606f908201527f456967656e506f642e70726f6f664973466f7256616c696454696d657374616d60408201527f703a20626561636f6e20636861696e2070726f6f66206d75737420626520666f60608201527f722074696d657374616d70206166746572206d6f7374526563656e745769746860808201526e064726177616c54696d657374616d7608c1b60a082015260c00190565b600060208284031215614f6457600080fd5b5051919050565b6000808335601e19843603018112614f8257600080fd5b8301803591506001600160401b03821115614f9c57600080fd5b6020019150368190038213156147b757600080fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215614fd957600080fd5b813564ffffffffff8116811461325657600080fd5b6000808335601e1984360301811261500557600080fd5b8301803591506001600160401b0382111561501f57600080fd5b6020019150600581901b36038213156147b757600080fd5b600060001982141561504b5761504b6146e5565b5060010190565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60005b838110156150e75781810151838201526020016150cf565b8381111561175a5750506000910152565b600081518084526151108160208601602086016150cc565b601f01601f19169290920160200192915050565b60808152600061513860808301888a6150a3565b828103602084015261514a81886150f8565b9050828103604084015261515f8186886150a3565b915050826060830152979650505050505050565b602081526000612fcb6020830184866150a3565b60008235605e1983360301811261519d57600080fd5b9190910192915050565b600080821280156001600160ff1b03849003851316156151c9576151c96146e5565b600160ff1b83900384128116156151e2576151e26146e5565b50500190565b60006001600160ff1b038184138284138082168684048611161561520e5761520e6146e5565b600160ff1b600087128281168783058912161561522d5761522d6146e5565b60008712925087820587128484161615615249576152496146e5565b8785058712818416161561525f5761525f6146e5565b505050929093029392505050565b634e487b7160e01b600052601260045260246000fd5b6000826152925761529261526d565b500690565b6000826152a6576152a661526d565b500490565b60006001600160401b03838116908316818110156152cb576152cb6146e5565b039392505050565b6000823561017e1983360301811261519d57600080fd5b6000816000190483118215151615615304576153046146e5565b500290565b60008282101561531b5761531b6146e5565b500390565b8051602080830151919081101561476d5760001960209190910360031b1b16919050565b600082601f83011261535557600080fd5b81356001600160401b0381111561536e5761536e614ad8565b615381601f8201601f1916602001614b17565b81815284602083860101111561539657600080fd5b816020850160208301376000918101602001919091529392505050565b600061018082360312156153c657600080fd5b6153ce614aee565b82356001600160401b03808211156153e557600080fd5b6153f136838701615344565b8352602085013591508082111561540757600080fd5b61541336838701615344565b6020840152604085013591508082111561542c57600080fd5b61543836838701615344565b6040840152606085013591508082111561545157600080fd5b61545d36838701615344565b6060840152608085013591508082111561547657600080fd5b5061548336828601615344565b60808301525061549560a08401614713565b60a08201526154a660c08401614713565b60c08201526154b760e08401614713565b60e082015261010083810135908201526101208084013590820152610140808401359082015261016092830135928101929092525090565b600181815b8085111561552a578160001904821115615510576155106146e5565b8085161561551d57918102915b93841c93908002906154f4565b509250929050565b60008261554157506001612d77565b8161554e57506000612d77565b8160018114615564576002811461556e5761558a565b6001915050612d77565b60ff84111561557f5761557f6146e5565b50506001821b612d77565b5060208310610133831016604e8410600b84101617156155ad575081810a612d77565b6155b783836154ef565b80600019048211156155cb576155cb6146e5565b029392505050565b60006132568383615532565b600064ffffffffff808416806155f7576155f761526d565b92169190910692915050565b600064ffffffffff80831681851681830481118215151615615627576156276146e5565b02949350505050565b60006001600160401b0380831681851681830481118215151615615627576156276146e5565b60006001600160401b03808416806156705761567061526d565b92169190910492915050565b600064ffffffffff808416806156705761567061526d565b60008083128015600160ff1b8501841216156156b2576156b26146e5565b6001600160ff1b03840183138116156156cd576156cd6146e5565b50500390565b6000602082840312156156e557600080fd5b61325682614713565b60006001600160401b03808316818516808303821115615710576157106146e5565b01949350505050565b6000825161519d8184602087016150cc565b60208152600061325660208301846150f856fe426561636f6e436861696e50726f6f66732e76657269667956616c696461746f426561636f6e436861696e50726f6f66732e7665726966795769746864726177a2646970667358221220adf6c760b4f63409f1c31e44c4973f342aba42b062831447260fa528498fa3d764736f6c634300080c0033", +} + +// ContractEigenPodABI is the input ABI used to generate the binding from. +// Deprecated: Use ContractEigenPodMetaData.ABI instead. +var ContractEigenPodABI = ContractEigenPodMetaData.ABI + +// ContractEigenPodBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ContractEigenPodMetaData.Bin instead. +var ContractEigenPodBin = ContractEigenPodMetaData.Bin + +// DeployContractEigenPod deploys a new Ethereum contract, binding an instance of ContractEigenPod to it. +func DeployContractEigenPod(auth *bind.TransactOpts, backend bind.ContractBackend, _ethPOS common.Address, _delayedWithdrawalRouter common.Address, _eigenPodManager common.Address, _MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR uint64, _GENESIS_TIME uint64) (common.Address, *types.Transaction, *ContractEigenPod, error) { + parsed, err := ContractEigenPodMetaData.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(ContractEigenPodBin), backend, _ethPOS, _delayedWithdrawalRouter, _eigenPodManager, _MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR, _GENESIS_TIME) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ContractEigenPod{ContractEigenPodCaller: ContractEigenPodCaller{contract: contract}, ContractEigenPodTransactor: ContractEigenPodTransactor{contract: contract}, ContractEigenPodFilterer: ContractEigenPodFilterer{contract: contract}}, nil +} + +// ContractEigenPodMethods is an auto generated interface around an Ethereum contract. +type ContractEigenPodMethods interface { + ContractEigenPodCalls + ContractEigenPodTransacts + ContractEigenPodFilters +} + +// ContractEigenPodCalls is an auto generated interface that defines the call methods available for an Ethereum contract. +type ContractEigenPodCalls interface { + GENESISTIME(opts *bind.CallOpts) (uint64, error) + + MAXRESTAKEDBALANCEGWEIPERVALIDATOR(opts *bind.CallOpts) (uint64, error) + + DelayedWithdrawalRouter(opts *bind.CallOpts) (common.Address, error) + + EigenPodManager(opts *bind.CallOpts) (common.Address, error) + + EthPOS(opts *bind.CallOpts) (common.Address, error) + + HasRestaked(opts *bind.CallOpts) (bool, error) + + MostRecentWithdrawalTimestamp(opts *bind.CallOpts) (uint64, error) + + NonBeaconChainETHBalanceWei(opts *bind.CallOpts) (*big.Int, error) + + PodOwner(opts *bind.CallOpts) (common.Address, error) + + ProvenWithdrawal(opts *bind.CallOpts, arg0 [32]byte, arg1 uint64) (bool, error) + + SumOfPartialWithdrawalsClaimedGwei(opts *bind.CallOpts) (uint64, error) + + ValidatorPubkeyHashToInfo(opts *bind.CallOpts, validatorPubkeyHash [32]byte) (IEigenPodValidatorInfo, error) + + ValidatorStatus(opts *bind.CallOpts, pubkeyHash [32]byte) (uint8, error) + + WithdrawableRestakedExecutionLayerGwei(opts *bind.CallOpts) (uint64, error) +} + +// ContractEigenPodTransacts is an auto generated interface that defines the transact methods available for an Ethereum contract. +type ContractEigenPodTransacts interface { + ActivateRestaking(opts *bind.TransactOpts) (*types.Transaction, error) + + Initialize(opts *bind.TransactOpts, _podOwner common.Address) (*types.Transaction, error) + + RecoverTokens(opts *bind.TransactOpts, tokenList []common.Address, amountsToWithdraw []*big.Int, recipient common.Address) (*types.Transaction, error) + + Stake(opts *bind.TransactOpts, pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) + + VerifyAndProcessWithdrawals(opts *bind.TransactOpts, oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, withdrawalProofs []BeaconChainProofsWithdrawalProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte, withdrawalFields [][][32]byte) (*types.Transaction, error) + + VerifyBalanceUpdates(opts *bind.TransactOpts, oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, balanceUpdateProofs []BeaconChainProofsBalanceUpdateProof, validatorFields [][][32]byte) (*types.Transaction, error) + + VerifyWithdrawalCredentials(opts *bind.TransactOpts, oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, validatorIndices []*big.Int, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) + + WithdrawBeforeRestaking(opts *bind.TransactOpts) (*types.Transaction, error) + + WithdrawNonBeaconChainETHBalanceWei(opts *bind.TransactOpts, recipient common.Address, amountToWithdraw *big.Int) (*types.Transaction, error) + + WithdrawRestakedBeaconChainETH(opts *bind.TransactOpts, recipient common.Address, amountWei *big.Int) (*types.Transaction, error) +} + +// ContractEigenPodFilterer is an auto generated interface that defines the log filtering methods available for an Ethereum contract. +type ContractEigenPodFilters interface { + FilterEigenPodStaked(opts *bind.FilterOpts) (*ContractEigenPodEigenPodStakedIterator, error) + WatchEigenPodStaked(opts *bind.WatchOpts, sink chan<- *ContractEigenPodEigenPodStaked) (event.Subscription, error) + ParseEigenPodStaked(log types.Log) (*ContractEigenPodEigenPodStaked, error) + + FilterFullWithdrawalRedeemed(opts *bind.FilterOpts, recipient []common.Address) (*ContractEigenPodFullWithdrawalRedeemedIterator, error) + WatchFullWithdrawalRedeemed(opts *bind.WatchOpts, sink chan<- *ContractEigenPodFullWithdrawalRedeemed, recipient []common.Address) (event.Subscription, error) + ParseFullWithdrawalRedeemed(log types.Log) (*ContractEigenPodFullWithdrawalRedeemed, error) + + FilterInitialized(opts *bind.FilterOpts) (*ContractEigenPodInitializedIterator, error) + WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractEigenPodInitialized) (event.Subscription, error) + ParseInitialized(log types.Log) (*ContractEigenPodInitialized, error) + + FilterNonBeaconChainETHReceived(opts *bind.FilterOpts) (*ContractEigenPodNonBeaconChainETHReceivedIterator, error) + WatchNonBeaconChainETHReceived(opts *bind.WatchOpts, sink chan<- *ContractEigenPodNonBeaconChainETHReceived) (event.Subscription, error) + ParseNonBeaconChainETHReceived(log types.Log) (*ContractEigenPodNonBeaconChainETHReceived, error) + + FilterNonBeaconChainETHWithdrawn(opts *bind.FilterOpts, recipient []common.Address) (*ContractEigenPodNonBeaconChainETHWithdrawnIterator, error) + WatchNonBeaconChainETHWithdrawn(opts *bind.WatchOpts, sink chan<- *ContractEigenPodNonBeaconChainETHWithdrawn, recipient []common.Address) (event.Subscription, error) + ParseNonBeaconChainETHWithdrawn(log types.Log) (*ContractEigenPodNonBeaconChainETHWithdrawn, error) + + FilterPartialWithdrawalRedeemed(opts *bind.FilterOpts, recipient []common.Address) (*ContractEigenPodPartialWithdrawalRedeemedIterator, error) + WatchPartialWithdrawalRedeemed(opts *bind.WatchOpts, sink chan<- *ContractEigenPodPartialWithdrawalRedeemed, recipient []common.Address) (event.Subscription, error) + ParsePartialWithdrawalRedeemed(log types.Log) (*ContractEigenPodPartialWithdrawalRedeemed, error) + + FilterRestakedBeaconChainETHWithdrawn(opts *bind.FilterOpts, recipient []common.Address) (*ContractEigenPodRestakedBeaconChainETHWithdrawnIterator, error) + WatchRestakedBeaconChainETHWithdrawn(opts *bind.WatchOpts, sink chan<- *ContractEigenPodRestakedBeaconChainETHWithdrawn, recipient []common.Address) (event.Subscription, error) + ParseRestakedBeaconChainETHWithdrawn(log types.Log) (*ContractEigenPodRestakedBeaconChainETHWithdrawn, error) + + FilterRestakingActivated(opts *bind.FilterOpts, podOwner []common.Address) (*ContractEigenPodRestakingActivatedIterator, error) + WatchRestakingActivated(opts *bind.WatchOpts, sink chan<- *ContractEigenPodRestakingActivated, podOwner []common.Address) (event.Subscription, error) + ParseRestakingActivated(log types.Log) (*ContractEigenPodRestakingActivated, error) + + FilterValidatorBalanceUpdated(opts *bind.FilterOpts) (*ContractEigenPodValidatorBalanceUpdatedIterator, error) + WatchValidatorBalanceUpdated(opts *bind.WatchOpts, sink chan<- *ContractEigenPodValidatorBalanceUpdated) (event.Subscription, error) + ParseValidatorBalanceUpdated(log types.Log) (*ContractEigenPodValidatorBalanceUpdated, error) + + FilterValidatorRestaked(opts *bind.FilterOpts) (*ContractEigenPodValidatorRestakedIterator, error) + WatchValidatorRestaked(opts *bind.WatchOpts, sink chan<- *ContractEigenPodValidatorRestaked) (event.Subscription, error) + ParseValidatorRestaked(log types.Log) (*ContractEigenPodValidatorRestaked, error) +} + +// ContractEigenPod is an auto generated Go binding around an Ethereum contract. +type ContractEigenPod struct { + ContractEigenPodCaller // Read-only binding to the contract + ContractEigenPodTransactor // Write-only binding to the contract + ContractEigenPodFilterer // Log filterer for contract events +} + +// ContractEigenPod implements the ContractEigenPodMethods interface. +var _ ContractEigenPodMethods = (*ContractEigenPod)(nil) + +// ContractEigenPodCaller is an auto generated read-only Go binding around an Ethereum contract. +type ContractEigenPodCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractEigenPodCaller implements the ContractEigenPodCalls interface. +var _ ContractEigenPodCalls = (*ContractEigenPodCaller)(nil) + +// ContractEigenPodTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ContractEigenPodTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractEigenPodTransactor implements the ContractEigenPodTransacts interface. +var _ ContractEigenPodTransacts = (*ContractEigenPodTransactor)(nil) + +// ContractEigenPodFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ContractEigenPodFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractEigenPodFilterer implements the ContractEigenPodFilters interface. +var _ ContractEigenPodFilters = (*ContractEigenPodFilterer)(nil) + +// ContractEigenPodSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ContractEigenPodSession struct { + Contract *ContractEigenPod // 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 +} + +// ContractEigenPodCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ContractEigenPodCallerSession struct { + Contract *ContractEigenPodCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ContractEigenPodTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ContractEigenPodTransactorSession struct { + Contract *ContractEigenPodTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractEigenPodRaw is an auto generated low-level Go binding around an Ethereum contract. +type ContractEigenPodRaw struct { + Contract *ContractEigenPod // Generic contract binding to access the raw methods on +} + +// ContractEigenPodCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ContractEigenPodCallerRaw struct { + Contract *ContractEigenPodCaller // Generic read-only contract binding to access the raw methods on +} + +// ContractEigenPodTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ContractEigenPodTransactorRaw struct { + Contract *ContractEigenPodTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewContractEigenPod creates a new instance of ContractEigenPod, bound to a specific deployed contract. +func NewContractEigenPod(address common.Address, backend bind.ContractBackend) (*ContractEigenPod, error) { + contract, err := bindContractEigenPod(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ContractEigenPod{ContractEigenPodCaller: ContractEigenPodCaller{contract: contract}, ContractEigenPodTransactor: ContractEigenPodTransactor{contract: contract}, ContractEigenPodFilterer: ContractEigenPodFilterer{contract: contract}}, nil +} + +// NewContractEigenPodCaller creates a new read-only instance of ContractEigenPod, bound to a specific deployed contract. +func NewContractEigenPodCaller(address common.Address, caller bind.ContractCaller) (*ContractEigenPodCaller, error) { + contract, err := bindContractEigenPod(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ContractEigenPodCaller{contract: contract}, nil +} + +// NewContractEigenPodTransactor creates a new write-only instance of ContractEigenPod, bound to a specific deployed contract. +func NewContractEigenPodTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractEigenPodTransactor, error) { + contract, err := bindContractEigenPod(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ContractEigenPodTransactor{contract: contract}, nil +} + +// NewContractEigenPodFilterer creates a new log filterer instance of ContractEigenPod, bound to a specific deployed contract. +func NewContractEigenPodFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractEigenPodFilterer, error) { + contract, err := bindContractEigenPod(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ContractEigenPodFilterer{contract: contract}, nil +} + +// bindContractEigenPod binds a generic wrapper to an already deployed contract. +func bindContractEigenPod(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ContractEigenPodMetaData.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 (_ContractEigenPod *ContractEigenPodRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractEigenPod.Contract.ContractEigenPodCaller.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 (_ContractEigenPod *ContractEigenPodRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractEigenPod.Contract.ContractEigenPodTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractEigenPod *ContractEigenPodRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractEigenPod.Contract.ContractEigenPodTransactor.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 (_ContractEigenPod *ContractEigenPodCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractEigenPod.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 (_ContractEigenPod *ContractEigenPodTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractEigenPod.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractEigenPod *ContractEigenPodTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractEigenPod.Contract.contract.Transact(opts, method, params...) +} + +// GENESISTIME is a free data retrieval call binding the contract method 0xf2882461. +// +// Solidity: function GENESIS_TIME() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodCaller) GENESISTIME(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "GENESIS_TIME") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GENESISTIME is a free data retrieval call binding the contract method 0xf2882461. +// +// Solidity: function GENESIS_TIME() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodSession) GENESISTIME() (uint64, error) { + return _ContractEigenPod.Contract.GENESISTIME(&_ContractEigenPod.CallOpts) +} + +// GENESISTIME is a free data retrieval call binding the contract method 0xf2882461. +// +// Solidity: function GENESIS_TIME() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodCallerSession) GENESISTIME() (uint64, error) { + return _ContractEigenPod.Contract.GENESISTIME(&_ContractEigenPod.CallOpts) +} + +// MAXRESTAKEDBALANCEGWEIPERVALIDATOR is a free data retrieval call binding the contract method 0x1d905d5c. +// +// Solidity: function MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodCaller) MAXRESTAKEDBALANCEGWEIPERVALIDATOR(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MAXRESTAKEDBALANCEGWEIPERVALIDATOR is a free data retrieval call binding the contract method 0x1d905d5c. +// +// Solidity: function MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodSession) MAXRESTAKEDBALANCEGWEIPERVALIDATOR() (uint64, error) { + return _ContractEigenPod.Contract.MAXRESTAKEDBALANCEGWEIPERVALIDATOR(&_ContractEigenPod.CallOpts) +} + +// MAXRESTAKEDBALANCEGWEIPERVALIDATOR is a free data retrieval call binding the contract method 0x1d905d5c. +// +// Solidity: function MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodCallerSession) MAXRESTAKEDBALANCEGWEIPERVALIDATOR() (uint64, error) { + return _ContractEigenPod.Contract.MAXRESTAKEDBALANCEGWEIPERVALIDATOR(&_ContractEigenPod.CallOpts) +} + +// DelayedWithdrawalRouter is a free data retrieval call binding the contract method 0x1a5057be. +// +// Solidity: function delayedWithdrawalRouter() view returns(address) +func (_ContractEigenPod *ContractEigenPodCaller) DelayedWithdrawalRouter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "delayedWithdrawalRouter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DelayedWithdrawalRouter is a free data retrieval call binding the contract method 0x1a5057be. +// +// Solidity: function delayedWithdrawalRouter() view returns(address) +func (_ContractEigenPod *ContractEigenPodSession) DelayedWithdrawalRouter() (common.Address, error) { + return _ContractEigenPod.Contract.DelayedWithdrawalRouter(&_ContractEigenPod.CallOpts) +} + +// DelayedWithdrawalRouter is a free data retrieval call binding the contract method 0x1a5057be. +// +// Solidity: function delayedWithdrawalRouter() view returns(address) +func (_ContractEigenPod *ContractEigenPodCallerSession) DelayedWithdrawalRouter() (common.Address, error) { + return _ContractEigenPod.Contract.DelayedWithdrawalRouter(&_ContractEigenPod.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_ContractEigenPod *ContractEigenPodCaller) EigenPodManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "eigenPodManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_ContractEigenPod *ContractEigenPodSession) EigenPodManager() (common.Address, error) { + return _ContractEigenPod.Contract.EigenPodManager(&_ContractEigenPod.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_ContractEigenPod *ContractEigenPodCallerSession) EigenPodManager() (common.Address, error) { + return _ContractEigenPod.Contract.EigenPodManager(&_ContractEigenPod.CallOpts) +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_ContractEigenPod *ContractEigenPodCaller) EthPOS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "ethPOS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_ContractEigenPod *ContractEigenPodSession) EthPOS() (common.Address, error) { + return _ContractEigenPod.Contract.EthPOS(&_ContractEigenPod.CallOpts) +} + +// EthPOS is a free data retrieval call binding the contract method 0x74cdd798. +// +// Solidity: function ethPOS() view returns(address) +func (_ContractEigenPod *ContractEigenPodCallerSession) EthPOS() (common.Address, error) { + return _ContractEigenPod.Contract.EthPOS(&_ContractEigenPod.CallOpts) +} + +// HasRestaked is a free data retrieval call binding the contract method 0x3106ab53. +// +// Solidity: function hasRestaked() view returns(bool) +func (_ContractEigenPod *ContractEigenPodCaller) HasRestaked(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "hasRestaked") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRestaked is a free data retrieval call binding the contract method 0x3106ab53. +// +// Solidity: function hasRestaked() view returns(bool) +func (_ContractEigenPod *ContractEigenPodSession) HasRestaked() (bool, error) { + return _ContractEigenPod.Contract.HasRestaked(&_ContractEigenPod.CallOpts) +} + +// HasRestaked is a free data retrieval call binding the contract method 0x3106ab53. +// +// Solidity: function hasRestaked() view returns(bool) +func (_ContractEigenPod *ContractEigenPodCallerSession) HasRestaked() (bool, error) { + return _ContractEigenPod.Contract.HasRestaked(&_ContractEigenPod.CallOpts) +} + +// MostRecentWithdrawalTimestamp is a free data retrieval call binding the contract method 0x87e0d289. +// +// Solidity: function mostRecentWithdrawalTimestamp() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodCaller) MostRecentWithdrawalTimestamp(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "mostRecentWithdrawalTimestamp") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MostRecentWithdrawalTimestamp is a free data retrieval call binding the contract method 0x87e0d289. +// +// Solidity: function mostRecentWithdrawalTimestamp() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodSession) MostRecentWithdrawalTimestamp() (uint64, error) { + return _ContractEigenPod.Contract.MostRecentWithdrawalTimestamp(&_ContractEigenPod.CallOpts) +} + +// MostRecentWithdrawalTimestamp is a free data retrieval call binding the contract method 0x87e0d289. +// +// Solidity: function mostRecentWithdrawalTimestamp() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodCallerSession) MostRecentWithdrawalTimestamp() (uint64, error) { + return _ContractEigenPod.Contract.MostRecentWithdrawalTimestamp(&_ContractEigenPod.CallOpts) +} + +// NonBeaconChainETHBalanceWei is a free data retrieval call binding the contract method 0xfe80b087. +// +// Solidity: function nonBeaconChainETHBalanceWei() view returns(uint256) +func (_ContractEigenPod *ContractEigenPodCaller) NonBeaconChainETHBalanceWei(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "nonBeaconChainETHBalanceWei") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NonBeaconChainETHBalanceWei is a free data retrieval call binding the contract method 0xfe80b087. +// +// Solidity: function nonBeaconChainETHBalanceWei() view returns(uint256) +func (_ContractEigenPod *ContractEigenPodSession) NonBeaconChainETHBalanceWei() (*big.Int, error) { + return _ContractEigenPod.Contract.NonBeaconChainETHBalanceWei(&_ContractEigenPod.CallOpts) +} + +// NonBeaconChainETHBalanceWei is a free data retrieval call binding the contract method 0xfe80b087. +// +// Solidity: function nonBeaconChainETHBalanceWei() view returns(uint256) +func (_ContractEigenPod *ContractEigenPodCallerSession) NonBeaconChainETHBalanceWei() (*big.Int, error) { + return _ContractEigenPod.Contract.NonBeaconChainETHBalanceWei(&_ContractEigenPod.CallOpts) +} + +// PodOwner is a free data retrieval call binding the contract method 0x0b18ff66. +// +// Solidity: function podOwner() view returns(address) +func (_ContractEigenPod *ContractEigenPodCaller) PodOwner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "podOwner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PodOwner is a free data retrieval call binding the contract method 0x0b18ff66. +// +// Solidity: function podOwner() view returns(address) +func (_ContractEigenPod *ContractEigenPodSession) PodOwner() (common.Address, error) { + return _ContractEigenPod.Contract.PodOwner(&_ContractEigenPod.CallOpts) +} + +// PodOwner is a free data retrieval call binding the contract method 0x0b18ff66. +// +// Solidity: function podOwner() view returns(address) +func (_ContractEigenPod *ContractEigenPodCallerSession) PodOwner() (common.Address, error) { + return _ContractEigenPod.Contract.PodOwner(&_ContractEigenPod.CallOpts) +} + +// ProvenWithdrawal is a free data retrieval call binding the contract method 0x34bea20a. +// +// Solidity: function provenWithdrawal(bytes32 , uint64 ) view returns(bool) +func (_ContractEigenPod *ContractEigenPodCaller) ProvenWithdrawal(opts *bind.CallOpts, arg0 [32]byte, arg1 uint64) (bool, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "provenWithdrawal", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// ProvenWithdrawal is a free data retrieval call binding the contract method 0x34bea20a. +// +// Solidity: function provenWithdrawal(bytes32 , uint64 ) view returns(bool) +func (_ContractEigenPod *ContractEigenPodSession) ProvenWithdrawal(arg0 [32]byte, arg1 uint64) (bool, error) { + return _ContractEigenPod.Contract.ProvenWithdrawal(&_ContractEigenPod.CallOpts, arg0, arg1) +} + +// ProvenWithdrawal is a free data retrieval call binding the contract method 0x34bea20a. +// +// Solidity: function provenWithdrawal(bytes32 , uint64 ) view returns(bool) +func (_ContractEigenPod *ContractEigenPodCallerSession) ProvenWithdrawal(arg0 [32]byte, arg1 uint64) (bool, error) { + return _ContractEigenPod.Contract.ProvenWithdrawal(&_ContractEigenPod.CallOpts, arg0, arg1) +} + +// SumOfPartialWithdrawalsClaimedGwei is a free data retrieval call binding the contract method 0x5d3f65b6. +// +// Solidity: function sumOfPartialWithdrawalsClaimedGwei() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodCaller) SumOfPartialWithdrawalsClaimedGwei(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "sumOfPartialWithdrawalsClaimedGwei") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// SumOfPartialWithdrawalsClaimedGwei is a free data retrieval call binding the contract method 0x5d3f65b6. +// +// Solidity: function sumOfPartialWithdrawalsClaimedGwei() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodSession) SumOfPartialWithdrawalsClaimedGwei() (uint64, error) { + return _ContractEigenPod.Contract.SumOfPartialWithdrawalsClaimedGwei(&_ContractEigenPod.CallOpts) +} + +// SumOfPartialWithdrawalsClaimedGwei is a free data retrieval call binding the contract method 0x5d3f65b6. +// +// Solidity: function sumOfPartialWithdrawalsClaimedGwei() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodCallerSession) SumOfPartialWithdrawalsClaimedGwei() (uint64, error) { + return _ContractEigenPod.Contract.SumOfPartialWithdrawalsClaimedGwei(&_ContractEigenPod.CallOpts) +} + +// ValidatorPubkeyHashToInfo is a free data retrieval call binding the contract method 0x6fcd0e53. +// +// Solidity: function validatorPubkeyHashToInfo(bytes32 validatorPubkeyHash) view returns((uint64,uint64,uint64,uint8)) +func (_ContractEigenPod *ContractEigenPodCaller) ValidatorPubkeyHashToInfo(opts *bind.CallOpts, validatorPubkeyHash [32]byte) (IEigenPodValidatorInfo, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "validatorPubkeyHashToInfo", validatorPubkeyHash) + + if err != nil { + return *new(IEigenPodValidatorInfo), err + } + + out0 := *abi.ConvertType(out[0], new(IEigenPodValidatorInfo)).(*IEigenPodValidatorInfo) + + return out0, err + +} + +// ValidatorPubkeyHashToInfo is a free data retrieval call binding the contract method 0x6fcd0e53. +// +// Solidity: function validatorPubkeyHashToInfo(bytes32 validatorPubkeyHash) view returns((uint64,uint64,uint64,uint8)) +func (_ContractEigenPod *ContractEigenPodSession) ValidatorPubkeyHashToInfo(validatorPubkeyHash [32]byte) (IEigenPodValidatorInfo, error) { + return _ContractEigenPod.Contract.ValidatorPubkeyHashToInfo(&_ContractEigenPod.CallOpts, validatorPubkeyHash) +} + +// ValidatorPubkeyHashToInfo is a free data retrieval call binding the contract method 0x6fcd0e53. +// +// Solidity: function validatorPubkeyHashToInfo(bytes32 validatorPubkeyHash) view returns((uint64,uint64,uint64,uint8)) +func (_ContractEigenPod *ContractEigenPodCallerSession) ValidatorPubkeyHashToInfo(validatorPubkeyHash [32]byte) (IEigenPodValidatorInfo, error) { + return _ContractEigenPod.Contract.ValidatorPubkeyHashToInfo(&_ContractEigenPod.CallOpts, validatorPubkeyHash) +} + +// ValidatorStatus is a free data retrieval call binding the contract method 0x7439841f. +// +// Solidity: function validatorStatus(bytes32 pubkeyHash) view returns(uint8) +func (_ContractEigenPod *ContractEigenPodCaller) ValidatorStatus(opts *bind.CallOpts, pubkeyHash [32]byte) (uint8, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "validatorStatus", pubkeyHash) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// ValidatorStatus is a free data retrieval call binding the contract method 0x7439841f. +// +// Solidity: function validatorStatus(bytes32 pubkeyHash) view returns(uint8) +func (_ContractEigenPod *ContractEigenPodSession) ValidatorStatus(pubkeyHash [32]byte) (uint8, error) { + return _ContractEigenPod.Contract.ValidatorStatus(&_ContractEigenPod.CallOpts, pubkeyHash) +} + +// ValidatorStatus is a free data retrieval call binding the contract method 0x7439841f. +// +// Solidity: function validatorStatus(bytes32 pubkeyHash) view returns(uint8) +func (_ContractEigenPod *ContractEigenPodCallerSession) ValidatorStatus(pubkeyHash [32]byte) (uint8, error) { + return _ContractEigenPod.Contract.ValidatorStatus(&_ContractEigenPod.CallOpts, pubkeyHash) +} + +// WithdrawableRestakedExecutionLayerGwei is a free data retrieval call binding the contract method 0x3474aa16. +// +// Solidity: function withdrawableRestakedExecutionLayerGwei() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodCaller) WithdrawableRestakedExecutionLayerGwei(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ContractEigenPod.contract.Call(opts, &out, "withdrawableRestakedExecutionLayerGwei") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// WithdrawableRestakedExecutionLayerGwei is a free data retrieval call binding the contract method 0x3474aa16. +// +// Solidity: function withdrawableRestakedExecutionLayerGwei() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodSession) WithdrawableRestakedExecutionLayerGwei() (uint64, error) { + return _ContractEigenPod.Contract.WithdrawableRestakedExecutionLayerGwei(&_ContractEigenPod.CallOpts) +} + +// WithdrawableRestakedExecutionLayerGwei is a free data retrieval call binding the contract method 0x3474aa16. +// +// Solidity: function withdrawableRestakedExecutionLayerGwei() view returns(uint64) +func (_ContractEigenPod *ContractEigenPodCallerSession) WithdrawableRestakedExecutionLayerGwei() (uint64, error) { + return _ContractEigenPod.Contract.WithdrawableRestakedExecutionLayerGwei(&_ContractEigenPod.CallOpts) +} + +// ActivateRestaking is a paid mutator transaction binding the contract method 0x0cd4649e. +// +// Solidity: function activateRestaking() returns() +func (_ContractEigenPod *ContractEigenPodTransactor) ActivateRestaking(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractEigenPod.contract.Transact(opts, "activateRestaking") +} + +// ActivateRestaking is a paid mutator transaction binding the contract method 0x0cd4649e. +// +// Solidity: function activateRestaking() returns() +func (_ContractEigenPod *ContractEigenPodSession) ActivateRestaking() (*types.Transaction, error) { + return _ContractEigenPod.Contract.ActivateRestaking(&_ContractEigenPod.TransactOpts) +} + +// ActivateRestaking is a paid mutator transaction binding the contract method 0x0cd4649e. +// +// Solidity: function activateRestaking() returns() +func (_ContractEigenPod *ContractEigenPodTransactorSession) ActivateRestaking() (*types.Transaction, error) { + return _ContractEigenPod.Contract.ActivateRestaking(&_ContractEigenPod.TransactOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _podOwner) returns() +func (_ContractEigenPod *ContractEigenPodTransactor) Initialize(opts *bind.TransactOpts, _podOwner common.Address) (*types.Transaction, error) { + return _ContractEigenPod.contract.Transact(opts, "initialize", _podOwner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _podOwner) returns() +func (_ContractEigenPod *ContractEigenPodSession) Initialize(_podOwner common.Address) (*types.Transaction, error) { + return _ContractEigenPod.Contract.Initialize(&_ContractEigenPod.TransactOpts, _podOwner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _podOwner) returns() +func (_ContractEigenPod *ContractEigenPodTransactorSession) Initialize(_podOwner common.Address) (*types.Transaction, error) { + return _ContractEigenPod.Contract.Initialize(&_ContractEigenPod.TransactOpts, _podOwner) +} + +// RecoverTokens is a paid mutator transaction binding the contract method 0xdda3346c. +// +// Solidity: function recoverTokens(address[] tokenList, uint256[] amountsToWithdraw, address recipient) returns() +func (_ContractEigenPod *ContractEigenPodTransactor) RecoverTokens(opts *bind.TransactOpts, tokenList []common.Address, amountsToWithdraw []*big.Int, recipient common.Address) (*types.Transaction, error) { + return _ContractEigenPod.contract.Transact(opts, "recoverTokens", tokenList, amountsToWithdraw, recipient) +} + +// RecoverTokens is a paid mutator transaction binding the contract method 0xdda3346c. +// +// Solidity: function recoverTokens(address[] tokenList, uint256[] amountsToWithdraw, address recipient) returns() +func (_ContractEigenPod *ContractEigenPodSession) RecoverTokens(tokenList []common.Address, amountsToWithdraw []*big.Int, recipient common.Address) (*types.Transaction, error) { + return _ContractEigenPod.Contract.RecoverTokens(&_ContractEigenPod.TransactOpts, tokenList, amountsToWithdraw, recipient) +} + +// RecoverTokens is a paid mutator transaction binding the contract method 0xdda3346c. +// +// Solidity: function recoverTokens(address[] tokenList, uint256[] amountsToWithdraw, address recipient) returns() +func (_ContractEigenPod *ContractEigenPodTransactorSession) RecoverTokens(tokenList []common.Address, amountsToWithdraw []*big.Int, recipient common.Address) (*types.Transaction, error) { + return _ContractEigenPod.Contract.RecoverTokens(&_ContractEigenPod.TransactOpts, tokenList, amountsToWithdraw, recipient) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_ContractEigenPod *ContractEigenPodTransactor) Stake(opts *bind.TransactOpts, pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _ContractEigenPod.contract.Transact(opts, "stake", pubkey, signature, depositDataRoot) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_ContractEigenPod *ContractEigenPodSession) Stake(pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _ContractEigenPod.Contract.Stake(&_ContractEigenPod.TransactOpts, pubkey, signature, depositDataRoot) +} + +// Stake is a paid mutator transaction binding the contract method 0x9b4e4634. +// +// Solidity: function stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable returns() +func (_ContractEigenPod *ContractEigenPodTransactorSession) Stake(pubkey []byte, signature []byte, depositDataRoot [32]byte) (*types.Transaction, error) { + return _ContractEigenPod.Contract.Stake(&_ContractEigenPod.TransactOpts, pubkey, signature, depositDataRoot) +} + +// VerifyAndProcessWithdrawals is a paid mutator transaction binding the contract method 0xe251ef52. +// +// Solidity: function verifyAndProcessWithdrawals(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes,bytes,bytes,uint64,uint64,uint64,bytes32,bytes32,bytes32,bytes32)[] withdrawalProofs, bytes[] validatorFieldsProofs, bytes32[][] validatorFields, bytes32[][] withdrawalFields) returns() +func (_ContractEigenPod *ContractEigenPodTransactor) VerifyAndProcessWithdrawals(opts *bind.TransactOpts, oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, withdrawalProofs []BeaconChainProofsWithdrawalProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte, withdrawalFields [][][32]byte) (*types.Transaction, error) { + return _ContractEigenPod.contract.Transact(opts, "verifyAndProcessWithdrawals", oracleTimestamp, stateRootProof, withdrawalProofs, validatorFieldsProofs, validatorFields, withdrawalFields) +} + +// VerifyAndProcessWithdrawals is a paid mutator transaction binding the contract method 0xe251ef52. +// +// Solidity: function verifyAndProcessWithdrawals(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes,bytes,bytes,uint64,uint64,uint64,bytes32,bytes32,bytes32,bytes32)[] withdrawalProofs, bytes[] validatorFieldsProofs, bytes32[][] validatorFields, bytes32[][] withdrawalFields) returns() +func (_ContractEigenPod *ContractEigenPodSession) VerifyAndProcessWithdrawals(oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, withdrawalProofs []BeaconChainProofsWithdrawalProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte, withdrawalFields [][][32]byte) (*types.Transaction, error) { + return _ContractEigenPod.Contract.VerifyAndProcessWithdrawals(&_ContractEigenPod.TransactOpts, oracleTimestamp, stateRootProof, withdrawalProofs, validatorFieldsProofs, validatorFields, withdrawalFields) +} + +// VerifyAndProcessWithdrawals is a paid mutator transaction binding the contract method 0xe251ef52. +// +// Solidity: function verifyAndProcessWithdrawals(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes,bytes,bytes,uint64,uint64,uint64,bytes32,bytes32,bytes32,bytes32)[] withdrawalProofs, bytes[] validatorFieldsProofs, bytes32[][] validatorFields, bytes32[][] withdrawalFields) returns() +func (_ContractEigenPod *ContractEigenPodTransactorSession) VerifyAndProcessWithdrawals(oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, withdrawalProofs []BeaconChainProofsWithdrawalProof, validatorFieldsProofs [][]byte, validatorFields [][][32]byte, withdrawalFields [][][32]byte) (*types.Transaction, error) { + return _ContractEigenPod.Contract.VerifyAndProcessWithdrawals(&_ContractEigenPod.TransactOpts, oracleTimestamp, stateRootProof, withdrawalProofs, validatorFieldsProofs, validatorFields, withdrawalFields) +} + +// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xb725bceb. +// +// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes32)[] balanceUpdateProofs, bytes32[][] validatorFields) returns() +func (_ContractEigenPod *ContractEigenPodTransactor) VerifyBalanceUpdates(opts *bind.TransactOpts, oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, balanceUpdateProofs []BeaconChainProofsBalanceUpdateProof, validatorFields [][][32]byte) (*types.Transaction, error) { + return _ContractEigenPod.contract.Transact(opts, "verifyBalanceUpdates", oracleTimestamp, validatorIndices, stateRootProof, balanceUpdateProofs, validatorFields) +} + +// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xb725bceb. +// +// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes32)[] balanceUpdateProofs, bytes32[][] validatorFields) returns() +func (_ContractEigenPod *ContractEigenPodSession) VerifyBalanceUpdates(oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, balanceUpdateProofs []BeaconChainProofsBalanceUpdateProof, validatorFields [][][32]byte) (*types.Transaction, error) { + return _ContractEigenPod.Contract.VerifyBalanceUpdates(&_ContractEigenPod.TransactOpts, oracleTimestamp, validatorIndices, stateRootProof, balanceUpdateProofs, validatorFields) +} + +// VerifyBalanceUpdates is a paid mutator transaction binding the contract method 0xb725bceb. +// +// Solidity: function verifyBalanceUpdates(uint64 oracleTimestamp, uint40[] validatorIndices, (bytes32,bytes) stateRootProof, (bytes,bytes,bytes32)[] balanceUpdateProofs, bytes32[][] validatorFields) returns() +func (_ContractEigenPod *ContractEigenPodTransactorSession) VerifyBalanceUpdates(oracleTimestamp uint64, validatorIndices []*big.Int, stateRootProof BeaconChainProofsStateRootProof, balanceUpdateProofs []BeaconChainProofsBalanceUpdateProof, validatorFields [][][32]byte) (*types.Transaction, error) { + return _ContractEigenPod.Contract.VerifyBalanceUpdates(&_ContractEigenPod.TransactOpts, oracleTimestamp, validatorIndices, stateRootProof, balanceUpdateProofs, validatorFields) +} + +// VerifyWithdrawalCredentials is a paid mutator transaction binding the contract method 0x3f65cf19. +// +// Solidity: function verifyWithdrawalCredentials(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, uint40[] validatorIndices, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_ContractEigenPod *ContractEigenPodTransactor) VerifyWithdrawalCredentials(opts *bind.TransactOpts, oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, validatorIndices []*big.Int, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _ContractEigenPod.contract.Transact(opts, "verifyWithdrawalCredentials", oracleTimestamp, stateRootProof, validatorIndices, validatorFieldsProofs, validatorFields) +} + +// VerifyWithdrawalCredentials is a paid mutator transaction binding the contract method 0x3f65cf19. +// +// Solidity: function verifyWithdrawalCredentials(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, uint40[] validatorIndices, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_ContractEigenPod *ContractEigenPodSession) VerifyWithdrawalCredentials(oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, validatorIndices []*big.Int, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _ContractEigenPod.Contract.VerifyWithdrawalCredentials(&_ContractEigenPod.TransactOpts, oracleTimestamp, stateRootProof, validatorIndices, validatorFieldsProofs, validatorFields) +} + +// VerifyWithdrawalCredentials is a paid mutator transaction binding the contract method 0x3f65cf19. +// +// Solidity: function verifyWithdrawalCredentials(uint64 oracleTimestamp, (bytes32,bytes) stateRootProof, uint40[] validatorIndices, bytes[] validatorFieldsProofs, bytes32[][] validatorFields) returns() +func (_ContractEigenPod *ContractEigenPodTransactorSession) VerifyWithdrawalCredentials(oracleTimestamp uint64, stateRootProof BeaconChainProofsStateRootProof, validatorIndices []*big.Int, validatorFieldsProofs [][]byte, validatorFields [][][32]byte) (*types.Transaction, error) { + return _ContractEigenPod.Contract.VerifyWithdrawalCredentials(&_ContractEigenPod.TransactOpts, oracleTimestamp, stateRootProof, validatorIndices, validatorFieldsProofs, validatorFields) +} + +// WithdrawBeforeRestaking is a paid mutator transaction binding the contract method 0xbaa7145a. +// +// Solidity: function withdrawBeforeRestaking() returns() +func (_ContractEigenPod *ContractEigenPodTransactor) WithdrawBeforeRestaking(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractEigenPod.contract.Transact(opts, "withdrawBeforeRestaking") +} + +// WithdrawBeforeRestaking is a paid mutator transaction binding the contract method 0xbaa7145a. +// +// Solidity: function withdrawBeforeRestaking() returns() +func (_ContractEigenPod *ContractEigenPodSession) WithdrawBeforeRestaking() (*types.Transaction, error) { + return _ContractEigenPod.Contract.WithdrawBeforeRestaking(&_ContractEigenPod.TransactOpts) +} + +// WithdrawBeforeRestaking is a paid mutator transaction binding the contract method 0xbaa7145a. +// +// Solidity: function withdrawBeforeRestaking() returns() +func (_ContractEigenPod *ContractEigenPodTransactorSession) WithdrawBeforeRestaking() (*types.Transaction, error) { + return _ContractEigenPod.Contract.WithdrawBeforeRestaking(&_ContractEigenPod.TransactOpts) +} + +// WithdrawNonBeaconChainETHBalanceWei is a paid mutator transaction binding the contract method 0xe2c83445. +// +// Solidity: function withdrawNonBeaconChainETHBalanceWei(address recipient, uint256 amountToWithdraw) returns() +func (_ContractEigenPod *ContractEigenPodTransactor) WithdrawNonBeaconChainETHBalanceWei(opts *bind.TransactOpts, recipient common.Address, amountToWithdraw *big.Int) (*types.Transaction, error) { + return _ContractEigenPod.contract.Transact(opts, "withdrawNonBeaconChainETHBalanceWei", recipient, amountToWithdraw) +} + +// WithdrawNonBeaconChainETHBalanceWei is a paid mutator transaction binding the contract method 0xe2c83445. +// +// Solidity: function withdrawNonBeaconChainETHBalanceWei(address recipient, uint256 amountToWithdraw) returns() +func (_ContractEigenPod *ContractEigenPodSession) WithdrawNonBeaconChainETHBalanceWei(recipient common.Address, amountToWithdraw *big.Int) (*types.Transaction, error) { + return _ContractEigenPod.Contract.WithdrawNonBeaconChainETHBalanceWei(&_ContractEigenPod.TransactOpts, recipient, amountToWithdraw) +} + +// WithdrawNonBeaconChainETHBalanceWei is a paid mutator transaction binding the contract method 0xe2c83445. +// +// Solidity: function withdrawNonBeaconChainETHBalanceWei(address recipient, uint256 amountToWithdraw) returns() +func (_ContractEigenPod *ContractEigenPodTransactorSession) WithdrawNonBeaconChainETHBalanceWei(recipient common.Address, amountToWithdraw *big.Int) (*types.Transaction, error) { + return _ContractEigenPod.Contract.WithdrawNonBeaconChainETHBalanceWei(&_ContractEigenPod.TransactOpts, recipient, amountToWithdraw) +} + +// WithdrawRestakedBeaconChainETH is a paid mutator transaction binding the contract method 0xc4907442. +// +// Solidity: function withdrawRestakedBeaconChainETH(address recipient, uint256 amountWei) returns() +func (_ContractEigenPod *ContractEigenPodTransactor) WithdrawRestakedBeaconChainETH(opts *bind.TransactOpts, recipient common.Address, amountWei *big.Int) (*types.Transaction, error) { + return _ContractEigenPod.contract.Transact(opts, "withdrawRestakedBeaconChainETH", recipient, amountWei) +} + +// WithdrawRestakedBeaconChainETH is a paid mutator transaction binding the contract method 0xc4907442. +// +// Solidity: function withdrawRestakedBeaconChainETH(address recipient, uint256 amountWei) returns() +func (_ContractEigenPod *ContractEigenPodSession) WithdrawRestakedBeaconChainETH(recipient common.Address, amountWei *big.Int) (*types.Transaction, error) { + return _ContractEigenPod.Contract.WithdrawRestakedBeaconChainETH(&_ContractEigenPod.TransactOpts, recipient, amountWei) +} + +// WithdrawRestakedBeaconChainETH is a paid mutator transaction binding the contract method 0xc4907442. +// +// Solidity: function withdrawRestakedBeaconChainETH(address recipient, uint256 amountWei) returns() +func (_ContractEigenPod *ContractEigenPodTransactorSession) WithdrawRestakedBeaconChainETH(recipient common.Address, amountWei *big.Int) (*types.Transaction, error) { + return _ContractEigenPod.Contract.WithdrawRestakedBeaconChainETH(&_ContractEigenPod.TransactOpts, recipient, amountWei) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_ContractEigenPod *ContractEigenPodTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractEigenPod.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_ContractEigenPod *ContractEigenPodSession) Receive() (*types.Transaction, error) { + return _ContractEigenPod.Contract.Receive(&_ContractEigenPod.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_ContractEigenPod *ContractEigenPodTransactorSession) Receive() (*types.Transaction, error) { + return _ContractEigenPod.Contract.Receive(&_ContractEigenPod.TransactOpts) +} + +// ContractEigenPodEigenPodStakedIterator is returned from FilterEigenPodStaked and is used to iterate over the raw logs and unpacked data for EigenPodStaked events raised by the ContractEigenPod contract. +type ContractEigenPodEigenPodStakedIterator struct { + Event *ContractEigenPodEigenPodStaked // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractEigenPodEigenPodStakedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodEigenPodStaked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodEigenPodStaked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractEigenPodEigenPodStakedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractEigenPodEigenPodStakedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractEigenPodEigenPodStaked represents a EigenPodStaked event raised by the ContractEigenPod contract. +type ContractEigenPodEigenPodStaked struct { + Pubkey []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterEigenPodStaked is a free log retrieval operation binding the contract event 0x606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e23. +// +// Solidity: event EigenPodStaked(bytes pubkey) +func (_ContractEigenPod *ContractEigenPodFilterer) FilterEigenPodStaked(opts *bind.FilterOpts) (*ContractEigenPodEigenPodStakedIterator, error) { + + logs, sub, err := _ContractEigenPod.contract.FilterLogs(opts, "EigenPodStaked") + if err != nil { + return nil, err + } + return &ContractEigenPodEigenPodStakedIterator{contract: _ContractEigenPod.contract, event: "EigenPodStaked", logs: logs, sub: sub}, nil +} + +// WatchEigenPodStaked is a free log subscription operation binding the contract event 0x606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e23. +// +// Solidity: event EigenPodStaked(bytes pubkey) +func (_ContractEigenPod *ContractEigenPodFilterer) WatchEigenPodStaked(opts *bind.WatchOpts, sink chan<- *ContractEigenPodEigenPodStaked) (event.Subscription, error) { + + logs, sub, err := _ContractEigenPod.contract.WatchLogs(opts, "EigenPodStaked") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractEigenPodEigenPodStaked) + if err := _ContractEigenPod.contract.UnpackLog(event, "EigenPodStaked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseEigenPodStaked is a log parse operation binding the contract event 0x606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e23. +// +// Solidity: event EigenPodStaked(bytes pubkey) +func (_ContractEigenPod *ContractEigenPodFilterer) ParseEigenPodStaked(log types.Log) (*ContractEigenPodEigenPodStaked, error) { + event := new(ContractEigenPodEigenPodStaked) + if err := _ContractEigenPod.contract.UnpackLog(event, "EigenPodStaked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractEigenPodFullWithdrawalRedeemedIterator is returned from FilterFullWithdrawalRedeemed and is used to iterate over the raw logs and unpacked data for FullWithdrawalRedeemed events raised by the ContractEigenPod contract. +type ContractEigenPodFullWithdrawalRedeemedIterator struct { + Event *ContractEigenPodFullWithdrawalRedeemed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractEigenPodFullWithdrawalRedeemedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodFullWithdrawalRedeemed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodFullWithdrawalRedeemed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractEigenPodFullWithdrawalRedeemedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractEigenPodFullWithdrawalRedeemedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractEigenPodFullWithdrawalRedeemed represents a FullWithdrawalRedeemed event raised by the ContractEigenPod contract. +type ContractEigenPodFullWithdrawalRedeemed struct { + ValidatorIndex *big.Int + WithdrawalTimestamp uint64 + Recipient common.Address + WithdrawalAmountGwei uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFullWithdrawalRedeemed is a free log retrieval operation binding the contract event 0xb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a0963. +// +// Solidity: event FullWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 withdrawalAmountGwei) +func (_ContractEigenPod *ContractEigenPodFilterer) FilterFullWithdrawalRedeemed(opts *bind.FilterOpts, recipient []common.Address) (*ContractEigenPodFullWithdrawalRedeemedIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _ContractEigenPod.contract.FilterLogs(opts, "FullWithdrawalRedeemed", recipientRule) + if err != nil { + return nil, err + } + return &ContractEigenPodFullWithdrawalRedeemedIterator{contract: _ContractEigenPod.contract, event: "FullWithdrawalRedeemed", logs: logs, sub: sub}, nil +} + +// WatchFullWithdrawalRedeemed is a free log subscription operation binding the contract event 0xb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a0963. +// +// Solidity: event FullWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 withdrawalAmountGwei) +func (_ContractEigenPod *ContractEigenPodFilterer) WatchFullWithdrawalRedeemed(opts *bind.WatchOpts, sink chan<- *ContractEigenPodFullWithdrawalRedeemed, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _ContractEigenPod.contract.WatchLogs(opts, "FullWithdrawalRedeemed", recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractEigenPodFullWithdrawalRedeemed) + if err := _ContractEigenPod.contract.UnpackLog(event, "FullWithdrawalRedeemed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseFullWithdrawalRedeemed is a log parse operation binding the contract event 0xb76a93bb649ece524688f1a01d184e0bbebcda58eae80c28a898bec3fb5a0963. +// +// Solidity: event FullWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 withdrawalAmountGwei) +func (_ContractEigenPod *ContractEigenPodFilterer) ParseFullWithdrawalRedeemed(log types.Log) (*ContractEigenPodFullWithdrawalRedeemed, error) { + event := new(ContractEigenPodFullWithdrawalRedeemed) + if err := _ContractEigenPod.contract.UnpackLog(event, "FullWithdrawalRedeemed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractEigenPodInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractEigenPod contract. +type ContractEigenPodInitializedIterator struct { + Event *ContractEigenPodInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractEigenPodInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractEigenPodInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractEigenPodInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractEigenPodInitialized represents a Initialized event raised by the ContractEigenPod contract. +type ContractEigenPodInitialized 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 (_ContractEigenPod *ContractEigenPodFilterer) FilterInitialized(opts *bind.FilterOpts) (*ContractEigenPodInitializedIterator, error) { + + logs, sub, err := _ContractEigenPod.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ContractEigenPodInitializedIterator{contract: _ContractEigenPod.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 (_ContractEigenPod *ContractEigenPodFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractEigenPodInitialized) (event.Subscription, error) { + + logs, sub, err := _ContractEigenPod.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(ContractEigenPodInitialized) + if err := _ContractEigenPod.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 (_ContractEigenPod *ContractEigenPodFilterer) ParseInitialized(log types.Log) (*ContractEigenPodInitialized, error) { + event := new(ContractEigenPodInitialized) + if err := _ContractEigenPod.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractEigenPodNonBeaconChainETHReceivedIterator is returned from FilterNonBeaconChainETHReceived and is used to iterate over the raw logs and unpacked data for NonBeaconChainETHReceived events raised by the ContractEigenPod contract. +type ContractEigenPodNonBeaconChainETHReceivedIterator struct { + Event *ContractEigenPodNonBeaconChainETHReceived // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractEigenPodNonBeaconChainETHReceivedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodNonBeaconChainETHReceived) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodNonBeaconChainETHReceived) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractEigenPodNonBeaconChainETHReceivedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractEigenPodNonBeaconChainETHReceivedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractEigenPodNonBeaconChainETHReceived represents a NonBeaconChainETHReceived event raised by the ContractEigenPod contract. +type ContractEigenPodNonBeaconChainETHReceived struct { + AmountReceived *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNonBeaconChainETHReceived is a free log retrieval operation binding the contract event 0x6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf49. +// +// Solidity: event NonBeaconChainETHReceived(uint256 amountReceived) +func (_ContractEigenPod *ContractEigenPodFilterer) FilterNonBeaconChainETHReceived(opts *bind.FilterOpts) (*ContractEigenPodNonBeaconChainETHReceivedIterator, error) { + + logs, sub, err := _ContractEigenPod.contract.FilterLogs(opts, "NonBeaconChainETHReceived") + if err != nil { + return nil, err + } + return &ContractEigenPodNonBeaconChainETHReceivedIterator{contract: _ContractEigenPod.contract, event: "NonBeaconChainETHReceived", logs: logs, sub: sub}, nil +} + +// WatchNonBeaconChainETHReceived is a free log subscription operation binding the contract event 0x6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf49. +// +// Solidity: event NonBeaconChainETHReceived(uint256 amountReceived) +func (_ContractEigenPod *ContractEigenPodFilterer) WatchNonBeaconChainETHReceived(opts *bind.WatchOpts, sink chan<- *ContractEigenPodNonBeaconChainETHReceived) (event.Subscription, error) { + + logs, sub, err := _ContractEigenPod.contract.WatchLogs(opts, "NonBeaconChainETHReceived") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractEigenPodNonBeaconChainETHReceived) + if err := _ContractEigenPod.contract.UnpackLog(event, "NonBeaconChainETHReceived", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNonBeaconChainETHReceived is a log parse operation binding the contract event 0x6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf49. +// +// Solidity: event NonBeaconChainETHReceived(uint256 amountReceived) +func (_ContractEigenPod *ContractEigenPodFilterer) ParseNonBeaconChainETHReceived(log types.Log) (*ContractEigenPodNonBeaconChainETHReceived, error) { + event := new(ContractEigenPodNonBeaconChainETHReceived) + if err := _ContractEigenPod.contract.UnpackLog(event, "NonBeaconChainETHReceived", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractEigenPodNonBeaconChainETHWithdrawnIterator is returned from FilterNonBeaconChainETHWithdrawn and is used to iterate over the raw logs and unpacked data for NonBeaconChainETHWithdrawn events raised by the ContractEigenPod contract. +type ContractEigenPodNonBeaconChainETHWithdrawnIterator struct { + Event *ContractEigenPodNonBeaconChainETHWithdrawn // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractEigenPodNonBeaconChainETHWithdrawnIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodNonBeaconChainETHWithdrawn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodNonBeaconChainETHWithdrawn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractEigenPodNonBeaconChainETHWithdrawnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractEigenPodNonBeaconChainETHWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractEigenPodNonBeaconChainETHWithdrawn represents a NonBeaconChainETHWithdrawn event raised by the ContractEigenPod contract. +type ContractEigenPodNonBeaconChainETHWithdrawn struct { + Recipient common.Address + AmountWithdrawn *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNonBeaconChainETHWithdrawn is a free log retrieval operation binding the contract event 0x30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f53096. +// +// Solidity: event NonBeaconChainETHWithdrawn(address indexed recipient, uint256 amountWithdrawn) +func (_ContractEigenPod *ContractEigenPodFilterer) FilterNonBeaconChainETHWithdrawn(opts *bind.FilterOpts, recipient []common.Address) (*ContractEigenPodNonBeaconChainETHWithdrawnIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _ContractEigenPod.contract.FilterLogs(opts, "NonBeaconChainETHWithdrawn", recipientRule) + if err != nil { + return nil, err + } + return &ContractEigenPodNonBeaconChainETHWithdrawnIterator{contract: _ContractEigenPod.contract, event: "NonBeaconChainETHWithdrawn", logs: logs, sub: sub}, nil +} + +// WatchNonBeaconChainETHWithdrawn is a free log subscription operation binding the contract event 0x30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f53096. +// +// Solidity: event NonBeaconChainETHWithdrawn(address indexed recipient, uint256 amountWithdrawn) +func (_ContractEigenPod *ContractEigenPodFilterer) WatchNonBeaconChainETHWithdrawn(opts *bind.WatchOpts, sink chan<- *ContractEigenPodNonBeaconChainETHWithdrawn, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _ContractEigenPod.contract.WatchLogs(opts, "NonBeaconChainETHWithdrawn", recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractEigenPodNonBeaconChainETHWithdrawn) + if err := _ContractEigenPod.contract.UnpackLog(event, "NonBeaconChainETHWithdrawn", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNonBeaconChainETHWithdrawn is a log parse operation binding the contract event 0x30420aacd028abb3c1fd03aba253ae725d6ddd52d16c9ac4cb5742cd43f53096. +// +// Solidity: event NonBeaconChainETHWithdrawn(address indexed recipient, uint256 amountWithdrawn) +func (_ContractEigenPod *ContractEigenPodFilterer) ParseNonBeaconChainETHWithdrawn(log types.Log) (*ContractEigenPodNonBeaconChainETHWithdrawn, error) { + event := new(ContractEigenPodNonBeaconChainETHWithdrawn) + if err := _ContractEigenPod.contract.UnpackLog(event, "NonBeaconChainETHWithdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractEigenPodPartialWithdrawalRedeemedIterator is returned from FilterPartialWithdrawalRedeemed and is used to iterate over the raw logs and unpacked data for PartialWithdrawalRedeemed events raised by the ContractEigenPod contract. +type ContractEigenPodPartialWithdrawalRedeemedIterator struct { + Event *ContractEigenPodPartialWithdrawalRedeemed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractEigenPodPartialWithdrawalRedeemedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodPartialWithdrawalRedeemed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodPartialWithdrawalRedeemed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractEigenPodPartialWithdrawalRedeemedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractEigenPodPartialWithdrawalRedeemedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractEigenPodPartialWithdrawalRedeemed represents a PartialWithdrawalRedeemed event raised by the ContractEigenPod contract. +type ContractEigenPodPartialWithdrawalRedeemed struct { + ValidatorIndex *big.Int + WithdrawalTimestamp uint64 + Recipient common.Address + PartialWithdrawalAmountGwei uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPartialWithdrawalRedeemed is a free log retrieval operation binding the contract event 0x8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e. +// +// Solidity: event PartialWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 partialWithdrawalAmountGwei) +func (_ContractEigenPod *ContractEigenPodFilterer) FilterPartialWithdrawalRedeemed(opts *bind.FilterOpts, recipient []common.Address) (*ContractEigenPodPartialWithdrawalRedeemedIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _ContractEigenPod.contract.FilterLogs(opts, "PartialWithdrawalRedeemed", recipientRule) + if err != nil { + return nil, err + } + return &ContractEigenPodPartialWithdrawalRedeemedIterator{contract: _ContractEigenPod.contract, event: "PartialWithdrawalRedeemed", logs: logs, sub: sub}, nil +} + +// WatchPartialWithdrawalRedeemed is a free log subscription operation binding the contract event 0x8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e. +// +// Solidity: event PartialWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 partialWithdrawalAmountGwei) +func (_ContractEigenPod *ContractEigenPodFilterer) WatchPartialWithdrawalRedeemed(opts *bind.WatchOpts, sink chan<- *ContractEigenPodPartialWithdrawalRedeemed, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _ContractEigenPod.contract.WatchLogs(opts, "PartialWithdrawalRedeemed", recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractEigenPodPartialWithdrawalRedeemed) + if err := _ContractEigenPod.contract.UnpackLog(event, "PartialWithdrawalRedeemed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePartialWithdrawalRedeemed is a log parse operation binding the contract event 0x8a7335714231dbd551aaba6314f4a97a14c201e53a3e25e1140325cdf67d7a4e. +// +// Solidity: event PartialWithdrawalRedeemed(uint40 validatorIndex, uint64 withdrawalTimestamp, address indexed recipient, uint64 partialWithdrawalAmountGwei) +func (_ContractEigenPod *ContractEigenPodFilterer) ParsePartialWithdrawalRedeemed(log types.Log) (*ContractEigenPodPartialWithdrawalRedeemed, error) { + event := new(ContractEigenPodPartialWithdrawalRedeemed) + if err := _ContractEigenPod.contract.UnpackLog(event, "PartialWithdrawalRedeemed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractEigenPodRestakedBeaconChainETHWithdrawnIterator is returned from FilterRestakedBeaconChainETHWithdrawn and is used to iterate over the raw logs and unpacked data for RestakedBeaconChainETHWithdrawn events raised by the ContractEigenPod contract. +type ContractEigenPodRestakedBeaconChainETHWithdrawnIterator struct { + Event *ContractEigenPodRestakedBeaconChainETHWithdrawn // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractEigenPodRestakedBeaconChainETHWithdrawnIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodRestakedBeaconChainETHWithdrawn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodRestakedBeaconChainETHWithdrawn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractEigenPodRestakedBeaconChainETHWithdrawnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractEigenPodRestakedBeaconChainETHWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractEigenPodRestakedBeaconChainETHWithdrawn represents a RestakedBeaconChainETHWithdrawn event raised by the ContractEigenPod contract. +type ContractEigenPodRestakedBeaconChainETHWithdrawn struct { + Recipient common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRestakedBeaconChainETHWithdrawn is a free log retrieval operation binding the contract event 0x8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e. +// +// Solidity: event RestakedBeaconChainETHWithdrawn(address indexed recipient, uint256 amount) +func (_ContractEigenPod *ContractEigenPodFilterer) FilterRestakedBeaconChainETHWithdrawn(opts *bind.FilterOpts, recipient []common.Address) (*ContractEigenPodRestakedBeaconChainETHWithdrawnIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _ContractEigenPod.contract.FilterLogs(opts, "RestakedBeaconChainETHWithdrawn", recipientRule) + if err != nil { + return nil, err + } + return &ContractEigenPodRestakedBeaconChainETHWithdrawnIterator{contract: _ContractEigenPod.contract, event: "RestakedBeaconChainETHWithdrawn", logs: logs, sub: sub}, nil +} + +// WatchRestakedBeaconChainETHWithdrawn is a free log subscription operation binding the contract event 0x8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e. +// +// Solidity: event RestakedBeaconChainETHWithdrawn(address indexed recipient, uint256 amount) +func (_ContractEigenPod *ContractEigenPodFilterer) WatchRestakedBeaconChainETHWithdrawn(opts *bind.WatchOpts, sink chan<- *ContractEigenPodRestakedBeaconChainETHWithdrawn, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _ContractEigenPod.contract.WatchLogs(opts, "RestakedBeaconChainETHWithdrawn", recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractEigenPodRestakedBeaconChainETHWithdrawn) + if err := _ContractEigenPod.contract.UnpackLog(event, "RestakedBeaconChainETHWithdrawn", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRestakedBeaconChainETHWithdrawn is a log parse operation binding the contract event 0x8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e. +// +// Solidity: event RestakedBeaconChainETHWithdrawn(address indexed recipient, uint256 amount) +func (_ContractEigenPod *ContractEigenPodFilterer) ParseRestakedBeaconChainETHWithdrawn(log types.Log) (*ContractEigenPodRestakedBeaconChainETHWithdrawn, error) { + event := new(ContractEigenPodRestakedBeaconChainETHWithdrawn) + if err := _ContractEigenPod.contract.UnpackLog(event, "RestakedBeaconChainETHWithdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractEigenPodRestakingActivatedIterator is returned from FilterRestakingActivated and is used to iterate over the raw logs and unpacked data for RestakingActivated events raised by the ContractEigenPod contract. +type ContractEigenPodRestakingActivatedIterator struct { + Event *ContractEigenPodRestakingActivated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractEigenPodRestakingActivatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodRestakingActivated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodRestakingActivated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractEigenPodRestakingActivatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractEigenPodRestakingActivatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractEigenPodRestakingActivated represents a RestakingActivated event raised by the ContractEigenPod contract. +type ContractEigenPodRestakingActivated struct { + PodOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRestakingActivated is a free log retrieval operation binding the contract event 0xca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd. +// +// Solidity: event RestakingActivated(address indexed podOwner) +func (_ContractEigenPod *ContractEigenPodFilterer) FilterRestakingActivated(opts *bind.FilterOpts, podOwner []common.Address) (*ContractEigenPodRestakingActivatedIterator, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _ContractEigenPod.contract.FilterLogs(opts, "RestakingActivated", podOwnerRule) + if err != nil { + return nil, err + } + return &ContractEigenPodRestakingActivatedIterator{contract: _ContractEigenPod.contract, event: "RestakingActivated", logs: logs, sub: sub}, nil +} + +// WatchRestakingActivated is a free log subscription operation binding the contract event 0xca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd. +// +// Solidity: event RestakingActivated(address indexed podOwner) +func (_ContractEigenPod *ContractEigenPodFilterer) WatchRestakingActivated(opts *bind.WatchOpts, sink chan<- *ContractEigenPodRestakingActivated, podOwner []common.Address) (event.Subscription, error) { + + var podOwnerRule []interface{} + for _, podOwnerItem := range podOwner { + podOwnerRule = append(podOwnerRule, podOwnerItem) + } + + logs, sub, err := _ContractEigenPod.contract.WatchLogs(opts, "RestakingActivated", podOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractEigenPodRestakingActivated) + if err := _ContractEigenPod.contract.UnpackLog(event, "RestakingActivated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRestakingActivated is a log parse operation binding the contract event 0xca8dfc8c5e0a67a74501c072a3325f685259bebbae7cfd230ab85198a78b70cd. +// +// Solidity: event RestakingActivated(address indexed podOwner) +func (_ContractEigenPod *ContractEigenPodFilterer) ParseRestakingActivated(log types.Log) (*ContractEigenPodRestakingActivated, error) { + event := new(ContractEigenPodRestakingActivated) + if err := _ContractEigenPod.contract.UnpackLog(event, "RestakingActivated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractEigenPodValidatorBalanceUpdatedIterator is returned from FilterValidatorBalanceUpdated and is used to iterate over the raw logs and unpacked data for ValidatorBalanceUpdated events raised by the ContractEigenPod contract. +type ContractEigenPodValidatorBalanceUpdatedIterator struct { + Event *ContractEigenPodValidatorBalanceUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractEigenPodValidatorBalanceUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodValidatorBalanceUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodValidatorBalanceUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractEigenPodValidatorBalanceUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractEigenPodValidatorBalanceUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractEigenPodValidatorBalanceUpdated represents a ValidatorBalanceUpdated event raised by the ContractEigenPod contract. +type ContractEigenPodValidatorBalanceUpdated struct { + ValidatorIndex *big.Int + BalanceTimestamp uint64 + NewValidatorBalanceGwei uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorBalanceUpdated is a free log retrieval operation binding the contract event 0x0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df. +// +// Solidity: event ValidatorBalanceUpdated(uint40 validatorIndex, uint64 balanceTimestamp, uint64 newValidatorBalanceGwei) +func (_ContractEigenPod *ContractEigenPodFilterer) FilterValidatorBalanceUpdated(opts *bind.FilterOpts) (*ContractEigenPodValidatorBalanceUpdatedIterator, error) { + + logs, sub, err := _ContractEigenPod.contract.FilterLogs(opts, "ValidatorBalanceUpdated") + if err != nil { + return nil, err + } + return &ContractEigenPodValidatorBalanceUpdatedIterator{contract: _ContractEigenPod.contract, event: "ValidatorBalanceUpdated", logs: logs, sub: sub}, nil +} + +// WatchValidatorBalanceUpdated is a free log subscription operation binding the contract event 0x0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df. +// +// Solidity: event ValidatorBalanceUpdated(uint40 validatorIndex, uint64 balanceTimestamp, uint64 newValidatorBalanceGwei) +func (_ContractEigenPod *ContractEigenPodFilterer) WatchValidatorBalanceUpdated(opts *bind.WatchOpts, sink chan<- *ContractEigenPodValidatorBalanceUpdated) (event.Subscription, error) { + + logs, sub, err := _ContractEigenPod.contract.WatchLogs(opts, "ValidatorBalanceUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractEigenPodValidatorBalanceUpdated) + if err := _ContractEigenPod.contract.UnpackLog(event, "ValidatorBalanceUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidatorBalanceUpdated is a log parse operation binding the contract event 0x0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df. +// +// Solidity: event ValidatorBalanceUpdated(uint40 validatorIndex, uint64 balanceTimestamp, uint64 newValidatorBalanceGwei) +func (_ContractEigenPod *ContractEigenPodFilterer) ParseValidatorBalanceUpdated(log types.Log) (*ContractEigenPodValidatorBalanceUpdated, error) { + event := new(ContractEigenPodValidatorBalanceUpdated) + if err := _ContractEigenPod.contract.UnpackLog(event, "ValidatorBalanceUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractEigenPodValidatorRestakedIterator is returned from FilterValidatorRestaked and is used to iterate over the raw logs and unpacked data for ValidatorRestaked events raised by the ContractEigenPod contract. +type ContractEigenPodValidatorRestakedIterator struct { + Event *ContractEigenPodValidatorRestaked // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractEigenPodValidatorRestakedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodValidatorRestaked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractEigenPodValidatorRestaked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractEigenPodValidatorRestakedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractEigenPodValidatorRestakedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractEigenPodValidatorRestaked represents a ValidatorRestaked event raised by the ContractEigenPod contract. +type ContractEigenPodValidatorRestaked struct { + ValidatorIndex *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorRestaked is a free log retrieval operation binding the contract event 0x2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449. +// +// Solidity: event ValidatorRestaked(uint40 validatorIndex) +func (_ContractEigenPod *ContractEigenPodFilterer) FilterValidatorRestaked(opts *bind.FilterOpts) (*ContractEigenPodValidatorRestakedIterator, error) { + + logs, sub, err := _ContractEigenPod.contract.FilterLogs(opts, "ValidatorRestaked") + if err != nil { + return nil, err + } + return &ContractEigenPodValidatorRestakedIterator{contract: _ContractEigenPod.contract, event: "ValidatorRestaked", logs: logs, sub: sub}, nil +} + +// WatchValidatorRestaked is a free log subscription operation binding the contract event 0x2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449. +// +// Solidity: event ValidatorRestaked(uint40 validatorIndex) +func (_ContractEigenPod *ContractEigenPodFilterer) WatchValidatorRestaked(opts *bind.WatchOpts, sink chan<- *ContractEigenPodValidatorRestaked) (event.Subscription, error) { + + logs, sub, err := _ContractEigenPod.contract.WatchLogs(opts, "ValidatorRestaked") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractEigenPodValidatorRestaked) + if err := _ContractEigenPod.contract.UnpackLog(event, "ValidatorRestaked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidatorRestaked is a log parse operation binding the contract event 0x2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449. +// +// Solidity: event ValidatorRestaked(uint40 validatorIndex) +func (_ContractEigenPod *ContractEigenPodFilterer) ParseValidatorRestaked(log types.Log) (*ContractEigenPodValidatorRestaked, error) { + event := new(ContractEigenPodValidatorRestaked) + if err := _ContractEigenPod.contract.UnpackLog(event, "ValidatorRestaked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/generate-bindings.sh b/contracts/generate-bindings.sh index 14f56bdf..f30058c2 100755 --- a/contracts/generate-bindings.sh +++ b/contracts/generate-bindings.sh @@ -44,7 +44,9 @@ EIGENLAYER_CONTRACT_PATH=$EIGENLAYER_MIDDLEWARE_PATH/lib/eigenlayer-contracts cd $EIGENLAYER_CONTRACT_PATH forge build -el_contracts="DelegationManager Slasher StrategyManager IStrategy EigenPodManager EigenPod IERC20" +# No idea why but EigenPod needs to be right before EigenPodManager otherwise there's a bug and +# abigen fails... +el_contracts="DelegationManager Slasher StrategyManager IStrategy EigenPod EigenPodManager IERC20" for contract in $el_contracts; do create_binding . $contract ../../../../bindings done