From 01fcb11eba4e92d467c3a822256f070579de5ea7 Mon Sep 17 00:00:00 2001 From: Haneen Hany <124837763+khalifaa55@users.noreply.github.com> Date: Tue, 13 Aug 2024 17:15:04 +0300 Subject: [PATCH] Lido Tier 1 Integration NO data (#401) * refactor: lido.go * feat: get NO ID by reward address * style: adjust format * refactor: contract setup logic * refactor: Adjust tests for nodeOperator * test: add Fuzz test for NodeID * feat: Add keys info * feat: Add bonds info * feat: Get non-claimed rewards * feat: generate contracts Go code * feat: remove contracts go code * doc: update documentation * feat: add generated contract files to .gitignore * refactor: adjust error message * refactor: reduce search complexity for rewards * refactor: Handle Contract deployed addresses * test: Adjust test cases * test: Add unit tests * test: remove additional logs * feat: remove SigningKeys function * refactor: Adjust error messages * feat: Remove proof parameter from Rewards method --- .github/workflows/build.yml | 5 +- .gitignore | 8 + Makefile | 10 +- configs/public_rpcs.go | 1 - docs/docs/quickstart/install-guide.mdx | 2 +- internal/lido/contracts/contract_setup.go | 52 + internal/lido/contracts/contractsAddress.go | 46 + .../contracts/csaccounting/CSAccounting.abi | 1 + .../contracts/csaccounting/CSAccounting.bin | 1 + internal/lido/contracts/csaccounting/bonds.go | 96 + .../lido/contracts/csaccounting/bonds_test.go | 73 + .../csfeedistributor/CSFeeDistributor.abi | 1 + .../csfeedistributor/CSFeeDistributor.bin | 1 + .../contracts/csfeedistributor/rewards.go | 170 + .../csfeedistributor/rewards_test.go | 115 + internal/lido/contracts/csmodule/CSModule.abi | 1 + internal/lido/contracts/csmodule/CSModule.bin | 1 + internal/lido/contracts/csmodule/keys.go | 67 + internal/lido/contracts/csmodule/keys_test.go | 70 + .../lido/contracts/csmodule/nodeOperator.go | 139 + .../contracts/csmodule/nodeOperator_test.go | 169 + .../MEVBoostRelayAllowedList.go | 1398 ------ .../contracts/mevboostrelaylist/get_relays.go | 113 +- .../staking_router/StakingRouter.abi | 1 - .../staking_router/StakingRouter.bin | 1 - .../contracts/staking_router/StakingRouter.go | 4249 ----------------- 26 files changed, 1056 insertions(+), 5735 deletions(-) create mode 100644 internal/lido/contracts/contract_setup.go create mode 100644 internal/lido/contracts/contractsAddress.go create mode 100644 internal/lido/contracts/csaccounting/CSAccounting.abi create mode 100644 internal/lido/contracts/csaccounting/CSAccounting.bin create mode 100644 internal/lido/contracts/csaccounting/bonds.go create mode 100644 internal/lido/contracts/csaccounting/bonds_test.go create mode 100644 internal/lido/contracts/csfeedistributor/CSFeeDistributor.abi create mode 100644 internal/lido/contracts/csfeedistributor/CSFeeDistributor.bin create mode 100644 internal/lido/contracts/csfeedistributor/rewards.go create mode 100644 internal/lido/contracts/csfeedistributor/rewards_test.go create mode 100644 internal/lido/contracts/csmodule/CSModule.abi create mode 100644 internal/lido/contracts/csmodule/CSModule.bin create mode 100644 internal/lido/contracts/csmodule/keys.go create mode 100644 internal/lido/contracts/csmodule/keys_test.go create mode 100644 internal/lido/contracts/csmodule/nodeOperator.go create mode 100644 internal/lido/contracts/csmodule/nodeOperator_test.go delete mode 100644 internal/lido/contracts/mevboostrelaylist/MEVBoostRelayAllowedList.go delete mode 100644 internal/lido/contracts/staking_router/StakingRouter.abi delete mode 100644 internal/lido/contracts/staking_router/StakingRouter.bin delete mode 100644 internal/lido/contracts/staking_router/StakingRouter.go diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1b4aaa202..a31a04178 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -45,7 +45,10 @@ jobs: - name: Install mockgen run: make install-mockgen - - name: Generate mocks + - name: Install abigen + run: make install-abigen + + - name: Generate mocks and contracts run: make generate - name: Check go mod status diff --git a/.gitignore b/.gitignore index 256382c25..1462bae42 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,11 @@ build/sedge courtney/ mocks/ + +internal/lido/contracts/csaccounting/CSAccounting.go + +internal/lido/contracts/csfeedistributor/CSFeeDistributor.go + +internal/lido/contracts/csmodule/CSModule.go + +internal/lido/contracts/mevboostrelaylist/MEVBoostRelayAllowedList.go \ No newline at end of file diff --git a/Makefile b/Makefile index 358850d72..1ba3611a0 100644 --- a/Makefile +++ b/Makefile @@ -25,6 +25,11 @@ run-cli: compile ## run cli generate: ## generate go files @go generate ./... + @abigen --abi ./internal/lido/contracts/csmodule/CSModule.abi --bin ./internal/lido/contracts/csmodule/CSModule.bin --pkg csmodule --out ./internal/lido/contracts/csmodule/CSModule.go + @abigen --abi ./internal/lido/contracts/csfeedistributor/CSFeeDistributor.abi --bin ./internal/lido/contracts/csfeedistributor/CSFeeDistributor.bin --pkg csfeedistributor --out ./internal/lido/contracts/csfeedistributor/CSFeeDistributor.go + @abigen --abi ./internal/lido/contracts/csaccounting/CSAccounting.abi --bin ./internal/lido/contracts/csaccounting/CSAccounting.bin --pkg csaccounting --out ./internal/lido/contracts/csaccounting/CSAccounting.go + @abigen --abi ./internal/lido/contracts/mevboostrelaylist/MEVBoostRelayAllowedList.abi --bin ./internal/lido/contracts/mevboostrelaylist/MEVBoostRelayAllowedList.bin --pkg mevboostrelaylist --out ./internal/lido/contracts/mevboostrelaylist/MEVBoostRelayAllowedList.go + test: generate ## run tests @mkdir -p coverage @@ -49,7 +54,10 @@ install-courtney: ## Install courtney for code coverage @(cd courtney && go get ./... && go build courtney.go) @go get ./... -install-deps: | install-gofumpt install-courtney install-mockgen ## Install some project dependencies +install-abigen: ## install abigen + go install github.com/ethereum/go-ethereum/cmd/abigen@latest + +install-deps: | install-gofumpt install-courtney install-mockgen install-abigen ## Install some project dependencies coverage: ## show tests coverage @go tool cover -html=coverage/coverage.out -o coverage/coverage.html diff --git a/configs/public_rpcs.go b/configs/public_rpcs.go index e40ece860..fb745adf2 100644 --- a/configs/public_rpcs.go +++ b/configs/public_rpcs.go @@ -19,7 +19,6 @@ var networkRPCs = map[string]RPC{ NetworkHolesky: { NetworkName: NetworkHolesky, PublicRPCs: []string{ - "https://holesky.drpc.org", "https://ethereum-holesky-rpc.publicnode.com", "https://endpoints.omniatech.io/v1/eth/holesky/public", "https://ethereum-holesky.blockpi.network/v1/rpc/public", diff --git a/docs/docs/quickstart/install-guide.mdx b/docs/docs/quickstart/install-guide.mdx index 1ec830275..5812d0962 100644 --- a/docs/docs/quickstart/install-guide.mdx +++ b/docs/docs/quickstart/install-guide.mdx @@ -101,7 +101,7 @@ Changes made to a profile file may not apply until the next time you log into yo If you want to install Sedge on a Linux machine, we recommend installing some meta-packages to make the build process possible. You can install them with the following command in some of the major platforms: -Ubuntu and Debian based: `sudo apt-get install gcc g++ build-essential` +Ubuntu and Debian based: `sudo apt-get install gcc g++ abigen build-essential` Arch: `sudo pacman -S base-devel` diff --git a/internal/lido/contracts/contract_setup.go b/internal/lido/contracts/contract_setup.go new file mode 100644 index 000000000..051956e4f --- /dev/null +++ b/internal/lido/contracts/contract_setup.go @@ -0,0 +1,52 @@ +/* +Copyright 2022 Nethermind + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package contracts + +import ( + "fmt" + + "github.com/NethermindEth/sedge/configs" + "github.com/ethereum/go-ethereum/ethclient" +) + +func connectToRPCETH(RPCs []string) (*ethclient.Client, error) { + var client *ethclient.Client + var err error + + for _, url := range RPCs { + client, err = ethclient.Dial(url) + if err == nil { + return client, nil + } + } + + return nil, fmt.Errorf("failed to connect to any RPC URL") +} + +func ConnectClient(network string) (*ethclient.Client, error) { + rpcs, err := configs.GetPublicRPCs(network) + if err != nil { + return nil, fmt.Errorf("failed to get public RPC: %w", err) + } + + // Connect to the RPC endpoint + client, err := connectToRPCETH(rpcs) + if err != nil { + return nil, fmt.Errorf("failed to connect to RPC: %w", err) + } + + return client, nil +} diff --git a/internal/lido/contracts/contractsAddress.go b/internal/lido/contracts/contractsAddress.go new file mode 100644 index 000000000..0389d57b9 --- /dev/null +++ b/internal/lido/contracts/contractsAddress.go @@ -0,0 +1,46 @@ +/* +Copyright 2022 Nethermind + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package contracts + +import "github.com/NethermindEth/sedge/configs" + +const ( + // Contract names + CSModule = "csmodule" + CSAccounting = "sepolia" + CSFeeDistributor = "gnosis" + MEVBoostRelayAllowedList = "mevboostrelayallowedlist" +) + +var deployedAddresses = map[string]map[string]string{ + CSModule: { + configs.NetworkHolesky: "0x4562c3e63c2e586cD1651B958C22F88135aCAd4f", + }, + CSAccounting: { + configs.NetworkHolesky: "0xc093e53e8F4b55A223c18A2Da6fA00e60DD5EFE1", + }, + CSFeeDistributor: { + configs.NetworkHolesky: "0xD7ba648C8F72669C6aE649648B516ec03D07c8ED", + }, + MEVBoostRelayAllowedList: { + configs.NetworkMainnet: "0xF95f069F9AD107938F6ba802a3da87892298610E", + configs.NetworkHolesky: "0x2d86C5855581194a386941806E38cA119E50aEA3", + }, +} + +func DeployedAddresses(contractName string) map[string]string { + return deployedAddresses[contractName] +} diff --git a/internal/lido/contracts/csaccounting/CSAccounting.abi b/internal/lido/contracts/csaccounting/CSAccounting.abi new file mode 100644 index 000000000..cf104f3f1 --- /dev/null +++ b/internal/lido/contracts/csaccounting/CSAccounting.abi @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"lidoLocator","type":"address"},{"internalType":"address","name":"communityStakingModule","type":"address"},{"internalType":"uint256","name":"maxCurveLength","type":"uint256"},{"internalType":"uint256","name":"minBondLockRetentionPeriod","type":"uint256"},{"internalType":"uint256","name":"maxBondLockRetentionPeriod","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ElRewardsVaultReceiveFailed","type":"error"},{"inputs":[],"name":"FailedToSendEther","type":"error"},{"inputs":[],"name":"InvalidBondCurveId","type":"error"},{"inputs":[],"name":"InvalidBondCurveLength","type":"error"},{"inputs":[],"name":"InvalidBondCurveMaxLength","type":"error"},{"inputs":[],"name":"InvalidBondCurveValues","type":"error"},{"inputs":[],"name":"InvalidBondLockAmount","type":"error"},{"inputs":[],"name":"InvalidBondLockRetentionPeriod","type":"error"},{"inputs":[],"name":"InvalidInitialisationCurveId","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NodeOperatorDoesNotExist","type":"error"},{"inputs":[],"name":"NotAllowedToRecover","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"NothingToClaim","type":"error"},{"inputs":[],"name":"PauseUntilMustBeInFuture","type":"error"},{"inputs":[],"name":"PausedExpected","type":"error"},{"inputs":[],"name":"ResumedExpected","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[],"name":"SenderIsNotCSM","type":"error"},{"inputs":[],"name":"ZeroAdminAddress","type":"error"},{"inputs":[],"name":"ZeroChargePenaltyRecipientAddress","type":"error"},{"inputs":[],"name":"ZeroFeeDistributorAddress","type":"error"},{"inputs":[],"name":"ZeroLocatorAddress","type":"error"},{"inputs":[],"name":"ZeroModuleAddress","type":"error"},{"inputs":[],"name":"ZeroPauseDuration","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toBurnAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnedAmount","type":"uint256"}],"name":"BondBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChargeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"chargedAmount","type":"uint256"}],"name":"BondCharged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BondClaimedStETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"BondClaimedUnstETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BondClaimedWstETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"bondCurve","type":"uint256[]"}],"name":"BondCurveAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"curveId","type":"uint256"}],"name":"BondCurveSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"curveId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"bondCurve","type":"uint256[]"}],"name":"BondCurveUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BondDepositedETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BondDepositedStETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BondDepositedWstETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"retentionUntil","type":"uint256"}],"name":"BondLockChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BondLockCompensated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"BondLockRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"retentionPeriod","type":"uint256"}],"name":"BondLockRetentionPeriodChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"chargePenaltyRecipient","type":"address"}],"name":"ChargePenaltyRecipientSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC1155Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"ERC721Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EtherRecovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"Resumed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"StETHSharesRecovered","type":"event"},{"inputs":[],"name":"ACCOUNTING_MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CSM","outputs":[{"internalType":"contract ICSModule","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_BOND_CURVE_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIDO","outputs":[{"internalType":"contract ILido","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIDO_LOCATOR","outputs":[{"internalType":"contract ILidoLocator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_BOND_CURVES_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BOND_LOCK_RETENTION_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_CURVE_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_BOND_LOCK_RETENTION_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_CURVE_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_INFINITELY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RECOVERER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESET_BOND_CURVE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESUME_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SET_BOND_CURVE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAWAL_QUEUE","outputs":[{"internalType":"contract IWithdrawalQueue","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WSTETH","outputs":[{"internalType":"contract IWstETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"bondCurve","type":"uint256[]"}],"name":"addBondCurve","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"chargeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"chargePenaltyRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"stETHAmount","type":"uint256"},{"internalType":"address","name":"rewardAddress","type":"address"},{"internalType":"uint256","name":"cumulativeFeeShares","type":"uint256"},{"internalType":"bytes32[]","name":"rewardsProof","type":"bytes32[]"}],"name":"claimRewardsStETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"stEthAmount","type":"uint256"},{"internalType":"address","name":"rewardAddress","type":"address"},{"internalType":"uint256","name":"cumulativeFeeShares","type":"uint256"},{"internalType":"bytes32[]","name":"rewardsProof","type":"bytes32[]"}],"name":"claimRewardsUnstETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"wstETHAmount","type":"uint256"},{"internalType":"address","name":"rewardAddress","type":"address"},{"internalType":"uint256","name":"cumulativeFeeShares","type":"uint256"},{"internalType":"bytes32[]","name":"rewardsProof","type":"bytes32[]"}],"name":"claimRewardsWstETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"compensateLockedBondETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"stETHAmount","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ICSAccounting.PermitInput","name":"permit","type":"tuple"}],"name":"depositStETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"wstETHAmount","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ICSAccounting.PermitInput","name":"permit","type":"tuple"}],"name":"depositWstETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDistributor","outputs":[{"internalType":"contract ICSFeeDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"getActualLockedBond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"getBond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"keys","type":"uint256"},{"components":[{"internalType":"uint256[]","name":"points","type":"uint256[]"},{"internalType":"uint256","name":"trend","type":"uint256"}],"internalType":"struct ICSBondCurve.BondCurve","name":"curve","type":"tuple"}],"name":"getBondAmountByKeysCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"keys","type":"uint256"},{"internalType":"uint256","name":"curveId","type":"uint256"}],"name":"getBondAmountByKeysCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"keysCount","type":"uint256"},{"internalType":"uint256","name":"curveId","type":"uint256"}],"name":"getBondAmountByKeysCountWstETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"keysCount","type":"uint256"},{"components":[{"internalType":"uint256[]","name":"points","type":"uint256[]"},{"internalType":"uint256","name":"trend","type":"uint256"}],"internalType":"struct ICSBondCurve.BondCurve","name":"curve","type":"tuple"}],"name":"getBondAmountByKeysCountWstETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"getBondCurve","outputs":[{"components":[{"internalType":"uint256[]","name":"points","type":"uint256[]"},{"internalType":"uint256","name":"trend","type":"uint256"}],"internalType":"struct ICSBondCurve.BondCurve","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"getBondCurveId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBondLockRetentionPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"getBondShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"getBondSummary","outputs":[{"internalType":"uint256","name":"current","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"getBondSummaryShares","outputs":[{"internalType":"uint256","name":"current","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"curveId","type":"uint256"}],"name":"getCurveInfo","outputs":[{"components":[{"internalType":"uint256[]","name":"points","type":"uint256[]"},{"internalType":"uint256","name":"trend","type":"uint256"}],"internalType":"struct ICSBondCurve.BondCurve","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"components":[{"internalType":"uint256[]","name":"points","type":"uint256[]"},{"internalType":"uint256","name":"trend","type":"uint256"}],"internalType":"struct ICSBondCurve.BondCurve","name":"curve","type":"tuple"}],"name":"getKeysCountByBondAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"curveId","type":"uint256"}],"name":"getKeysCountByBondAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"getLockedBondInfo","outputs":[{"components":[{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"uint128","name":"retentionUntil","type":"uint128"}],"internalType":"struct ICSBondLock.BondLock","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"additionalKeys","type":"uint256"}],"name":"getRequiredBondForNextKeys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"additionalKeys","type":"uint256"}],"name":"getRequiredBondForNextKeysWstETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getResumeSinceTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"getUnbondedKeysCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"getUnbondedKeysCountToEject","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"bondCurve","type":"uint256[]"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"_feeDistributor","type":"address"},{"internalType":"uint256","name":"bondLockRetentionPeriod","type":"uint256"},{"internalType":"address","name":"_chargePenaltyRecipient","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"lockBondETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"pauseFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"penalize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"cumulativeFeeShares","type":"uint256"},{"internalType":"bytes32[]","name":"rewardsProof","type":"bytes32[]"}],"name":"pullFeeRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"recoverERC1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"recoverERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverStETHShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"releaseLockedBondETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renewBurnerAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"resetBondCurve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"curveId","type":"uint256"}],"name":"setBondCurve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_chargePenaltyRecipient","type":"address"}],"name":"setChargePenaltyRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"retention","type":"uint256"}],"name":"setLockedBondRetentionPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"settleLockedBondETH","outputs":[{"internalType":"uint256","name":"settledAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBondShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"curveId","type":"uint256"},{"internalType":"uint256[]","name":"bondCurve","type":"uint256[]"}],"name":"updateBondCurve","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/internal/lido/contracts/csaccounting/CSAccounting.bin b/internal/lido/contracts/csaccounting/CSAccounting.bin new file mode 100644 index 000000000..b918bb990 --- /dev/null +++ b/internal/lido/contracts/csaccounting/CSAccounting.bin @@ -0,0 +1 @@ +0x608060405260043610610463575f3560e01c80638980f11f11610241578063cb11c52711610134578063dcab7f83116100b3578063f3f449c711610078578063f3f449c714610f3c578063f7966efe14610f5b578063f939122314610f7a578063fab382f114610f99578063fee6380514610fb8575f80fd5b8063dcab7f8314610e98578063def82d0214610eb7578063e5220e3f14610eea578063ead42a6914610f09578063f3efecc414610f28575f80fd5b8063d8fe7642116100f9578063d8fe764214610dd5578063d963ae5514610df4578063d9fb643a14610e13578063dbba4b4814610e46578063dc38ea3d14610e79575f80fd5b8063cb11c52714610d45578063cc810cb914610d59578063ce19793f14610d78578063d2fa16a614610d97578063d547741f14610db6575f80fd5b80639c516102116101c0578063b148db6a11610185578063b148db6a14610cb5578063b187bd2614610cd4578063b2d03e4d14610ce8578063b5b624bf14610d07578063ca15c87314610d26575f80fd5b80639c51610214610c1c578063a217fddf146107a1578063a302ee3814610c3b578063acf1c94814610c4f578063ae84975614610c82575f80fd5b80639010d07c116102065780639010d07c14610b8157806391d1485414610ba05780639996522514610bbf5780639a4df8f014610bde5780639b4c6c2714610bfd575f80fd5b80638980f11f14610a955780638b21f17014610ab45780638de2b27214610ae75780638ed5c5d714610b1a5780638f6549ae14610b4d575f80fd5b80634342b3c111610359578063589ff76c116102d857806370903eb91161029d57806370903eb91461096f57806374d70aea1461098e578063819d4cc6146109c157806383316184146109e0578063881fa03c14610a76575f80fd5b8063589ff76c146108c95780635a73bdc8146108dd5780635c654ad9146108f1578063699340f4146109105780636e13f09914610943575f80fd5b80634c7ed3d21161031e5780634c7ed3d214610825578063526352fc1461084457806352d8bfc214610877578063546da24f1461088b578063573b6245146108aa575f80fd5b80634342b3c11461076e578063443fbfef146107a1578063449add1b146107b45780634b2ce9fe146107d35780634bb22a7214610806575f80fd5b8063165123dd116103e55780632e599054116103aa5780632e599054146106cb5780632f2ff15d146106de57806336568abe146106fd578063389ed2671461071c578063433cd6c31461074f575f80fd5b8063165123dd146105ed57806321d439d51461060c578063248a9ca31461063f57806328846981146106795780632de03aa114610698575f80fd5b806306cd0e901161042b57806306cd0e90146105475780630d43e8ad146105665780630f23e7421461059c57806313d1234b146105bb57806315b5c477146105da575f80fd5b8063019c1a4f1461046757806301a5e9e31461048857806301ffc9a7146104ba578063046f7da2146104e95780630569b947146104fd575b5f80fd5b348015610472575f80fd5b50610486610481366004614c69565b610feb565b005b348015610493575f80fd5b506104a76104a2366004614cb1565b611026565b6040519081526020015b60405180910390f35b3480156104c5575f80fd5b506104d96104d4366004614cc8565b611038565b60405190151581526020016104b1565b3480156104f4575f80fd5b5061048661105c565b348015610508575f80fd5b506104a7610517366004614cb1565b5f9081527f8f22e270e477f5becb8793b61d439ab7ae990ed8eba045eb72061c0e6cfe1501602052604090205490565b348015610552575f80fd5b506104a7610561366004614cb1565b611091565b348015610571575f80fd5b505f54610584906001600160a01b031681565b6040516001600160a01b0390911681526020016104b1565b3480156105a7575f80fd5b506104a76105b6366004614d80565b6110c1565b3480156105c6575f80fd5b506104a76105d5366004614e55565b611140565b6104866105e8366004614cb1565b6111de565b3480156105f8575f80fd5b50600154610584906001600160a01b031681565b348015610617575f80fd5b506104a77fb5dffea014b759c493d63b1edaceb942631d6468998125e1b4fe427c9908213481565b34801561064a575f80fd5b506104a7610659366004614cb1565b5f9081525f80516020615385833981519152602052604090206001015490565b348015610684575f80fd5b506104a7610693366004614e55565b61135e565b3480156106a3575f80fd5b506104a77f2fc10cc8ae19568712f7a176fb4978616a610650813c9d05326c34abb62749c781565b6104866106d9366004614e89565b611398565b3480156106e9575f80fd5b506104866106f8366004614eb3565b6113f7565b348015610708575f80fd5b50610486610717366004614eb3565b611427565b348015610727575f80fd5b506104a77f139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d81565b34801561075a575f80fd5b50610486610769366004614ee1565b61145f565b348015610779575f80fd5b506104a77f645c9e6d2a86805cb5a28b1e4751c0dab493df7cf935070ce405489ba1a7bf7281565b3480156107ac575f80fd5b506104a75f81565b3480156107bf575f80fd5b506104866107ce366004614cb1565b611492565b3480156107de575f80fd5b506104a77f000000000000000000000000000000000000000000000000000000000000000a81565b348015610811575f80fd5b506104a7610820366004614cb1565b6114ce565b348015610830575f80fd5b5061048661083f366004614efc565b611546565b34801561084f575f80fd5b506104a77f0000000000000000000000000000000000000000000000000000000001e1338081565b348015610882575f80fd5b50610486611716565b348015610896575f80fd5b506104a76108a5366004614e55565b611772565b3480156108b5575f80fd5b506104a76108c4366004614f4b565b611780565b3480156108d4575f80fd5b506104a76117b5565b3480156108e8575f80fd5b506104866117e3565b3480156108fc575f80fd5b5061048661090b366004614e89565b611938565b34801561091b575f80fd5b506105847f000000000000000000000000c7cc160b58f8bb0bac94b80847e2cf2800565c5081565b34801561094e575f80fd5b5061096261095d366004614cb1565b6119b3565b6040516104b19190614f8a565b34801561097a575f80fd5b50610486610989366004614fe5565b6119fe565b348015610999575f80fd5b507f23f334b9eb5378c2a1573857b8f9d9ca79959360a69e73d3f16848e56ec92101546104a7565b3480156109cc575f80fd5b506104866109db366004614e89565b611a6c565b3480156109eb575f80fd5b50610a4f6109fa366004614cb1565b6040805180820182525f80825260209182018190529283525f805160206153658339815191528152918190208151808301909252546001600160801b038082168352600160801b909104169181019190915290565b6040805182516001600160801b0390811682526020938401511692810192909252016104b1565b348015610a81575f80fd5b50610486610a90366004614e55565b611abb565b348015610aa0575f80fd5b50610486610aaf366004614e89565b611b1d565b348015610abf575f80fd5b506105847f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c9503481565b348015610af2575f80fd5b506105847f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f81565b348015610b25575f80fd5b506104a77f40579467dba486691cc62fd8536d22c6d4dc9cdc7bc716ef2518422aa554c09881565b348015610b58575f80fd5b50610b6c610b67366004614cb1565b611bbe565b604080519283526020830191909152016104b1565b348015610b8c575f80fd5b50610584610b9b366004614e55565b611c78565b348015610bab575f80fd5b506104d9610bba366004614eb3565b611cb0565b348015610bca575f80fd5b50610486610bd9366004614cb1565b611ce6565b348015610be9575f80fd5b506104a7610bf8366004614d80565b611d19565b348015610c08575f80fd5b50610486610c17366004615053565b611d53565b348015610c27575f80fd5b506104a7610c36366004614cb1565b611d68565b348015610c46575f80fd5b506104a75f1981565b348015610c5a575f80fd5b506104a77fb3e25b5404b87e5a838579cb5d7481d61ad96ee284d38ec1e97c07ba64e7f6fc81565b348015610c8d575f80fd5b506104a77f000000000000000000000000000000000000000000000000000000000000000081565b348015610cc0575f80fd5b506104a7610ccf366004614e55565b611d73565b348015610cdf575f80fd5b506104d9611e4f565b348015610cf3575f80fd5b50610486610d02366004614e55565b611e7f565b348015610d12575f80fd5b50610962610d21366004614cb1565b611ebc565b348015610d31575f80fd5b506104a7610d40366004614cb1565b611f80565b348015610d50575f80fd5b506104a7600181565b348015610d64575f80fd5b50610486610d73366004614fe5565b611fb7565b348015610d83575f80fd5b50610b6c610d92366004614cb1565b612025565b348015610da2575f80fd5b506104a7610db1366004614d80565b6120d7565b348015610dc1575f80fd5b50610486610dd0366004614eb3565b61213b565b348015610de0575f80fd5b506104a7610def366004614cb1565b61216b565b348015610dff575f80fd5b50610486610e0e366004614e55565b61217d565b348015610e1e575f80fd5b506105847f0000000000000000000000008d09a4502cc8cf1547ad300e066060d043f6982d81565b348015610e51575f80fd5b506105847f00000000000000000000000028fab2059c713a7f9d8c86db49f9bb0e96af1ef881565b348015610e84575f80fd5b506104a7610e93366004614e55565b6121d0565b348015610ea3575f80fd5b50610486610eb2366004614e55565b6121de565b348015610ec2575f80fd5b507f78c5a36767279da056404c09083fca30cf3ea61c442cfaba6669f76a37393f00546104a7565b348015610ef5575f80fd5b50610486610f04366004614e55565b612231565b348015610f14575f80fd5b506104a7610f23366004614cb1565b612284565b348015610f33575f80fd5b506104866122d8565b348015610f47575f80fd5b50610486610f56366004614cb1565b6123f5565b348015610f66575f80fd5b50610486610f75366004614efc565b612428565b348015610f85575f80fd5b50610486610f94366004614fe5565b6125f8565b348015610fa4575f80fd5b50610486610fb33660046150a2565b612666565b348015610fc3575f80fd5b506104a77fd35e4a788498271198ec69c34f1dc762a1eee8200c111f598da1b3dde946783d81565b7fd35e4a788498271198ec69c34f1dc762a1eee8200c111f598da1b3dde946783d61101581612b1d565b611020848484612b27565b50505050565b5f611032826001612c92565b92915050565b5f6001600160e01b03198216635a05180f60e01b1480611032575061103282612d80565b7f2fc10cc8ae19568712f7a176fb4978616a610650813c9d05326c34abb62749c761108681612b1d565b61108e612db4565b50565b5f9081527f23f334b9eb5378c2a1573857b8f9d9ca79959360a69e73d3f16848e56ec92100602052604090205490565b5f825f036110d057505f611032565b8151518084116110fa576110f56110e8600186615136565b8451602091820201015190565b611138565b60208301516111098286615136565b6111139190615149565b61112e611121600184615136565b8551602091820201015190565b6111389190615160565b949350505050565b5f7f0000000000000000000000008d09a4502cc8cf1547ad300e066060d043f6982d6001600160a01b031663b0e3890061117a8585611772565b6040518263ffffffff1660e01b815260040161119891815260200190565b602060405180830381865afa1580156111b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d79190615173565b9392505050565b336001600160a01b037f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f161461122757604051633bebb4c160e11b815260040160405180910390fd5b5f7f00000000000000000000000028fab2059c713a7f9d8c86db49f9bb0e96af1ef86001600160a01b031663e441d25f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611284573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a8919061518a565b6001600160a01b0316346040515f6040518083038185875af1925050503d805f81146112ef576040519150601f19603f3d011682016040523d82523d5f602084013e6112f4565b606091505b5050905080611316576040516324f09be760e21b815260040160405180910390fd5b6113208234612e09565b817fb6ee6e3aae6776519627b46786a622b642c38cabfe4c97cb34054fd63fc11a233460405161135291815260200190565b60405180910390a25050565b5f7f0000000000000000000000008d09a4502cc8cf1547ad300e066060d043f6982d6001600160a01b031663b0e3890061117a8585611d73565b6113a0612e8f565b336001600160a01b037f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f16146113e957604051633bebb4c160e11b815260040160405180910390fd5b6113f38282612eb7565b5050565b5f8281525f80516020615385833981519152602052604090206001015461141d81612b1d565b6110208383612fa4565b6001600160a01b03811633146114505760405163334bd91960e11b815260040160405180910390fd5b61145a8282612ff9565b505050565b7f40579467dba486691cc62fd8536d22c6d4dc9cdc7bc716ef2518422aa554c09861148981612b1d565b6113f382613045565b7fb5dffea014b759c493d63b1edaceb942631d6468998125e1b4fe427c990821346114bc81612b1d565b6114c5826130c1565b6113f382613164565b5f336001600160a01b037f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f161461151857604051633bebb4c160e11b815260040160405180910390fd5b5f61152283612284565b905080156115375761153483826131ca565b91505b61154083613316565b50919050565b61154e612e8f565b336001600160a01b037f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f161461159757604051633bebb4c160e11b815260040160405180910390fd5b8035158015906116375750604051636eb1769f60e11b81526001600160a01b0385811660048301523060248301528235917f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950349091169063dd62ed3e90604401602060405180830381865afa158015611611573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116359190615173565b105b1561170b576001600160a01b037f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950341663d505accf85308435602086013561168460608801604089016151a5565b6040516001600160e01b031960e088901b1681526001600160a01b0395861660048201529490931660248501526044840191909152606483015260ff166084820152606084013560a4820152608084013560c482015260e4015f604051808303815f87803b1580156116f4575f80fd5b505af1158015611706573d5f803e3d5ffd5b505050505b61102084848461335c565b61171e613459565b73a74528edc289b1a597faf83fcff7eff871cc01d96352d8bfc26040518163ffffffff1660e01b81526004015f6040518083038186803b158015611760575f80fd5b505af4158015611020573d5f803e3d5ffd5b5f6111d7836105b684611ebc565b5f7fd35e4a788498271198ec69c34f1dc762a1eee8200c111f598da1b3dde946783d6117ab81612b1d565b6111388484613482565b5f6117de7fe8b012900cb200ee5dfc3b895a32791b67d12891b09f117814f167a237783a025490565b905090565b6117eb613459565b5f6118147f23f334b9eb5378c2a1573857b8f9d9ca79959360a69e73d3f16848e56ec921015490565b604051633d7ad0b760e21b81523060048201527f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950346001600160a01b03169063f5eb42dc90602401602060405180830381865afa158015611876573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189a9190615173565b6118a49190615136565b6040516389ad944360e01b81526001600160a01b037f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950341660048201526024810182905290915073a74528edc289b1a597faf83fcff7eff871cc01d9906389ad9443906044015f6040518083038186803b15801561191f575f80fd5b505af4158015611931573d5f803e3d5ffd5b5050505050565b611940613459565b604051635c654ad960e01b81526001600160a01b03831660048201526024810182905273a74528edc289b1a597faf83fcff7eff871cc01d990635c654ad9906044015b5f6040518083038186803b158015611999575f80fd5b505af41580156119ab573d5f803e3d5ffd5b505050505050565b60408051808201909152606081525f6020820152611032610d21835f9081527f8f22e270e477f5becb8793b61d439ab7ae990ed8eba045eb72061c0e6cfe1501602052604090205490565b611a06612e8f565b336001600160a01b037f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f1614611a4f57604051633bebb4c160e11b815260040160405180910390fd5b8015611a6157611a61868484846135be565b6119ab868686613640565b611a74613459565b6040516340cea66360e11b81526001600160a01b03831660048201526024810182905273a74528edc289b1a597faf83fcff7eff871cc01d99063819d4cc690604401611983565b336001600160a01b037f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f1614611b0457604051633bebb4c160e11b815260040160405180910390fd5b60015461145a90839083906001600160a01b0316613903565b611b25613459565b7f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950346001600160a01b0316826001600160a01b031603611b77576040516319efe5d760e21b815260040160405180910390fd5b604051638980f11f60e01b81526001600160a01b03831660048201526024810182905273a74528edc289b1a597faf83fcff7eff871cc01d990638980f11f90604401611983565b5f80611bc983611091565b9150611c71611bd784612284565b6040516311d8d20560e31b815260048101869052611c6b907f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f6001600160a01b031690638ec6902890602401602060405180830381865afa158015611c3e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c629190615173565b6105b6876119b3565b01613a04565b9050915091565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604082206111389084613a8e565b5f9182525f80516020615385833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f40579467dba486691cc62fd8536d22c6d4dc9cdc7bc716ef2518422aa554c098611d1081612b1d565b6113f382613a99565b5f7f0000000000000000000000008d09a4502cc8cf1547ad300e066060d043f6982d6001600160a01b031663b0e3890061117a85856110c1565b611d5c846130c1565b611020848484846135be565b5f611032825f612c92565b5f80611d7e8461216b565b90505f611e1c847f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f6001600160a01b0316638ec69028886040518263ffffffff1660e01b8152600401611dd391815260200190565b602060405180830381865afa158015611dee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e129190615173565b611c629190615160565b90505f611e2886612284565b611e329083615160565b9050828111611e41575f611e45565b8281035b9695505050505050565b5f611e787fe8b012900cb200ee5dfc3b895a32791b67d12891b09f117814f167a237783a025490565b4210905090565b7f645c9e6d2a86805cb5a28b1e4751c0dab493df7cf935070ce405489ba1a7bf72611ea981612b1d565b611eb2836130c1565b61145a8383613b57565b60408051808201909152606081525f60208201527f8f22e270e477f5becb8793b61d439ab7ae990ed8eba045eb72061c0e6cfe1500805483908110611f0357611f036151c5565b905f5260205f2090600202016040518060400160405290815f8201805480602002602001604051908101604052809291908181526020018280548015611f6657602002820191905f5260205f20905b815481526020019060010190808311611f52575b505050505081526020016001820154815250509050919050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604082206111d790613be3565b611fbf612e8f565b336001600160a01b037f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f161461200857604051633bebb4c160e11b815260040160405180910390fd5b801561201a5761201a868484846135be565b6119ab868686613bec565b5f806120308361216b565b915061203b83612284565b6040516311d8d20560e31b8152600481018590526120cf907f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f6001600160a01b031690638ec6902890602401602060405180830381865afa1580156120a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120c69190615173565b6105b6866119b3565b019050915091565b8051602001515f908310156120ed57505f611032565b8151515f6120ff611121600184615136565b90508085106121255783602001518186038161211d5761211d6151d9565b048201612132565b61213285855f0151613ec0565b95945050505050565b5f8281525f80516020615385833981519152602052604090206001015461216181612b1d565b6110208383612ff9565b5f61103261217883611091565b613f2c565b336001600160a01b037f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f16146121c657604051633bebb4c160e11b815260040160405180910390fd5b6113f38282612e09565b5f6111d783610db184611ebc565b336001600160a01b037f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f161461222757604051633bebb4c160e11b815260040160405180910390fd5b6113f38282613f7b565b336001600160a01b037f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f161461227a57604051633bebb4c160e11b815260040160405180910390fd5b61145a82826131ca565b5f8181525f8051602061536583398151915260205260408120805442600160801b9091046001600160801b0316116122bc575f6122c8565b80546001600160801b03165b6001600160801b03169392505050565b7f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950346001600160a01b031663095ea7b37f00000000000000000000000028fab2059c713a7f9d8c86db49f9bb0e96af1ef86001600160a01b03166327810b6e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612363573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612387919061518a565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201525f1960248201526044016020604051808303815f875af11580156123d1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061108e91906151ed565b7f139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d61241f81612b1d565b6113f382614014565b612430612e8f565b336001600160a01b037f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f161461247957604051633bebb4c160e11b815260040160405180910390fd5b8035158015906125195750604051636eb1769f60e11b81526001600160a01b0385811660048301523060248301528235917f0000000000000000000000008d09a4502cc8cf1547ad300e066060d043f6982d9091169063dd62ed3e90604401602060405180830381865afa1580156124f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125179190615173565b105b156125ed576001600160a01b037f0000000000000000000000008d09a4502cc8cf1547ad300e066060d043f6982d1663d505accf85308435602086013561256660608801604089016151a5565b6040516001600160e01b031960e088901b1681526001600160a01b0395861660048201529490931660248501526044840191909152606483015260ff166084820152606084013560a4820152608084013560c482015260e4015f604051808303815f87803b1580156125d6575f80fd5b505af11580156125e8573d5f803e3d5ffd5b505050505b611020848484614063565b612600612e8f565b336001600160a01b037f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f161461264957604051633bebb4c160e11b815260040160405180910390fd5b801561265b5761265b868484846135be565b6119ab8686866142e8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156126ab5750825b90505f8267ffffffffffffffff1660011480156126c75750303b155b9050811580156126d5575080155b156126f35760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561271d57845460ff60401b1916600160401b1785555b61272561441b565b61272f8b8b614423565b61273887614457565b6001600160a01b03891661275f57604051633ef39b8160e01b815260040160405180910390fd5b6001600160a01b0388166127865760405163658b92ad60e11b815260040160405180910390fd5b6127905f8a612fa4565b506127db7f645c9e6d2a86805cb5a28b1e4751c0dab493df7cf935070ce405489ba1a7bf727f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f612fa4565b506128267fb5dffea014b759c493d63b1edaceb942631d6468998125e1b4fe427c990821347f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f612fa4565b505f80546001600160a01b0319166001600160a01b038a1617905561284a86613045565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000008d09a4502cc8cf1547ad300e066060d043f6982d811660048301525f1960248301527f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c95034169063095ea7b3906044016020604051808303815f875af11580156128d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128fa91906151ed565b5060405163095ea7b360e01b81526001600160a01b037f000000000000000000000000c7cc160b58f8bb0bac94b80847e2cf2800565c50811660048301525f1960248301527f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c95034169063095ea7b3906044016020604051808303815f875af1158015612987573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129ab91906151ed565b507f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950346001600160a01b031663095ea7b37f00000000000000000000000028fab2059c713a7f9d8c86db49f9bb0e96af1ef86001600160a01b03166327810b6e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a5b919061518a565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201525f1960248201526044016020604051808303815f875af1158015612aa5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ac991906151ed565b508315612b1057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b61108e8133614468565b7f8f22e270e477f5becb8793b61d439ab7ae990ed8eba045eb72061c0e6cfe150080545f1901841115612b6d576040516331e784e960e11b815260040160405180910390fd5b612b7783836144a6565b5f60018311612b86575f612ba4565b83836001198101818110612b9c57612b9c6151c5565b905060200201355b84845f198101818110612bb957612bb96151c5565b9050602002013503905060405180604001604052808585808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050908252506020018290528254839087908110612c1d57612c1d6151c5565b905f5260205f2090600202015f820151815f019080519060200190612c43929190614bcd565b506020820151816001015590505050837f53da7af401538204fd91f2946f2fe85d05224d2cc766fd7aa9fbd8bf4fb4ce9f8484604051612c8492919061523c565b60405180910390a250505050565b6040516311d8d20560e31b8152600481018390525f9081906001600160a01b037f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f1690638ec6902890602401602060405180830381865afa158015612cf9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d1d9190615173565b90505f612d2c61217886611091565b600a0190508315612d58575f612d4186612284565b9050808211612d5557829350505050611032565b90035b5f612d6682610db1886119b3565b9050808311612d75575f611e45565b909103949350505050565b5f6001600160e01b03198216637965db0b60e01b148061103257506301ffc9a760e01b6001600160e01b0319831614611032565b612dbc614590565b427fe8b012900cb200ee5dfc3b895a32791b67d12891b09f117814f167a237783a02556040517f62451d457bc659158be6e6247f56ec1df424a5c7597f71c20c2bc44e0965c8f9905f90a1565b5f612e1383612284565b9050815f03612e3557604051633649e09760e11b815260040160405180910390fd5b81811015612e5657604051633649e09760e11b815260040160405180910390fd5b5f8381525f80516020615365833981519152602052604090205461145a90849084840390600160801b90046001600160801b03166145b5565b612e97611e4f565b15612eb557604051630286f07360e31b815260040160405180910390fd5b565b345f03612ec2575050565b60405163a1903eab60e01b81525f60048201819052906001600160a01b037f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c95034169063a1903eab90349060240160206040518083038185885af1158015612f2a573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612f4f9190615173565b9050612f5b8282614669565b604080516001600160a01b038516815234602082015283917f16ec5116295424dec7fd52c87d9971a963ea7f59f741ad9ad468f0312055dc4991015b60405180910390a2505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081612fd185856146d1565b90508015611138575f858152602083905260409020612ff09085614779565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081613026858561478d565b90508015611138575f858152602083905260409020612ff09085614806565b6001600160a01b03811661306c57604051631279f7c160e21b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f4beaaee83871b066b675515d6a53567e76411f60266703cef934a01905a4d832906020015b60405180910390a150565b7f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f6001600160a01b031663a70c70e46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561311d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131419190615173565b81101561314b5750565b604051633ed893db60e21b815260040160405180910390fd5b5f8181527f8f22e270e477f5becb8793b61d439ab7ae990ed8eba045eb72061c0e6cfe1501602090815260408083208390555191825282917f4642db1736894887bc907d721f20af84d3e585a0a3cea90f41b78b2aa906541b910160405180910390a250565b5f806131d583613a04565b90505f6131e2858361481a565b90507f00000000000000000000000028fab2059c713a7f9d8c86db49f9bb0e96af1ef86001600160a01b03166327810b6e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613240573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613264919061518a565b6040516308c2292560e31b8152306004820152602481018390526001600160a01b0391909116906346114928906044015f604051808303815f87803b1580156132ab575f80fd5b505af11580156132bd573d5f803e3d5ffd5b505050506132ca81613f2c565b9250847f4da924ae7845fe96897faab524b536685b8bbc4d82fbb45c10d941e0f86ade0f6132f784613f2c565b60408051918252602082018790520160405180910390a2505092915050565b5f8181525f8051602061536583398151915260205260408082208290555182917f844ae6b00e8a437dcdde1a634feab3273e08bb5c274a4be3b195b308ae0ba20a91a250565b805f0361336857505050565b5f61337282613a04565b604051636d78045960e01b81526001600160a01b038681166004830152306024830152604482018390529192507f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c9503490911690636d780459906064016020604051808303815f875af11580156133e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061340d9190615173565b506134188382614669565b604080516001600160a01b03861681526020810184905284917fee31ebba29fd5471227e42fd8ca621a892d689901892cb8febb03fe802c3214b9101612c84565b612eb57fb3e25b5404b87e5a838579cb5d7481d61ad96ee284d38ec1e97c07ba64e7f6fc612b1d565b5f7f8f22e270e477f5becb8793b61d439ab7ae990ed8eba045eb72061c0e6cfe15006134ae84846144a6565b5f600184116134bd575f6134db565b848460011981018181106134d3576134d36151c5565b905060200201355b85855f1981018181106134f0576134f06151c5565b90506020020135039050815f0160405180604001604052808787808060200260200160405190810160405280939291908181526020018383602002808284375f920182905250938552505050602091820185905283546001810185559381528190208251805193946002029091019261356c9284920190614bcd565b506020820151816001015550507f1fb1d9b944dd7015e95b7b7a9623c45792e4532badcf9c6e7a284d7d4d0570f085856040516135aa92919061523c565b60405180910390a150545f19019392505050565b5f80546040516321893f7b60e01b81526001600160a01b03909116906321893f7b906135f490889088908890889060040161524f565b6020604051808303815f875af1158015613610573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136349190615173565b90506119318582614669565b5f61364a84614842565b90505f81841061365a578161365c565b835b9050805f0361367e576040516312d37ee560e31b815260040160405180910390fd5b604051633d7ad0b760e21b81523060048201525f907f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950346001600160a01b03169063f5eb42dc90602401602060405180830381865afa1580156136e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137069190615173565b90505f7f0000000000000000000000008d09a4502cc8cf1547ad300e066060d043f6982d6001600160a01b031663ea598cb061374185613f2c565b6040518263ffffffff1660e01b815260040161375f91815260200190565b6020604051808303815f875af115801561377b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061379f9190615173565b604051633d7ad0b760e21b81523060048201529091505f906001600160a01b037f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c95034169063f5eb42dc90602401602060405180830381865afa158015613806573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382a9190615173565b905061383888828503614907565b60405163a9059cbb60e01b81526001600160a01b038781166004830152602482018490527f0000000000000000000000008d09a4502cc8cf1547ad300e066060d043f6982d169063a9059cbb906044015f604051808303815f87803b15801561389f575f80fd5b505af11580156138b1573d5f803e3d5ffd5b5050604080516001600160a01b038a168152602081018690528b93507fe6a8c06447e05a412e5e9581e088941f3994db3d8a9bfd3275b38d77acacafac92500160405180910390a25050505050505050565b5f8061390e84613a04565b905061391a858261481a565b604051638fcb4e5b60e01b81526001600160a01b038581166004830152602482018390529193507f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c9503490911690638fcb4e5b906044016020604051808303815f875af115801561398b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139af9190615173565b50847f8615528474a7bb3a28d9971535d956b79242b8e8fcfb27f3e331270fff088afd6139db83613f2c565b6139e485613f2c565b6040805192835260208301919091520160405180910390a2509392505050565b604051631920845160e01b8152600481018290525f907f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950346001600160a01b0316906319208451906024015b602060405180830381865afa158015613a6a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110329190615173565b5f6111d78383614966565b7f0000000000000000000000000000000000000000000000000000000000000000811080613ae657507f0000000000000000000000000000000000000000000000000000000001e1338081115b15613b045760405163dee7108760e01b815260040160405180910390fd5b807f78c5a36767279da056404c09083fca30cf3ea61c442cfaba6669f76a37393f00556040518181527fdaf5eddbe9ed0768e54cc8f739a9cb86c57fc70da07eff01d9ba886f21a7a4b3906020016130b6565b7f8f22e270e477f5becb8793b61d439ab7ae990ed8eba045eb72061c0e6cfe150080545f1901821115613b9d576040516331e784e960e11b815260040160405180910390fd5b5f838152600182016020526040908190208390555183907f4642db1736894887bc907d721f20af84d3e585a0a3cea90f41b78b2aa906541b90612f979085815260200190565b5f611032825490565b5f613bf684614842565b90505f613c0282613f2c565b8410613c0e5781613c17565b613c1784613a04565b9050805f03613c39576040516312d37ee560e31b815260040160405180910390fd5b6040805160018082528183019092525f9160208083019080368337019050509050613c6382613f2c565b815f81518110613c7557613c756151c5565b6020908102919091010152604051633d7ad0b760e21b81523060048201525f907f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950346001600160a01b03169063f5eb42dc90602401602060405180830381865afa158015613ce4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d089190615173565b90505f7f000000000000000000000000c7cc160b58f8bb0bac94b80847e2cf2800565c506001600160a01b031663d668104284886040518363ffffffff1660e01b8152600401613d5992919061526e565b5f604051808303815f875af1158015613d74573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613d9b91908101906152c4565b604051633d7ad0b760e21b81523060048201529091505f906001600160a01b037f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c95034169063f5eb42dc90602401602060405180830381865afa158015613e02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e269190615173565b9050613e3489828503614907565b887f26673a9d018b21192d08ee14377b798f11b9e5b15ea1559c110265716b8985b588865f81518110613e6957613e696151c5565b6020026020010151855f81518110613e8357613e836151c5565b602090810291909101810151604080516001600160a01b0390951685529184019290925282015260600160405180910390a2505050505050505050565b80515f9081906001190181805b828411613f21575050600282820104602081810286010151808703613efa57506001019250611032915050565b80871015613f0d57600182039250613ecd565b80871115613f1c578160010193505b613ecd565b509195945050505050565b604051630f451f7160e31b8152600481018290525f907f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950346001600160a01b031690637a28fb8890602401613a4f565b7f78c5a36767279da056404c09083fca30cf3ea61c442cfaba6669f76a37393f005f829003613fbd57604051633649e09760e11b815260040160405180910390fd5b5f83815260018201602052604090205442600160801b9091046001600160801b03161115614004575f8381526001820160205260409020546001600160801b031691909101905b61145a8383835f015442016145b5565b61401c612e8f565b805f0361403c5760405163ad58bfc760e01b815260040160405180910390fd5b5f5f19820361404d57505f1961405a565b6140578242615160565b90505b6113f38161498c565b805f0361406f57505050565b6040516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018390527f0000000000000000000000008d09a4502cc8cf1547ad300e066060d043f6982d16906323b872dd906064015f604051808303815f87803b1580156140dc575f80fd5b505af11580156140ee573d5f803e3d5ffd5b5050604051633d7ad0b760e21b81523060048201525f92507f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950346001600160a01b0316915063f5eb42dc90602401602060405180830381865afa158015614156573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061417a9190615173565b604051636f074d1f60e11b8152600481018490529091507f0000000000000000000000008d09a4502cc8cf1547ad300e066060d043f6982d6001600160a01b03169063de0e9a3e906024016020604051808303815f875af11580156141e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142059190615173565b50604051633d7ad0b760e21b81523060048201525f907f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950346001600160a01b03169063f5eb42dc90602401602060405180830381865afa15801561426a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061428e9190615173565b905061429c84838303614669565b604080516001600160a01b03871681526020810185905285917f6576bbc9c5b478bf9717dc3d2bcb485e5ff0727df77c72558727597f3609d3f191015b60405180910390a25050505050565b5f6142f284614842565b90505f6142fe82613f2c565b841061430a5781614313565b61431384613a04565b9050805f03614335576040516312d37ee560e31b815260040160405180910390fd5b61433f8582614907565b604051638fcb4e5b60e01b81526001600160a01b038481166004830152602482018390527f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950341690638fcb4e5b906044016020604051808303815f875af11580156143ab573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143cf9190615173565b50847f3e3a1398fe71575ed0c17a80cd9d46ad684c2c75c2fad7b0e7dde15e78ab22d3846143fc84613f2c565b604080516001600160a01b0390931683526020830191909152016142d9565b612eb5614a27565b61442b614a27565b5f6144368383613482565b9050801561145a57604051634273eaaf60e11b815260040160405180910390fd5b61445f614a27565b61108e81613a99565b6144728282611cb0565b6113f35760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b60018110806144d457507f000000000000000000000000000000000000000000000000000000000000000a81115b156144f257604051638326bf5360e01b815260040160405180910390fd5b81815f818110614504576145046151c5565b905060200201355f0361452a576040516302527aef60e21b815260040160405180910390fd5b60015b8181101561145a5782826001830381811061454a5761454a6151c5565b90506020020135838383818110614563576145636151c5565b9050602002013511614588576040516302527aef60e21b815260040160405180910390fd5b60010161452d565b614598611e4f565b612eb55760405163b047186b60e01b815260040160405180910390fd5b815f036145c55761145a83613316565b60405180604001604052806145d984614a70565b6001600160801b031681526020016145f083614a70565b6001600160801b039081169091525f8581525f8051602061536583398151915260209081526040918290208451948201518416600160801b029490931693909317909155805184815291820183905284917f69a153d448f54b17f05cf3b268a2efab87c94a4727d108c4ca4aa3e5d65113de9101612f97565b805f03614674575050565b5f9182527f23f334b9eb5378c2a1573857b8f9d9ca79959360a69e73d3f16848e56ec9210060205260409091208054820190557f23f334b9eb5378c2a1573857b8f9d9ca79959360a69e73d3f16848e56ec9210180549091019055565b5f5f805160206153858339815191526146ea8484611cb0565b614769575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561471f3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050611032565b5f915050611032565b5092915050565b5f6111d7836001600160a01b038416614aa7565b5f5f805160206153858339815191526147a68484611cb0565b15614769575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050611032565b5f6111d7836001600160a01b038416614af3565b5f8061482584611091565b90508083106148345780614836565b825b91506147728483614907565b5f8061484d83611091565b90505f6148f061485c85612284565b6040516311d8d20560e31b815260048101879052611c6b907f0000000000000000000000004562c3e63c2e586cd1651b958c22f88135acad4f6001600160a01b031690638ec6902890602401602060405180830381865afa1580156148c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148e79190615173565b6105b6886119b3565b90508082116148ff575f611138565b900392915050565b5f9182527f23f334b9eb5378c2a1573857b8f9d9ca79959360a69e73d3f16848e56ec921006020526040909120805482900390557f23f334b9eb5378c2a1573857b8f9d9ca79959360a69e73d3f16848e56ec921018054919091039055565b5f825f01828154811061497b5761497b6151c5565b905f5260205f200154905092915050565b6149b57fe8b012900cb200ee5dfc3b895a32791b67d12891b09f117814f167a237783a02829055565b5f1981036149ee576040515f1981527f32fb7c9891bc4f963c7de9f1186d2a7755c7d6e9f4604dabe1d8bb3027c2f49e906020016130b6565b7f32fb7c9891bc4f963c7de9f1186d2a7755c7d6e9f4604dabe1d8bb3027c2f49e614a194283615136565b6040519081526020016130b6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16612eb557604051631afcd79f60e31b815260040160405180910390fd5b5f6001600160801b03821115614aa3576040516306dfcc6560e41b8152608060048201526024810183905260440161449d565b5090565b5f818152600183016020526040812054614aec57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611032565b505f611032565b5f8181526001830160205260408120548015614769575f614b15600183615136565b85549091505f90614b2890600190615136565b9050808214614b87575f865f018281548110614b4657614b466151c5565b905f5260205f200154905080875f018481548110614b6657614b666151c5565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080614b9857614b98615350565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611032565b828054828255905f5260205f20908101928215614c06579160200282015b82811115614c06578251825591602001919060010190614beb565b50614aa39291505b80821115614aa3575f8155600101614c0e565b5f8083601f840112614c31575f80fd5b50813567ffffffffffffffff811115614c48575f80fd5b6020830191508360208260051b8501011115614c62575f80fd5b9250929050565b5f805f60408486031215614c7b575f80fd5b83359250602084013567ffffffffffffffff811115614c98575f80fd5b614ca486828701614c21565b9497909650939450505050565b5f60208284031215614cc1575f80fd5b5035919050565b5f60208284031215614cd8575f80fd5b81356001600160e01b0319811681146111d7575f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715614d2657614d26614cef565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614d5557614d55614cef565b604052919050565b5f67ffffffffffffffff821115614d7657614d76614cef565b5060051b60200190565b5f8060408385031215614d91575f80fd5b8235915060208084013567ffffffffffffffff80821115614db0575f80fd5b9085019060408288031215614dc3575f80fd5b614dcb614d03565b823582811115614dd9575f80fd5b83019150601f82018813614deb575f80fd5b8135614dfe614df982614d5d565b614d2c565b81815260059190911b8301850190858101908a831115614e1c575f80fd5b938601935b82851015614e3a57843582529386019390860190614e21565b83525050918301359282019290925292959294509192505050565b5f8060408385031215614e66575f80fd5b50508035926020909101359150565b6001600160a01b038116811461108e575f80fd5b5f8060408385031215614e9a575f80fd5b8235614ea581614e75565b946020939093013593505050565b5f8060408385031215614ec4575f80fd5b823591506020830135614ed681614e75565b809150509250929050565b5f60208284031215614ef1575f80fd5b81356111d781614e75565b5f805f80848603610100811215614f11575f80fd5b8535614f1c81614e75565b9450602086013593506040860135925060a0605f1982011215614f3d575f80fd5b509295919450926060019150565b5f8060208385031215614f5c575f80fd5b823567ffffffffffffffff811115614f72575f80fd5b614f7e85828601614c21565b90969095509350505050565b602080825282516040838301528051606084018190525f9291820190839060808601905b80831015614fce5783518252928401926001929092019190840190614fae565b508387015160408701528094505050505092915050565b5f805f805f8060a08789031215614ffa575f80fd5b8635955060208701359450604087013561501381614e75565b935060608701359250608087013567ffffffffffffffff811115615035575f80fd5b61504189828a01614c21565b979a9699509497509295939492505050565b5f805f8060608587031215615066575f80fd5b8435935060208501359250604085013567ffffffffffffffff81111561508a575f80fd5b61509687828801614c21565b95989497509550505050565b5f805f805f8060a087890312156150b7575f80fd5b863567ffffffffffffffff8111156150cd575f80fd5b6150d989828a01614c21565b90975095505060208701356150ed81614e75565b935060408701356150fd81614e75565b925060608701359150608087013561511481614e75565b809150509295509295509295565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561103257611032615122565b808202811582820484141761103257611032615122565b8082018082111561103257611032615122565b5f60208284031215615183575f80fd5b5051919050565b5f6020828403121561519a575f80fd5b81516111d781614e75565b5f602082840312156151b5575f80fd5b813560ff811681146111d7575f80fd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f602082840312156151fd575f80fd5b815180151581146111d7575f80fd5b8183525f6001600160fb1b03831115615223575f80fd5b8260051b80836020870137939093016020019392505050565b602081525f61113860208301848661520c565b848152836020820152606060408201525f611e4560608301848661520c565b604080825283519082018190525f906020906060840190828701845b828110156152a65781518452928401929084019060010161528a565b50505080925050506001600160a01b03831660208301529392505050565b5f60208083850312156152d5575f80fd5b825167ffffffffffffffff8111156152eb575f80fd5b8301601f810185136152fb575f80fd5b8051615309614df982614d5d565b81815260059190911b82018301908381019087831115615327575f80fd5b928401925b828410156153455783518252928401929084019061532c565b979650505050505050565b634e487b7160e01b5f52603160045260245ffdfe78c5a36767279da056404c09083fca30cf3ea61c442cfaba6669f76a37393f0102dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a164736f6c6343000818000a diff --git a/internal/lido/contracts/csaccounting/bonds.go b/internal/lido/contracts/csaccounting/bonds.go new file mode 100644 index 000000000..4e5542b4a --- /dev/null +++ b/internal/lido/contracts/csaccounting/bonds.go @@ -0,0 +1,96 @@ +/* +Copyright 2022 Nethermind + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package csaccounting + +import ( + "fmt" + "math/big" + + "github.com/NethermindEth/sedge/internal/lido/contracts" + "github.com/ethereum/go-ethereum/common" +) + +// BondInfo : Struct represent bond info of Node Operator +type BondInfo struct { + Current *big.Int + Required *big.Int + Excess *big.Int + Missed *big.Int +} + +/* +BondSummary : +This function is responsible for: +retrieving bond info for Lido CSM node +params :- +network (string): The name of the network (e.g."holesky"). +nodeID (*big.Int): Node Operator ID +returns :- +a. BondInfo +Struct that include bond info +b. error +Error if any +*/ +func BondSummary(network string, nodeID *big.Int) (BondInfo, error) { + var bondsInfo BondInfo + if nodeID.Sign() < 0 { + return bondsInfo, fmt.Errorf("node ID value out-of-bounds: can't be negative") + } + + contract, err := csAccountingContract(network) + if err != nil { + return bondsInfo, fmt.Errorf("failed to call csAccountingContract: %w", err) + } + + result, err := contract.GetBondSummary(nil, nodeID) + if err != nil { + return bondsInfo, fmt.Errorf("failed to call GetBondSummary: %w", err) + } + bondsInfo.Current = result.Current + bondsInfo.Required = result.Required + + // Calculate excess and missed bond amounts + excess := new(big.Int).Sub(bondsInfo.Current, bondsInfo.Required) + missed := new(big.Int).Sub(bondsInfo.Required, bondsInfo.Current) + + // Set to zero if negative + if excess.Sign() < 0 { + excess.SetInt64(0) + } + if missed.Sign() < 0 { + missed.SetInt64(0) + } + + bondsInfo.Excess = excess + bondsInfo.Missed = missed + return bondsInfo, nil +} + +func csAccountingContract(network string) (*Csaccounting, error) { + client, err := contracts.ConnectClient(network) + if err != nil { + return nil, fmt.Errorf("failed to connect to client: %w", err) + } + defer client.Close() + + contractName := contracts.CSAccounting + address := common.HexToAddress(contracts.DeployedAddresses(contractName)[network]) + contract, err := NewCsaccounting(address, client) + if err != nil { + return nil, fmt.Errorf("failed to create CSAccounting instance: %w", err) + } + return contract, nil +} diff --git a/internal/lido/contracts/csaccounting/bonds_test.go b/internal/lido/contracts/csaccounting/bonds_test.go new file mode 100644 index 000000000..9470edcab --- /dev/null +++ b/internal/lido/contracts/csaccounting/bonds_test.go @@ -0,0 +1,73 @@ +/* +Copyright 2022 Nethermind + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package csaccounting + +import ( + "io" + "log" + "math/big" + "testing" +) + +func TestBondSummary(t *testing.T) { + log.SetOutput(io.Discard) + tcs := []struct { + name string + network string + nodeID *big.Int + invalidID bool + }{ + { + "BondSummary with valid ID, Holesky #1", "holesky", big.NewInt(2), false, + }, + { + "BondSummary with valid ID, Holesky #2", "holesky", big.NewInt(14), false, + }, + { + "BondSummary with invalid ID, Holesky ", "holesky", big.NewInt(-6), true, + }, + } + for _, tc := range tcs { + t.Run(tc.name, func(t *testing.T) { + var expectedExcess, expectedMissed *big.Int + bond, err := BondSummary(tc.network, tc.nodeID) + if err != nil && !tc.invalidID { + t.Fatalf("failed to call BondsSummary: %v", err) + } else if err != nil && tc.invalidID { + t.Skipf("Expected error: %v", err) + } + + // if current amount is greater than required + if bond.Current.Cmp(bond.Required) == 1 { + expectedExcess = new(big.Int).Sub(bond.Current, bond.Required) + expectedMissed = big.NewInt(0) + } else if bond.Current.Cmp(bond.Required) == -1 { + expectedExcess = big.NewInt(0) + expectedMissed = new(big.Int).Sub(bond.Required, bond.Current) + } else { + expectedExcess = big.NewInt(0) + expectedMissed = big.NewInt(0) + } + + if bond.Excess.Cmp(expectedExcess) != 0 { + t.Errorf("not same excess bond amount, expected %v, got: %v", expectedExcess, bond.Excess) + } + if bond.Missed.Cmp(expectedMissed) != 0 { + t.Errorf("not same missed bond amount, expected %v, got: %v", expectedMissed, bond.Missed) + } + }) + } +} diff --git a/internal/lido/contracts/csfeedistributor/CSFeeDistributor.abi b/internal/lido/contracts/csfeedistributor/CSFeeDistributor.abi new file mode 100644 index 000000000..c842ca6e4 --- /dev/null +++ b/internal/lido/contracts/csfeedistributor/CSFeeDistributor.abi @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"stETH","type":"address"},{"internalType":"address","name":"accounting","type":"address"},{"internalType":"address","name":"oracle","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"FailedToSendEther","type":"error"},{"inputs":[],"name":"FeeSharesDecrease","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[],"name":"InvalidShares","type":"error"},{"inputs":[],"name":"InvalidTreeCID","type":"error"},{"inputs":[],"name":"InvalidTreeRoot","type":"error"},{"inputs":[],"name":"NotAccounting","type":"error"},{"inputs":[],"name":"NotAllowedToRecover","type":"error"},{"inputs":[],"name":"NotEnoughShares","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"NotOracle","type":"error"},{"inputs":[],"name":"ZeroAccountingAddress","type":"error"},{"inputs":[],"name":"ZeroAdminAddress","type":"error"},{"inputs":[],"name":"ZeroOracleAddress","type":"error"},{"inputs":[],"name":"ZeroStEthAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalClaimableShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"treeRoot","type":"bytes32"},{"indexed":false,"internalType":"string","name":"treeCid","type":"string"}],"name":"DistributionDataUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC1155Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"ERC721Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EtherRecovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"FeeDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"StETHSharesRecovered","type":"event"},{"inputs":[],"name":"ACCOUNTING","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ORACLE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RECOVERER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STETH","outputs":[{"internalType":"contract IStETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"distributeFees","outputs":[{"internalType":"uint256","name":"sharesToDistribute","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"distributedShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"getFeesToDistribute","outputs":[{"internalType":"uint256","name":"sharesToDistribute","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"hashLeaf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pendingSharesToDistribute","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_treeRoot","type":"bytes32"},{"internalType":"string","name":"_treeCid","type":"string"},{"internalType":"uint256","name":"distributed","type":"uint256"}],"name":"processOracleReport","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"recoverERC1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"recoverERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimableShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treeCid","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treeRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/internal/lido/contracts/csfeedistributor/CSFeeDistributor.bin b/internal/lido/contracts/csfeedistributor/CSFeeDistributor.bin new file mode 100644 index 000000000..4ebf73c8a --- /dev/null +++ b/internal/lido/contracts/csfeedistributor/CSFeeDistributor.bin @@ -0,0 +1 @@ +0x608060405234801561000f575f80fd5b50600436106101a1575f3560e01c8063819d4cc6116100f3578063c4d66de811610093578063d547741f1161006e578063d547741f146103b7578063e00bfe50146103ca578063ea6301ab146103f1578063fe3c9b9b14610410575f80fd5b8063c4d66de814610389578063ca15c8731461039c578063d257cf2a146103af575f80fd5b806391d14854116100ce57806391d1485414610335578063a217fddf14610348578063acf1c9481461034f578063b66cf05814610376575f80fd5b8063819d4cc6146102fc5780638980f11f1461030f5780639010d07c14610322575f80fd5b806338013f021161015e5780635c654ad9116101395780635c654ad91461029c5780635e8e8f6f146102af5780636dc3f2bd146102c25780637e9f27ad146102e9575f80fd5b806338013f021461024c57806347d17d9d1461028b57806352d8bfc214610294575f80fd5b806301ffc9a7146101a557806314dc6c14146101cd57806321893f7b146101e3578063248a9ca3146101f65780632f2ff15d1461022457806336568abe14610239575b5f80fd5b6101b86101b336600461129e565b610425565b60405190151581526020015b60405180910390f35b6101d55f5481565b6040519081526020016101c4565b6101d56101f13660046112c5565b61044f565b6101d5610204366004611341565b5f9081525f805160206116cc833981519152602052604090206001015490565b610237610232366004611373565b6105e8565b005b610237610247366004611373565b61061e565b6102737f000000000000000000000000af57326c7d513085051b50912d51809ecc5d98ee81565b6040516001600160a01b0390911681526020016101c4565b6101d560035481565b610237610656565b6102376102aa36600461139d565b6106b2565b6101d56102bd3660046112c5565b61072d565b6102737f000000000000000000000000c093e53e8f4b55a223c18a2da6fa00e60dd5efe181565b6101d56102f73660046113c5565b6107a0565b61023761030a36600461139d565b6107f1565b61023761031d36600461139d565b610840565b6102736103303660046113c5565b6108e1565b6101b8610343366004611373565b610919565b6101d55f81565b6101d57fb3e25b5404b87e5a838579cb5d7481d61ad96ee284d38ec1e97c07ba64e7f6fc81565b6102376103843660046113e5565b61094f565b610237610397366004611460565b610b0f565b6101d56103aa366004611341565b610c4d565b6101d5610c8b565b6102376103c5366004611373565b610d26565b6102737f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c9503481565b6101d56103ff366004611341565b60026020525f908152604090205481565b610418610d56565b6040516101c49190611479565b5f6001600160e01b03198216635a05180f60e01b1480610449575061044982610de2565b92915050565b5f336001600160a01b037f000000000000000000000000c093e53e8f4b55a223c18a2da6fa00e60dd5efe11614610499576040516318d9f40960e31b815260040160405180910390fd5b6104a58585858561072d565b9050805f036104b557505f6105e0565b8060035410156104d857604051633c57b48560e21b815260040160405180910390fd5b6003805482900390555f858152600260205260409081902080548301905551638fcb4e5b60e01b81526001600160a01b037f000000000000000000000000c093e53e8f4b55a223c18a2da6fa00e60dd5efe181166004830152602482018390527f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950341690638fcb4e5b906044016020604051808303815f875af1158015610580573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a491906114c5565b50847f61930a6c1553eab59d5766da6e1bab8eba982aec848ae7683452f4a6423b6e4a826040516105d791815260200190565b60405180910390a25b949350505050565b5f8281525f805160206116cc833981519152602052604090206001015461060e81610e16565b6106188383610e23565b50505050565b6001600160a01b03811633146106475760405163334bd91960e11b815260040160405180910390fd5b6106518282610e78565b505050565b61065e610ec4565b73a74528edc289b1a597faf83fcff7eff871cc01d96352d8bfc26040518163ffffffff1660e01b81526004015f6040518083038186803b1580156106a0575f80fd5b505af4158015610618573d5f803e3d5ffd5b6106ba610ec4565b604051635c654ad960e01b81526001600160a01b03831660048201526024810182905273a74528edc289b1a597faf83fcff7eff871cc01d990635c654ad9906044015b5f6040518083038186803b158015610713575f80fd5b505af4158015610725573d5f803e3d5ffd5b505050505050565b5f8061074584845f546107408a8a6107a0565b610eef565b905080610765576040516309bde33960e01b815260040160405180910390fd5b5f868152600260205260409020548581111561079457604051636096ce8160e11b815260040160405180910390fd5b90940395945050505050565b60408051602081018490529081018290525f9060600160408051601f198184030181528282528051602091820120908301520160405160208183030381529060405280519060200120905092915050565b6107f9610ec4565b6040516340cea66360e11b81526001600160a01b03831660048201526024810182905273a74528edc289b1a597faf83fcff7eff871cc01d99063819d4cc6906044016106fd565b610848610ec4565b7f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950346001600160a01b0316826001600160a01b03160361089a576040516319efe5d760e21b815260040160405180910390fd5b604051638980f11f60e01b81526001600160a01b03831660048201526024810182905273a74528edc289b1a597faf83fcff7eff871cc01d990638980f11f906044016106fd565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604082206105e09084610f06565b5f9182525f805160206116cc833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b336001600160a01b037f000000000000000000000000af57326c7d513085051b50912d51809ecc5d98ee161461099857604051631bc2178f60e01b815260040160405180910390fd5b604051633d7ad0b760e21b81523060048201527f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950346001600160a01b03169063f5eb42dc90602401602060405180830381865afa1580156109fa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a1e91906114c5565b81600354610a2c91906114f0565b1115610a4b57604051636edcc52360e01b815260040160405180910390fd5b8015610618575f829003610a71576040516272916d60e51b815260040160405180910390fd5b83610a8f576040516357e86a3360e01b815260040160405180910390fd5b5f548403610ab0576040516357e86a3360e01b815260040160405180910390fd5b60038054820190555f8490556001610ac983858361159a565b507f26dec7cc117e9b3907dc1f90d2dc5f6e04dbb9f285f5898be2c82ec524dcd424600354858585604051610b019493929190611654565b60405180910390a150505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f81158015610b545750825b90505f8267ffffffffffffffff166001148015610b705750303b155b905081158015610b7e575080155b15610b9c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610bc657845460ff60401b1916600160401b1785555b610bce610f11565b6001600160a01b038616610bf557604051633ef39b8160e01b815260040160405180910390fd5b610bff5f87610e23565b50831561072557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610c8490610f19565b9392505050565b600354604051633d7ad0b760e21b81523060048201525f91906001600160a01b037f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c95034169063f5eb42dc90602401602060405180830381865afa158015610cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1791906114c5565b610d219190611690565b905090565b5f8281525f805160206116cc8339815191526020526040902060010154610d4c81610e16565b6106188383610e78565b60018054610d6390611517565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8f90611517565b8015610dda5780601f10610db157610100808354040283529160200191610dda565b820191905f5260205f20905b815481529060010190602001808311610dbd57829003601f168201915b505050505081565b5f6001600160e01b03198216637965db0b60e01b148061044957506301ffc9a760e01b6001600160e01b0319831614610449565b610e208133610f22565b50565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081610e508585610f63565b905080156105e0575f858152602083905260409020610e6f9085611004565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081610ea58585611018565b905080156105e0575f858152602083905260409020610e6f9085611091565b610eed7fb3e25b5404b87e5a838579cb5d7481d61ad96ee284d38ec1e97c07ba64e7f6fc610e16565b565b5f82610efc8686856110a5565b1495945050505050565b5f610c8483836110dd565b610eed611103565b5f610449825490565b610f2c8282610919565b610f5f5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b5f5f805160206116cc833981519152610f7c8484610919565b610ffb575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610fb13390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610449565b5f915050610449565b5f610c84836001600160a01b03841661114c565b5f5f805160206116cc8339815191526110318484610919565b15610ffb575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610449565b5f610c84836001600160a01b038416611198565b5f81815b84811015610e6f576110d3828787848181106110c7576110c76116a3565b90506020020135611272565b91506001016110a9565b5f825f0182815481106110f2576110f26116a3565b905f5260205f200154905092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610eed57604051631afcd79f60e31b815260040160405180910390fd5b5f81815260018301602052604081205461119157508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610449565b505f610449565b5f8181526001830160205260408120548015610ffb575f6111ba600183611690565b85549091505f906111cd90600190611690565b905080821461122c575f865f0182815481106111eb576111eb6116a3565b905f5260205f200154905080875f01848154811061120b5761120b6116a3565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061123d5761123d6116b7565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610449565b5f81831061128c575f828152602084905260409020610c84565b5f838152602083905260409020610c84565b5f602082840312156112ae575f80fd5b81356001600160e01b031981168114610c84575f80fd5b5f805f80606085870312156112d8575f80fd5b8435935060208501359250604085013567ffffffffffffffff808211156112fd575f80fd5b818701915087601f830112611310575f80fd5b81358181111561131e575f80fd5b8860208260051b8501011115611332575f80fd5b95989497505060200194505050565b5f60208284031215611351575f80fd5b5035919050565b80356001600160a01b038116811461136e575f80fd5b919050565b5f8060408385031215611384575f80fd5b8235915061139460208401611358565b90509250929050565b5f80604083850312156113ae575f80fd5b6113b783611358565b946020939093013593505050565b5f80604083850312156113d6575f80fd5b50508035926020909101359150565b5f805f80606085870312156113f8575f80fd5b84359350602085013567ffffffffffffffff80821115611416575f80fd5b818701915087601f830112611429575f80fd5b813581811115611437575f80fd5b886020828501011115611448575f80fd5b95986020929092019750949560400135945092505050565b5f60208284031215611470575f80fd5b610c8482611358565b5f602080835283518060208501525f5b818110156114a557858101830151858201604001528201611489565b505f604082860101526040601f19601f8301168501019250505092915050565b5f602082840312156114d5575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610449576104496114dc565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061152b57607f821691505b60208210810361154957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561065157805f5260205f20601f840160051c810160208510156115745750805b601f840160051c820191505b81811015611593575f8155600101611580565b5050505050565b67ffffffffffffffff8311156115b2576115b2611503565b6115c6836115c08354611517565b8361154f565b5f601f8411600181146115f7575f85156115e05750838201355b5f19600387901b1c1916600186901b178355611593565b5f83815260208120601f198716915b828110156116265786850135825560209485019460019092019101611606565b5086821015611642575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b84815283602082015260606040820152816060820152818360808301375f818301608090810191909152601f909201601f191601019392505050565b81810381811115610449576104496114dc565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfe02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a164736f6c6343000818000a \ No newline at end of file diff --git a/internal/lido/contracts/csfeedistributor/rewards.go b/internal/lido/contracts/csfeedistributor/rewards.go new file mode 100644 index 000000000..f57476e26 --- /dev/null +++ b/internal/lido/contracts/csfeedistributor/rewards.go @@ -0,0 +1,170 @@ +/* +Copyright 2022 Nethermind + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package csfeedistributor + +import ( + "encoding/json" + "fmt" + "io" + "math/big" + "time" + + "github.com/NethermindEth/sedge/internal/lido/contracts" + bond "github.com/NethermindEth/sedge/internal/lido/contracts/csaccounting" + "github.com/NethermindEth/sedge/internal/utils" + "github.com/ethereum/go-ethereum/common" +) + +// Tree : struct that reperesents Merkle Tree data +type Tree struct { + Format string `json:"format"` + LeafEncoding []string `json:"leafEncoding"` + Tree []string `json:"tree"` + Values []struct { + Value []interface{} `json:"value"` + TreeIndex int `json:"treeIndex"` + } `json:"values"` +} + +/* +Rewards : +This function is responsible for: +retrieving non-claimed rewards for Lido CSM node +params :- +network (string): The name of the network (e.g."holesky"). +nodeID (*big.Int): Node Operator ID +returns :- +a. *big.Int +Non-claimed rewards +b. error +Error if any +*/ +func Rewards(network string, nodeID *big.Int) (*big.Int, error) { + var rewards *big.Int + if nodeID.Sign() < 0 { + return nil, fmt.Errorf("node ID value out-of-bounds: can't be negative") + } + + treeCID, err := treeCID(network) + if err != nil { + return nil, fmt.Errorf("failed to call treeCID: %w", err) + } + + shares, err := cumulativeFeeShares(treeCID, nodeID) + if err != nil { + return nil, fmt.Errorf("failed to call cumulativeFeeShares: %w", err) + } + + bondInfo, err := bond.BondSummary(network, nodeID) + if err != nil { + return nil, fmt.Errorf("failed to call BondSummary: %w", err) + } + + rewards = new(big.Int).Add(bondInfo.Excess, shares) + return rewards, nil +} + +func cumulativeFeeShares(treeCID string, nodeID *big.Int) (*big.Int, error) { + // Get tree data from IPFS + treeData, err := treeData(treeCID) + if err != nil { + return nil, fmt.Errorf("failed to call treeData: %v", err) + } + + // Compare nodeOperatorID in tree with nodeId to get shares + // Binary search for the nodeOperatorId + low, high := 0, len(treeData.Values)-1 + for low <= high { + mid := (low + high) / 2 + nodeOperatorId, err := convertTreeValuesToBigInt(treeData.Values[mid].Value[0]) + if err != nil { + return nil, fmt.Errorf("failed to convert nodeOperatorId: %v", err) + } + cmp := nodeOperatorId.Cmp(nodeID) + if cmp == 0 { + // Node operator ID matches, return the shares + shares, err := convertTreeValuesToBigInt(treeData.Values[mid].Value[1]) + if err != nil { + return nil, fmt.Errorf("failed to convert shares: %v", err) + } + return shares, nil + } else if cmp < 0 { + low = mid + 1 + } else { + high = mid - 1 + } + } + return nil, fmt.Errorf("invalid nodeId") +} + +func treeCID(network string) (string, error) { + var treeCIDString string + contract, err := csFeeDistributorContract(network) + if err != nil { + return treeCIDString, fmt.Errorf("failed to call csFeeDistributorContract: %w", err) + } + + treeCIDString, err = contract.TreeCid(nil) + if err != nil { + return treeCIDString, fmt.Errorf("failed to call TreeCid: %w", err) + } + return treeCIDString, nil +} + +func treeData(treeCID string) (Tree, error) { + var treeData Tree + gatewayURL := fmt.Sprintf("https://ipfs.io/ipfs/%s", treeCID) // Public gateway URL + resp, err := utils.GetRequest(gatewayURL, time.Second) + if err != nil { + return treeData, fmt.Errorf("failed to connect to gatewayURL: %w", err) + } + defer resp.Body.Close() + + // Read and print the data + data, err := io.ReadAll(resp.Body) + if err != nil { + return treeData, fmt.Errorf("failed to read data: %w", err) + } + + // Collect data in treeData struct + if err := json.Unmarshal(data, &treeData); err != nil { + return treeData, fmt.Errorf("failed to unmarshal JSON: %w", err) + } + return treeData, nil +} + +// Converts nodeOperatorId and shares from Tree.Values.Value interface +func convertTreeValuesToBigInt(value interface{}) (*big.Int, error) { + bigIntValue := new(big.Int) + bigIntValue.SetString(fmt.Sprintf("%.0f", value), 10) + return bigIntValue, nil +} + +func csFeeDistributorContract(network string) (*Csfeedistributor, error) { + client, err := contracts.ConnectClient(network) + if err != nil { + return nil, fmt.Errorf("failed to connect to client: %w", err) + } + defer client.Close() + + contractName := contracts.CSFeeDistributor + address := common.HexToAddress(contracts.DeployedAddresses(contractName)[network]) + contract, err := NewCsfeedistributor(address, client) + if err != nil { + return nil, fmt.Errorf("failed to create CSFeeDistributor instance: %w", err) + } + return contract, nil +} diff --git a/internal/lido/contracts/csfeedistributor/rewards_test.go b/internal/lido/contracts/csfeedistributor/rewards_test.go new file mode 100644 index 000000000..ac839a9ad --- /dev/null +++ b/internal/lido/contracts/csfeedistributor/rewards_test.go @@ -0,0 +1,115 @@ +/* +Copyright 2022 Nethermind + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package csfeedistributor + +import ( + "io" + "log" + "math/big" + "testing" + + bond "github.com/NethermindEth/sedge/internal/lido/contracts/csaccounting" +) + +func TestRewards(t *testing.T) { + log.SetOutput(io.Discard) + tcs := []struct { + name string + network string + nodeID *big.Int + wantErr bool + }{ + { + name: "Rewards for nodeID 1, Holesky", + network: "holesky", + nodeID: big.NewInt(1), + wantErr: false, + }, + { + name: "Rewards for nodeID 182, Holesky", + network: "holesky", + nodeID: big.NewInt(182), + wantErr: false, + }, + { + name: "Rewards for nodeID 113, Holesky", + network: "holesky", + nodeID: big.NewInt(113), + wantErr: false, + }, + { + name: "Invalid nodeID, Holesky", + network: "holesky", + nodeID: big.NewInt(-3), + wantErr: true, + }, + } + for _, tc := range tcs { + t.Run(tc.name, func(t *testing.T) { + treeCID, err := treeCID(tc.network) + if err != nil { + t.Fatalf("failed to call treeCID: %v", err) + } + + rewards, err := Rewards(tc.network, tc.nodeID) + if err != nil && !tc.wantErr { + t.Fatalf("failed to call Rewards: %v", err) + } + + fees, err := cumulativeFeeShares(treeCID, tc.nodeID) + if err != nil && !tc.wantErr { + t.Fatalf("failed to call cumulativeFeeShares: %v", err) + } + + bond, err := bond.BondSummary(tc.network, tc.nodeID) + if err != nil && !tc.wantErr { + t.Fatalf("failed to call BondSummary: %v", err) + } + + if rewards == nil && tc.wantErr { + t.Skipf("Expected nil value for rewards") + } else if rewards == nil && !tc.wantErr { + t.Fatalf("invalid rewards value: expected a value, got nil") + } + expectedRewards := new(big.Int).Add(bond.Excess, fees) + if rewards.Cmp(expectedRewards) != 0 { + t.Errorf("invalid rewards amount, expected %v, got: %v", expectedRewards, rewards) + } + }) + } +} + +func TestConvertTreeValuesToBigInt(t *testing.T) { + tcs := []struct { + input interface{} + expected *big.Int + }{ + {12345.0, big.NewInt(12345)}, + {67890.0, big.NewInt(67890)}, + {0.0, big.NewInt(0)}, + } + + for _, tc := range tcs { + result, err := convertTreeValuesToBigInt(tc.input) + if err != nil { + t.Errorf("convertTreeValuesToBigInt(%v) returned error: %v", tc.input, err) + } + + if result.Cmp(tc.expected) != 0 { + t.Errorf("convertTreeValuesToBigInt(%v) = %v; expected %v", tc.input, result, tc.expected) + } + } +} diff --git a/internal/lido/contracts/csmodule/CSModule.abi b/internal/lido/contracts/csmodule/CSModule.abi new file mode 100644 index 000000000..560babe6c --- /dev/null +++ b/internal/lido/contracts/csmodule/CSModule.abi @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"bytes32","name":"moduleType","type":"bytes32"},{"internalType":"uint256","name":"minSlashingPenaltyQuotient","type":"uint256"},{"internalType":"uint256","name":"elRewardsStealingFine","type":"uint256"},{"internalType":"uint256","name":"maxKeysPerOperatorEA","type":"uint256"},{"internalType":"address","name":"lidoLocator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"AlreadyActivated","type":"error"},{"inputs":[],"name":"AlreadyProposed","type":"error"},{"inputs":[],"name":"AlreadySubmitted","type":"error"},{"inputs":[],"name":"AlreadyWithdrawn","type":"error"},{"inputs":[],"name":"EmptyKey","type":"error"},{"inputs":[],"name":"ExitedKeysDecrease","type":"error"},{"inputs":[],"name":"ExitedKeysHigherThanTotalDeposited","type":"error"},{"inputs":[],"name":"FailedToSendEther","type":"error"},{"inputs":[],"name":"InvalidAmount","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"InvalidInput","type":"error"},{"inputs":[],"name":"InvalidKeysCount","type":"error"},{"inputs":[],"name":"InvalidLength","type":"error"},{"inputs":[],"name":"InvalidReportData","type":"error"},{"inputs":[],"name":"InvalidVetKeysPointer","type":"error"},{"inputs":[],"name":"MaxSigningKeysCountExceeded","type":"error"},{"inputs":[],"name":"MethodCallIsNotAllowed","type":"error"},{"inputs":[],"name":"NodeOperatorDoesNotExist","type":"error"},{"inputs":[],"name":"NotAllowedToJoinYet","type":"error"},{"inputs":[],"name":"NotAllowedToRecover","type":"error"},{"inputs":[],"name":"NotEnoughKeys","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"NotSupported","type":"error"},{"inputs":[],"name":"PauseUntilMustBeInFuture","type":"error"},{"inputs":[],"name":"PausedExpected","type":"error"},{"inputs":[],"name":"QueueIsEmpty","type":"error"},{"inputs":[],"name":"QueueLookupNoLimit","type":"error"},{"inputs":[],"name":"ResumedExpected","type":"error"},{"inputs":[],"name":"SameAddress","type":"error"},{"inputs":[],"name":"SenderIsNotEligible","type":"error"},{"inputs":[],"name":"SenderIsNotManagerAddress","type":"error"},{"inputs":[],"name":"SenderIsNotProposedAddress","type":"error"},{"inputs":[],"name":"SenderIsNotRewardAddress","type":"error"},{"inputs":[],"name":"SigningKeysInvalidOffset","type":"error"},{"inputs":[],"name":"StuckKeysHigherThanNonExited","type":"error"},{"inputs":[],"name":"ZeroAccountingAddress","type":"error"},{"inputs":[],"name":"ZeroAdminAddress","type":"error"},{"inputs":[],"name":"ZeroLocatorAddress","type":"error"},{"inputs":[],"name":"ZeroPauseDuration","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"BatchEnqueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositableKeysCount","type":"uint256"}],"name":"DepositableSigningKeysCountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositedKeysCount","type":"uint256"}],"name":"DepositedSigningKeysCountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ELRewardsStealingPenaltyCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"proposedBlockHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"stolenAmount","type":"uint256"}],"name":"ELRewardsStealingPenaltyReported","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"ELRewardsStealingPenaltySettled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC1155Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"ERC721Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EtherRecovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"exitedKeysCount","type":"uint256"}],"name":"ExitedSigningKeysCountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"keyIndex","type":"uint256"}],"name":"InitialSlashingSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"KeyRemovalChargeApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"KeyRemovalChargeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"managerAddress","type":"address"},{"indexed":true,"internalType":"address","name":"rewardAddress","type":"address"}],"name":"NodeOperatorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldProposedAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newProposedAddress","type":"address"}],"name":"NodeOperatorManagerAddressChangeProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"NodeOperatorManagerAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldProposedAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newProposedAddress","type":"address"}],"name":"NodeOperatorRewardAddressChangeProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"NodeOperatorRewardAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"NonceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"PublicRelease","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"}],"name":"ReferrerSet","type":"event"},{"anonymous":false,"inputs":[],"name":"Resumed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"pubkey","type":"bytes"}],"name":"SigningKeyAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"pubkey","type":"bytes"}],"name":"SigningKeyRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"StETHSharesRecovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stuckKeysCount","type":"uint256"}],"name":"StuckSigningKeysCountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"targetLimitMode","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"targetValidatorsCount","type":"uint256"}],"name":"TargetValidatorsCountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalKeysCount","type":"uint256"}],"name":"TotalSigningKeysCountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"vettedKeysCount","type":"uint256"}],"name":"VettedSigningKeysCountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"VettedSigningKeysCountDecreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"keyIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawalSubmitted","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EL_REWARDS_STEALING_FINE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_SLASHING_PENALTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIDO_LOCATOR","outputs":[{"internalType":"contract ILidoLocator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SIGNING_KEYS_PER_OPERATOR_BEFORE_PUBLIC_RELEASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MODULE_MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_INFINITELY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RECOVERER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REPORT_EL_REWARDS_STEALING_PENALTY_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESUME_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SETTLE_EL_REWARDS_STEALING_PENALTY_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_ROUTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STETH","outputs":[{"internalType":"contract IStETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERIFIER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accounting","outputs":[{"internalType":"contract ICSAccounting","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activatePublicRelease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"keysCount","type":"uint256"},{"internalType":"bytes","name":"publicKeys","type":"bytes"},{"internalType":"bytes","name":"signatures","type":"bytes"},{"components":[{"internalType":"address","name":"managerAddress","type":"address"},{"internalType":"address","name":"rewardAddress","type":"address"},{"internalType":"bool","name":"extendedManagerPermissions","type":"bool"}],"internalType":"struct NodeOperatorManagementProperties","name":"managementProperties","type":"tuple"},{"internalType":"bytes32[]","name":"eaProof","type":"bytes32[]"},{"internalType":"address","name":"referrer","type":"address"}],"name":"addNodeOperatorETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"keysCount","type":"uint256"},{"internalType":"bytes","name":"publicKeys","type":"bytes"},{"internalType":"bytes","name":"signatures","type":"bytes"},{"components":[{"internalType":"address","name":"managerAddress","type":"address"},{"internalType":"address","name":"rewardAddress","type":"address"},{"internalType":"bool","name":"extendedManagerPermissions","type":"bool"}],"internalType":"struct NodeOperatorManagementProperties","name":"managementProperties","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ICSAccounting.PermitInput","name":"permit","type":"tuple"},{"internalType":"bytes32[]","name":"eaProof","type":"bytes32[]"},{"internalType":"address","name":"referrer","type":"address"}],"name":"addNodeOperatorStETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"keysCount","type":"uint256"},{"internalType":"bytes","name":"publicKeys","type":"bytes"},{"internalType":"bytes","name":"signatures","type":"bytes"},{"components":[{"internalType":"address","name":"managerAddress","type":"address"},{"internalType":"address","name":"rewardAddress","type":"address"},{"internalType":"bool","name":"extendedManagerPermissions","type":"bool"}],"internalType":"struct NodeOperatorManagementProperties","name":"managementProperties","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ICSAccounting.PermitInput","name":"permit","type":"tuple"},{"internalType":"bytes32[]","name":"eaProof","type":"bytes32[]"},{"internalType":"address","name":"referrer","type":"address"}],"name":"addNodeOperatorWstETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"keysCount","type":"uint256"},{"internalType":"bytes","name":"publicKeys","type":"bytes"},{"internalType":"bytes","name":"signatures","type":"bytes"}],"name":"addValidatorKeysETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"keysCount","type":"uint256"},{"internalType":"bytes","name":"publicKeys","type":"bytes"},{"internalType":"bytes","name":"signatures","type":"bytes"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ICSAccounting.PermitInput","name":"permit","type":"tuple"}],"name":"addValidatorKeysStETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"keysCount","type":"uint256"},{"internalType":"bytes","name":"publicKeys","type":"bytes"},{"internalType":"bytes","name":"signatures","type":"bytes"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ICSAccounting.PermitInput","name":"permit","type":"tuple"}],"name":"addValidatorKeysWstETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"cancelELRewardsStealingPenalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"changeNodeOperatorRewardAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"stETHAmount","type":"uint256"},{"internalType":"uint256","name":"cumulativeFeeShares","type":"uint256"},{"internalType":"bytes32[]","name":"rewardsProof","type":"bytes32[]"}],"name":"claimRewardsStETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"stEthAmount","type":"uint256"},{"internalType":"uint256","name":"cumulativeFeeShares","type":"uint256"},{"internalType":"bytes32[]","name":"rewardsProof","type":"bytes32[]"}],"name":"claimRewardsUnstETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"wstETHAmount","type":"uint256"},{"internalType":"uint256","name":"cumulativeFeeShares","type":"uint256"},{"internalType":"bytes32[]","name":"rewardsProof","type":"bytes32[]"}],"name":"claimRewardsWstETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxItems","type":"uint256"}],"name":"cleanDepositQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"compensateELRewardsStealingPenalty","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"confirmNodeOperatorManagerAddressChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"confirmNodeOperatorRewardAddressChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"nodeOperatorIds","type":"bytes"},{"internalType":"bytes","name":"vettedSigningKeysCounts","type":"bytes"}],"name":"decreaseVettedSigningKeysCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"depositQueue","outputs":[{"internalType":"uint128","name":"head","type":"uint128"},{"internalType":"uint128","name":"tail","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"index","type":"uint128"}],"name":"depositQueueItem","outputs":[{"internalType":"Batch","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"stETHAmount","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ICSAccounting.PermitInput","name":"permit","type":"tuple"}],"name":"depositStETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"wstETHAmount","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ICSAccounting.PermitInput","name":"permit","type":"tuple"}],"name":"depositWstETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyAdoption","outputs":[{"internalType":"contract ICSEarlyAdoption","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getActiveNodeOperatorsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"getNodeOperator","outputs":[{"components":[{"internalType":"uint32","name":"totalAddedKeys","type":"uint32"},{"internalType":"uint32","name":"totalWithdrawnKeys","type":"uint32"},{"internalType":"uint32","name":"totalDepositedKeys","type":"uint32"},{"internalType":"uint32","name":"totalVettedKeys","type":"uint32"},{"internalType":"uint32","name":"stuckValidatorsCount","type":"uint32"},{"internalType":"uint32","name":"depositableValidatorsCount","type":"uint32"},{"internalType":"uint32","name":"targetLimit","type":"uint32"},{"internalType":"uint8","name":"targetLimitMode","type":"uint8"},{"internalType":"uint32","name":"totalExitedKeys","type":"uint32"},{"internalType":"uint32","name":"enqueuedCount","type":"uint32"},{"internalType":"address","name":"managerAddress","type":"address"},{"internalType":"address","name":"proposedManagerAddress","type":"address"},{"internalType":"address","name":"rewardAddress","type":"address"},{"internalType":"address","name":"proposedRewardAddress","type":"address"},{"internalType":"bool","name":"extendedManagerPermissions","type":"bool"}],"internalType":"struct NodeOperator","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"getNodeOperatorIds","outputs":[{"internalType":"uint256[]","name":"nodeOperatorIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"getNodeOperatorIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"getNodeOperatorNonWithdrawnKeys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"getNodeOperatorSummary","outputs":[{"internalType":"uint256","name":"targetLimitMode","type":"uint256"},{"internalType":"uint256","name":"targetValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"refundedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckPenaltyEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodeOperatorsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getResumeSinceTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"keysCount","type":"uint256"}],"name":"getSigningKeys","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"keysCount","type":"uint256"}],"name":"getSigningKeysWithSignatures","outputs":[{"internalType":"bytes","name":"keys","type":"bytes"},{"internalType":"bytes","name":"signatures","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingModuleSummary","outputs":[{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getType","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_accounting","type":"address"},{"internalType":"address","name":"_earlyAdoption","type":"address"},{"internalType":"uint256","name":"_keyRemovalCharge","type":"uint256"},{"internalType":"address","name":"admin","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"keyIndex","type":"uint256"}],"name":"isValidatorSlashed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"keyIndex","type":"uint256"}],"name":"isValidatorWithdrawn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keyRemovalCharge","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"normalizeQueue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"depositsCount","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"obtainDepositData","outputs":[{"internalType":"bytes","name":"publicKeys","type":"bytes"},{"internalType":"bytes","name":"signatures","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"onExitedAndStuckValidatorsCountsUpdated","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalShares","type":"uint256"}],"name":"onRewardsMinted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"onWithdrawalCredentialsChanged","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"pauseFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"address","name":"proposedAddress","type":"address"}],"name":"proposeNodeOperatorManagerAddressChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"address","name":"proposedAddress","type":"address"}],"name":"proposeNodeOperatorRewardAddressChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"publicRelease","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"recoverERC1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"recoverERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverStETHShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"keysCount","type":"uint256"}],"name":"removeKeys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reportELRewardsStealingPenalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"}],"name":"resetNodeOperatorManagerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setKeyRemovalCharge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"nodeOperatorIds","type":"uint256[]"}],"name":"settleELRewardsStealingPenalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"keyIndex","type":"uint256"}],"name":"submitInitialSlashing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"keyIndex","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"isSlashed","type":"bool"}],"name":"submitWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"exitedValidatorsKeysCount","type":"uint256"},{"internalType":"uint256","name":"stuckValidatorsKeysCount","type":"uint256"}],"name":"unsafeUpdateValidatorsCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"nodeOperatorIds","type":"bytes"},{"internalType":"bytes","name":"exitedValidatorsCounts","type":"bytes"}],"name":"updateExitedValidatorsCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"updateRefundedValidatorsCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"nodeOperatorIds","type":"bytes"},{"internalType":"bytes","name":"stuckValidatorsCounts","type":"bytes"}],"name":"updateStuckValidatorsCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"targetLimitMode","type":"uint256"},{"internalType":"uint256","name":"targetLimit","type":"uint256"}],"name":"updateTargetValidatorsLimits","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/internal/lido/contracts/csmodule/CSModule.bin b/internal/lido/contracts/csmodule/CSModule.bin new file mode 100644 index 000000000..aa9bd86a7 --- /dev/null +++ b/internal/lido/contracts/csmodule/CSModule.bin @@ -0,0 +1 @@ +0x6080604052600436106104e7575f3560e01c80638b3ac71d11610283578063ba1557ae11610155578063dbba4b48116100c9578063f2e2ca6311610083578063f2e2ca6314611224578063f3f449c714611243578063f408b55114611262578063f617eecc14611281578063f96d3952146112cb578063fe7ed3cd146112ea575f80fd5b8063dbba4b4814611138578063e00bfe501461116b578063e1aa105d1461119e578063e21a430b146111bd578063e7705db6146111dd578063e864299e14611210575f80fd5b8063cb17ed3e1161011a578063cb17ed3e14611077578063d087d288146110aa578063d3931457146110be578063d547741f146110d2578063d6477919146110f1578063d9df8c9214611124575f80fd5b8063ba1557ae14610fc8578063bdac46a214610fe7578063be2030941461101a578063bee41b5814611039578063ca15c87314611058575f80fd5b80639b3d1900116101f7578063acc446eb116101b1578063acc446eb14610eca578063acf1c94814610ee9578063b1520dc514610f1c578063b187bd2614610f3b578063b3076c3c14610f4f578063b643189b14610fa9575f80fd5b80639b3d190014610e465780639ec3c24c14610e65578063a217fddf14610e84578063a2e080f114610e97578063a302ee3814610eb6578063a70c70e414610c3e575f80fd5b806390c09bdb1161024857806390c09bdb14610d7157806391d1485414610d85578063946654ad14610da45780639624e83e14610dc35780639abddf0914610de25780639b00c14614610e27575f80fd5b80638b3ac71d14610cb45780638cabe95914610cd35780638d7e401714610cf25780638ec6902814610d115780639010d07c14610d52575f80fd5b80635204281c116103bc5780636a5f2c4a1161033057806380231f15116102ea57806380231f1514610be0578063819d4cc614610c005780638409d4fe14610c1f5780638469cbd314610c3e5780638573e35114610c625780638980f11f14610c95575f80fd5b80636a5f2c4a14610b325780636a6304cc14610b515780636bb1bfdf14610b705780636efe37a214610b8f578063735dfa2814610ba257806375a401da14610bc1575f80fd5b806359e25c121161038157806359e25c12146108e85780635a73bdc8146109145780635c654ad9146109285780635e169fb8146109475780635e2fb9081461096657806365c14dc714610997575f80fd5b80635204281c1461086f57806352d8bfc21461088e57806353433643146108a25780635358fbda146108c1578063589ff76c146108d4575f80fd5b806337b12b5f1161045e5780633f214bb2116104185780633f214bb21461078657806340044801146107a557806347faf311146107c45780634febc81b146107f757806350388cb6146108235780635097ef5914610850575f80fd5b806337b12b5f146106a4578063388dd1d1146106c3578063389ed267146106e25780633dbe8b5a146107155780633df6c438146107345780633f04f0c814610753575f80fd5b80631b40b231116104af5780631b40b231146105a3578063248a9ca3146105c257806326a666e4146105fc5780632de03aa1146106335780632f2ff15d1461066657806336568abe14610685575f80fd5b806301ffc9a7146104eb578063046f7da21461051f57806308a679ad14610535578063157a039b1461055457806315dae03e14610567575b5f80fd5b3480156104f6575f80fd5b5061050a6105053660046152b6565b6112fd565b60405190151581526020015b60405180910390f35b34801561052a575f80fd5b50610533611327565b005b348015610540575f80fd5b5061053361054f3660046152dd565b61135c565b6105336105623660046153b4565b6114b4565b348015610572575f80fd5b507f636f6d6d756e6974792d6f6e636861696e2d76310000000000000000000000005b604051908152602001610516565b3480156105ae575f80fd5b506105336105bd366004615476565b611638565b3480156105cd575f80fd5b506105956105dc3660046154a4565b5f9081525f80516020615f14833981519152602052604090206001015490565b348015610607575f80fd5b5060045461061b906001600160a01b031681565b6040516001600160a01b039091168152602001610516565b34801561063e575f80fd5b506105957f2fc10cc8ae19568712f7a176fb4978616a610650813c9d05326c34abb62749c781565b348015610671575f80fd5b50610533610680366004615476565b6116b1565b348015610690575f80fd5b5061053361069f366004615476565b6116e1565b3480156106af575f80fd5b506105336106be3660046154bb565b611719565b3480156106ce575f80fd5b506105336106dd3660046152dd565b61187e565b3480156106ed575f80fd5b506105957f139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d81565b348015610720575f80fd5b5061050a61072f3660046154f9565b611985565b34801561073f575f80fd5b5061053361074e366004615519565b6119ab565b34801561075e575f80fd5b506105957fe85fdec10fe0f93d0792364051df7c3d73e37c17b3a954bffe593960e3cd301281565b348015610791575f80fd5b506105336107a0366004615584565b611a3a565b3480156107b0575f80fd5b506105336107bf3660046154f9565b611ab2565b3480156107cf575f80fd5b506105957f000000000000000000000000000000000000000000000000000000000000000a81565b348015610802575f80fd5b506108166108113660046154f9565b611b8b565b60405161051691906155b7565b34801561082e575f80fd5b5061084261083d3660046152dd565b611c73565b60405161051692919061563d565b34801561085b575f80fd5b5061053361086a366004615519565b611ca5565b34801561087a575f80fd5b506105336108893660046154a4565b611cfb565b348015610899575f80fd5b50610533611d5e565b3480156108ad575f80fd5b5061050a6108bc3660046154f9565b611dba565b6105336108cf3660046154a4565b611dca565b3480156108df575f80fd5b50610595611e42565b3480156108f3575f80fd5b506109076109023660046152dd565b611e70565b6040516105169190615661565b34801561091f575f80fd5b50610533611e90565b348015610933575f80fd5b50610533610942366004615673565b611f7e565b348015610952575f80fd5b5061059561096136600461569d565b611fcd565b348015610971575f80fd5b5061050a6109803660046154a4565b600954600160c01b90046001600160401b03161190565b3480156109a2575f80fd5b50610b256109b13660046154a4565b604080516101e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c0810191909152505f9081526006602090815260409182902082516101e081018452815463ffffffff8082168352600160201b808304821695840195909552600160401b808304821696840196909652600160601b820481166060840152600160801b820481166080840152600160a01b808304821660a0850152600160c01b8304821660c085015260ff600160e01b909304831660e085015260018501548083166101008601529586049091166101208401526001600160a01b0395909404851661014083015260028301548516610160830152600383015485166101808301526004909201549384166101a08201529190920490911615156101c082015290565b60405161051691906156c3565b348015610b3d575f80fd5b50610533610b4c3660046157f0565b611fea565b348015610b5c575f80fd5b50610533610b6b3660046154a4565b612157565b348015610b7b575f80fd5b50610533610b8a3660046154a4565b612196565b610533610b9d3660046154a4565b6121d5565b348015610bad575f80fd5b50610595610bbc3660046154a4565b612211565b348015610bcc575f80fd5b50610533610bdb366004615476565b612293565b348015610beb575f80fd5b506105955f80516020615ef483398151915281565b348015610c0b575f80fd5b50610533610c1a366004615673565b6122e1565b348015610c2a575f80fd5b50610533610c39366004615519565b612330565b348015610c49575f80fd5b50600954600160c01b90046001600160401b0316610595565b348015610c6d575f80fd5b506105957f59911a6aa08a72fe3824aec4500dc42335c6d0702b6d5c5c72ceb265a0de930281565b348015610ca0575f80fd5b50610533610caf366004615673565b612386565b348015610cbf575f80fd5b50610533610cce3660046152dd565b6123d5565b348015610cde575f80fd5b50610533610ced366004615476565b612583565b348015610cfd575f80fd5b50610533610d0c3660046154a4565b6125d1565b348015610d1c575f80fd5b50610595610d2b3660046154a4565b5f9081526006602052604090205463ffffffff600160201b82048116918116919091031690565b348015610d5d575f80fd5b5061061b610d6c3660046154f9565b6126f9565b348015610d7c575f80fd5b50610533612731565b348015610d90575f80fd5b5061050a610d9f366004615476565b612751565b348015610daf575f80fd5b50610533610dbe3660046158c6565b612787565b348015610dce575f80fd5b5060035461061b906001600160a01b031681565b348015610ded575f80fd5b50600954604080516001600160401b03600160401b8404811682528084166020830152600160801b90930490921690820152606001610516565b348015610e32575f80fd5b50610533610e41366004615954565b612886565b348015610e51575f80fd5b50610533610e60366004615954565b6128e8565b348015610e70575f80fd5b50610533610e7f3660046158c6565b612940565b348015610e8f575f80fd5b506105955f81565b348015610ea2575f80fd5b50610533610eb13660046154f9565b6129fa565b348015610ec1575f80fd5b506105955f1981565b348015610ed5575f80fd5b50610533610ee43660046157f0565b612a2a565b348015610ef4575f80fd5b506105957fb3e25b5404b87e5a838579cb5d7481d61ad96ee284d38ec1e97c07ba64e7f6fc81565b348015610f27575f80fd5b50610533610f363660046154a4565b612b4e565b348015610f46575f80fd5b5061050a612b9d565b348015610f5a575f80fd5b50610f6e610f693660046154a4565b612bcd565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610516565b348015610fb4575f80fd5b50610533610fc3366004615954565b612d38565b348015610fd3575f80fd5b50610533610fe23660046154a4565b612e83565b348015610ff2575f80fd5b506105957f000000000000000000000000000000000000000000000000016345785d8a000081565b348015611025575f80fd5b506105336110343660046159ba565b612eba565b348015611044575f80fd5b50610842611053366004615a0a565b6130fb565b348015611063575f80fd5b506105956110723660046154a4565b613413565b348015611082575f80fd5b506105957f79dfcec784e591aafcf60db7db7b029a5c8b12aac4afd4e8c4eb740430405fa681565b3480156110b5575f80fd5b50600554610595565b3480156110c9575f80fd5b50610533613451565b3480156110dd575f80fd5b506105336110ec366004615476565b6134e4565b3480156110fc575f80fd5b506105957f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b34801561112f575f80fd5b506105955f5481565b348015611143575f80fd5b5061061b7f00000000000000000000000028fab2059c713a7f9d8c86db49f9bb0e96af1ef881565b348015611176575f80fd5b5061061b7f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c9503481565b3480156111a9575f80fd5b506105336111b8366004615584565b613514565b3480156111c8575f80fd5b5060045461050a90600160a01b900460ff1681565b3480156111e8575f80fd5b506105957f0ce23c3e399818cfee81a7ab0880f714e53d7672b08df0fa62f2843416e1ea0981565b34801561121b575f80fd5b50610533613553565b34801561122f575f80fd5b5061053361123e3660046152dd565b61356a565b34801561124e575f80fd5b5061053361125d3660046154a4565b61359f565b34801561126d575f80fd5b5061053361127c366004615a65565b6135d2565b34801561128c575f80fd5b506001546112ab906001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610516565b3480156112d6575f80fd5b506105336112e53660046154f9565b613849565b6105336112f8366004615aa1565b6139cc565b5f6001600160e01b03198216635a05180f60e01b1480611321575061132182613ade565b92915050565b7f2fc10cc8ae19568712f7a176fb4978616a610650813c9d05326c34abb62749c761135181613b12565b611359613b1c565b50565b5f80516020615ef483398151915261137381613b12565b60ff8311156113955760405163b4fa3fb360e01b815260040160405180910390fd5b63ffffffff8211156113ba5760405163b4fa3fb360e01b815260040160405180910390fd5b6113c384613b71565b5f8481526006602052604090208054600160e01b900460ff16841480156113f757508054600160c01b900463ffffffff1683145b1561140257506114ae565b8054600160e01b900460ff16841461142b57805460ff60e01b1916600160e01b60ff8616021781555b8054600160c01b900463ffffffff16831461145d57805463ffffffff60c01b1916600160c01b63ffffffff8516021781555b604080518581526020810185905286917ff92eb109ce5b449e9b121c352c6aeb4319538a90738cb95d84f08e41274e92d2910160405180910390a26114a4855f6001613ba7565b6114ac613e23565b505b50505050565b6114bc613e63565b5f6114c985838686613e8b565b600354604051636e13f09960e01b8152600481018390529192506001600160a01b031690630f23e742908c908390636e13f099906024015f60405180830381865afa15801561151a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115419190810190615b89565b6040518363ffffffff1660e01b815260040161155e929190615c5b565b602060405180830381865afa158015611579573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159d9190615cc3565b34146115bc5760405163162908e360e11b815260040160405180910390fd5b600354604051630b96641560e21b8152336004820152602481018390526001600160a01b0390911690632e5990549034906044015f604051808303818588803b158015611607575f80fd5b505af1158015611619573d5f803e3d5ffd5b505050505061162c818b8b8b8b8b614214565b50505050505050505050565b60405162d74f0b60e71b815260066004820152602481018390526001600160a01b038216604482015273f8e5de8baf8ad7c93dcb61d13d00eb3d57131c7290636ba78580906064015b5f6040518083038186803b158015611697575f80fd5b505af41580156116a9573d5f803e3d5ffd5b505050505050565b5f8281525f80516020615f1483398151915260205260409020600101546116d781613b12565b6114ae8383614372565b6001600160a01b038116331461170a5760405163334bd91960e11b815260040160405180910390fd5b61171482826143be565b505050565b7fe85fdec10fe0f93d0792364051df7c3d73e37c17b3a954bffe593960e3cd301261174381613b12565b5f5b828110156114ae575f84848381811061176057611760615cda565b90506020020135905061177281613b71565b6003546040516325d9153960e11b8152600481018390525f916001600160a01b031690634bb22a72906024016020604051808303815f875af11580156117ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117de9190615cc3565b9050801561184b5760035460405163449add1b60e01b8152600481018490526001600160a01b039091169063449add1b906024015f604051808303815f87803b158015611829575f80fd5b505af115801561183b573d5f803e3d5ffd5b5050505061184b8260015f613ba7565b60405182907ef4fe19c0404d2fbb58da6f646c0a3ee5a6994a034213bbd22b072ed1ca5c27905f90a25050600101611745565b7f59911a6aa08a72fe3824aec4500dc42335c6d0702b6d5c5c72ceb265a0de93026118a881613b12565b6118b184613b71565b6003546001600160a01b031663dcab7f83856118ed7f000000000000000000000000000000000000000000000000016345785d8a000086615d02565b6040516001600160e01b031960e085901b168152600481019290925260248201526044015f604051808303815f87803b158015611928575f80fd5b505af115801561193a573d5f803e3d5ffd5b505060408051868152602081018690528793507feec4d6dbe34149c6728a9638eca869d0e5a7fcd85c7a96178f7e9780b4b7fe4b92500160405180910390a26114ae8460015f613ba7565b5f600881608085901b84175b815260208101919091526040015f205460ff169392505050565b6119b48561440a565b600380545f878152600660205260409081902090920154915163cc810cb960e01b81526001600160a01b039182169263cc810cb992611a01928a928a921690899089908990600401615d45565b5f604051808303815f87803b158015611a18575f80fd5b505af1158015611a2a573d5f803e3d5ffd5b505050506114ac85600180613ba7565b611a4383613b71565b600354604051637bcb377f60e11b81526001600160a01b039091169063f7966efe90611a79903390879087908790600401615d85565b5f604051808303815f87803b158015611a90575f80fd5b505af1158015611aa2573d5f803e3d5ffd5b5050505061171483600180613ba7565b7f59911a6aa08a72fe3824aec4500dc42335c6d0702b6d5c5c72ceb265a0de9302611adc81613b12565b611ae583613b71565b60035460405163d963ae5560e01b815260048101859052602481018490526001600160a01b039091169063d963ae55906044015f604051808303815f87803b158015611b2f575f80fd5b505af1158015611b41573d5f803e3d5ffd5b50505050827f1e7ebd3c5f4de9502000b6f7e6e7cf5d4ecb27d6fe1778e43fb9d1d0ca87d0e783604051611b7791815260200190565b60405180910390a261171483600180613ba7565b600954606090600160c01b90046001600160401b03168084101580611bae575082155b15611bc8575050604080515f815260208101909152611321565b5f611bd38583615ded565b8410611be857611be38583615ded565b611bea565b835b9050806001600160401b03811115611c0457611c04615b1d565b604051908082528060200260200182016040528015611c2d578160200160208202803683370190505b5092505f5b8351811015611c6a57611c458187615d02565b848281518110611c5757611c57615cda565b6020908102919091010152600101611c32565b50505092915050565b606080611c81858585614498565b611c8a836144d5565b9092509050611c9d85858585855f61457b565b935093915050565b611cae8561440a565b600380545f87815260066020526040908190209092015491516370903eb960e01b81526001600160a01b03918216926370903eb992611a01928a928a921690899089908990600401615d45565b604051631f46d51760e01b8152600660048201526024810182905273f8e5de8baf8ad7c93dcb61d13d00eb3d57131c7290631f46d517906044015b5f6040518083038186803b158015611d4c575f80fd5b505af41580156114ac573d5f803e3d5ffd5b611d66614609565b73a74528edc289b1a597faf83fcff7eff871cc01d96352d8bfc26040518163ffffffff1660e01b81526004015f6040518083038186803b158015611da8575f80fd5b505af41580156114ae573d5f803e3d5ffd5b5f600781608085901b8417611991565b611dd381613b71565b600354604051630b96641560e21b8152336004820152602481018390526001600160a01b0390911690632e5990549034906044015b5f604051808303818588803b158015611e1f575f80fd5b505af1158015611e31573d5f803e3d5ffd5b505050505061135981600180613ba7565b5f611e6b7fe8b012900cb200ee5dfc3b895a32791b67d12891b09f117814f167a237783a025490565b905090565b6060611e7d848484614498565b611e88848484614632565b949350505050565b611e98614609565b604051633d7ad0b760e21b815230600482015273a74528edc289b1a597faf83fcff7eff871cc01d9906389ad9443907f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c95034906001600160a01b0382169063f5eb42dc90602401602060405180830381865afa158015611f18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f3c9190615cc3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f6040518083038186803b158015611da8575f80fd5b611f86614609565b604051635c654ad960e01b81526001600160a01b03831660048201526024810182905273a74528edc289b1a597faf83fcff7eff871cc01d990635c654ad990604401611681565b6001600160801b0381165f90815260026020526040812054611321565b611ff2613e63565b5f611fff86838686613e8b565b600354604051636e13f09960e01b8152600481018390529192505f916001600160a01b0390911690630f23e742908e908390636e13f099906024015f60405180830381865afa158015612054573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261207b9190810190615b89565b6040518363ffffffff1660e01b8152600401612098929190615c5b565b602060405180830381865afa1580156120b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120d79190615cc3565b60035460405163263f69e960e11b81529192506001600160a01b031690634c7ed3d29061210e903390869086908c90600401615d85565b5f604051808303815f87803b158015612125575f80fd5b505af1158015612137573d5f803e3d5ffd5b50505050612149828d8d8d8d8d614214565b505050505050505050505050565b60405163612b8c3b60e11b8152600660048201526024810182905273f8e5de8baf8ad7c93dcb61d13d00eb3d57131c729063c257187690604401611d36565b60405163c990450f60e01b8152600660048201526024810182905273f8e5de8baf8ad7c93dcb61d13d00eb3d57131c729063c990450f90604401611d36565b6121de81613b71565b6003546040516315b5c47760e01b8152600481018390526001600160a01b03909116906315b5c477903490602401611e08565b6040516351fbfaa560e11b81526001600482015260066024820152604481018290525f90739031730603ea1a523b34d4b04b81ea7a08db0fc49063a3f7f54a90606401602060405180830381865af415801561226f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113219190615cc3565b6040516317a9a2c160e11b815260066004820152602481018390526001600160a01b038216604482015273f8e5de8baf8ad7c93dcb61d13d00eb3d57131c7290632f53458290606401611681565b6122e9614609565b6040516340cea66360e11b81526001600160a01b03831660048201526024810182905273a74528edc289b1a597faf83fcff7eff871cc01d99063819d4cc690604401611681565b6123398561440a565b600380545f878152600660205260409081902090920154915163f939122360e01b81526001600160a01b039182169263f939122392611a01928a928a921690899089908990600401615d45565b61238e614609565b604051638980f11f60e01b81526001600160a01b03831660048201526024810182905273a74528edc289b1a597faf83fcff7eff871cc01d990638980f11f90604401611681565b6123de836146cd565b5f8381526006602052604090208054600160401b900463ffffffff1683101561241a57604051635caf530f60e11b815260040160405180910390fd5b80545f906124339086908690869063ffffffff16614740565b90505f835f546124439190615e00565b905080156124d657600354604051632207e80f60e21b815260048101889052602481018390526001600160a01b039091169063881fa03c906044015f604051808303815f87803b158015612495575f80fd5b505af11580156124a7573d5f803e3d5ffd5b50506040518892507f1cbb8dafbedbdf4f813a8ed1f50d871def63e1104f8729b677af57905eda90f691505f90a25b825463ffffffff191663ffffffff831617835560405182815286907fdd01838a366ae4dc9a86e1922512c0716abebc9a440baae0e22d2dec578223f09060200160405180910390a2825463ffffffff60601b1916600160601b63ffffffff84160217835560405182815286907f947f955eec7e1f626bee3afd2aa47b5de04ddcdd3fe78dc8838213015ef58dfd9060200160405180910390a261257b865f6001613ba7565b6116a9613e23565b604051632a5a705b60e01b815260066004820152602481018390526001600160a01b038216604482015273f8e5de8baf8ad7c93dcb61d13d00eb3d57131c7290632a5a705b90606401611681565b5f80516020615ef48339815191526125e881613b12565b7f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950346001600160a01b0316638fcb4e5b60035f9054906101000a90046001600160a01b03166001600160a01b0316630d43e8ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612667573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061268b9190615e17565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303815f875af11580156126d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117149190615cc3565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220611e8890846148ca565b5f80516020615ef483398151915261274881613b12565b6113595f6148d5565b5f9182525f80516020615f14833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61278f613e63565b612798876146cd565b6003546040516358a46db560e11b815260048101899052602481018890525f916001600160a01b03169063b148db6a90604401602060405180830381865afa1580156127e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061280a9190615cc3565b60035460405163263f69e960e11b81529192506001600160a01b031690634c7ed3d2906128419033908c9086908890600401615d85565b5f604051808303815f87803b158015612858575f80fd5b505af115801561286a573d5f803e3d5ffd5b5050505061287c888888888888614214565b5050505050505050565b5f80516020615ef483398151915261289d81613b12565b5f6128aa86868686614910565b90505f5b818110156128df576008810287013560c01c6010820286013560801c6128d582825f614983565b50506001016128ae565b506116a9613e23565b5f80516020615ef48339815191526128ff81613b12565b5f61290c86868686614910565b90505f5b818110156128df576008810287013560c01c6010820286013560801c6129368282614aa4565b5050600101612910565b612948613e63565b612951876146cd565b600354604051632884698160e01b815260048101899052602481018890525f916001600160a01b031690632884698190604401602060405180830381865afa15801561299f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c39190615cc3565b600354604051637bcb377f60e11b81529192506001600160a01b03169063f7966efe906128419033908c9086908890600401615d85565b5f80516020615ef4833981519152612a1181613b12565b604051630280e1e560e61b815260040160405180910390fd5b612a32613e63565b5f612a3f86838686613e8b565b600354604051636e13f09960e01b8152600481018390529192505f916001600160a01b0390911690639a4df8f0908e908390636e13f099906024015f60405180830381865afa158015612a94573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612abb9190810190615b89565b6040518363ffffffff1660e01b8152600401612ad8929190615c5b565b602060405180830381865afa158015612af3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b179190615cc3565b600354604051637bcb377f60e11b81529192506001600160a01b03169063f7966efe9061210e903390869086908c90600401615d85565b612b57816146cd565b604051633f58c75d60e21b8152600160048201526006602482015260448101829052739031730603ea1a523b34d4b04b81ea7a08db0fc49063fd631d7490606401611d36565b5f612bc67fe8b012900cb200ee5dfc3b895a32791b67d12891b09f117814f167a237783a025490565b4210905090565b5f818152600660205260408082206003549151634e28b08160e11b815260048101859052839283928392839283928392839283916001600160a01b0390911690639c51610290602401602060405180830381865afa158015612c31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c559190615cc3565b90505f81118015612c7157508154600160e01b900460ff166002145b15612cac57815460029a50612ca59063ffffffff600160c01b8204811691600160201b810482169082160316839003614c17565b9850612cf6565b8015612cd857815460029a5063ffffffff600160201b8204811691811691909103168190039850612cf6565b8154600160e01b810460ff169a50600160c01b900463ffffffff1698505b508054600190910154989a97995063ffffffff600160801b82048116995f998a99509082169750600160401b830482169650600160a01b909204169350915050565b5f80516020615ef4833981519152612d4f81613b12565b5f612d5c86868686614910565b90505f5b818110156128df576008810287013560c01c6010820286013560801c612d8582613b71565b5f8281526006602052604090208054600160601b900463ffffffff168210612dc0576040516388e1a28160e01b815260040160405180910390fd5b8054600160401b900463ffffffff16821015612def576040516388e1a28160e01b815260040160405180910390fd5b805463ffffffff60601b1916600160601b63ffffffff84160217815560405182815283907f947f955eec7e1f626bee3afd2aa47b5de04ddcdd3fe78dc8838213015ef58dfd9060200160405180910390a260405183907fe5725d045d5c47bd1483feba445e395dc8647486963e6d54aad9ed03ff7d6ce6905f90a2612e75835f80613ba7565b505050806001019050612d60565b7f79dfcec784e591aafcf60db7db7b029a5c8b12aac4afd4e8c4eb740430405fa6612ead81613b12565b612eb6826148d5565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015612efe5750825b90505f826001600160401b03166001148015612f195750303b155b905081158015612f27575080155b15612f455760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315612f6f57845460ff60401b1916600160401b1785555b6001600160a01b038916612f96576040516368ea2bc160e01b815260040160405180910390fd5b6001600160a01b038616612fbd57604051633ef39b8160e01b815260040160405180910390fd5b612fc5614c2c565b600380546001600160a01b03808c166001600160a01b03199283161790925560048054928b1692909116919091179055612fff5f87614372565b506130965f80516020615ef48339815191527f00000000000000000000000028fab2059c713a7f9d8c86db49f9bb0e96af1ef86001600160a01b031663ef6c064c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561306d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130919190615e17565b614372565b506130a0876148d5565b6130aa5f19614c34565b83156130f057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b6060805f80516020615ef483398151915261311581613b12565b61311e866144d5565b9093509150851561340a576001546001600160801b03165f908152600260205260408120548791905b8015613385575f6131588260c01c90565b6001600160401b039081165f8181526006602052604081208054929450608086901c90931692916131a09061319a90600160a01b900463ffffffff1685614c17565b88614c17565b9050808711806131af57508281145b156131f0576001808301805463ffffffff600160201b80830482168890039091160267ffffffff00000000199091161790556131ea90614c83565b5061324e565b60018201805463ffffffff600160201b808304821685900382160267ffffffff00000000199092169190911790915561322f90869083860390614ce216565b6001546001600160801b03165f90815260026020526040902081905594505b805f0361325e5750505050613365565b815461327c908590600160401b900463ffffffff16838d8d8b61457b565b815463ffffffff600160401b80830482168401821681026bffffffff000000000000000019909316929092178085556040519290041681529581019584907f24eb1c9e765ba41accf9437300ea91ece5ed3f897ec3cdee0e9debd7fe309b789060200160405180910390a2815463ffffffff600160a01b808304821684900391821690810263ffffffff60a01b199093169290921784556040519182529085907ff9109091b368cedad2edff45414eef892edd6b4fe80084bd590aa8f8def8ed339060200160405180910390a28188039750875f0361335f575050505050613385565b50505050505b506001546001600160801b03165f90815260026020526040902054613147565b508781146133a657604051630bc9ea5560e21b815260040160405180910390fd5b600980546001600160401b03600160801b80830482168c9003821602808216828416178c0190911667ffffffffffffffff1990911677ffffffffffffffff0000000000000000ffffffffffffffff1990921691909117179055613407613e23565b50505b50935093915050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200060208190526040822061344a90614d07565b9392505050565b7f79dfcec784e591aafcf60db7db7b029a5c8b12aac4afd4e8c4eb740430405fa661347b81613b12565b600454600160a01b900460ff16156134a65760405163ef65161f60e01b815260040160405180910390fd5b6004805460ff60a01b1916600160a01b1790556040517fe5eb57aa4d841adeece4ac87bd294965df4a894f0aa24db4a4a55a39ab101d6e905f90a150565b5f8281525f80516020615f14833981519152602052604090206001015461350a81613b12565b6114ae83836143be565b61351d83613b71565b60035460405163263f69e960e11b81526001600160a01b0390911690634c7ed3d290611a79903390879087908790600401615d85565b5f80516020615ef483398151915261135981613b12565b5f80516020615ef483398151915261358181613b12565b61358d84846001614983565b6135978483614aa4565b6114ae613e23565b7f139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d6135c981613b12565b612eb682614c34565b7f0ce23c3e399818cfee81a7ab0880f714e53d7672b08df0fa62f2843416e1ea096135fc81613b12565b61360585613b71565b5f8581526006602052604090208054600160401b900463ffffffff16851061364057604051635caf530f60e11b815260040160405180910390fd5b608086901b85175f8181526007602052604090205460ff161561367657604051639fbfc58960e01b815260040160405180910390fd5b5f8181526007602052604090819020805460ff19166001908117909155835463ffffffff600160201b80830482169093011690910267ffffffff00000000199091161783555187907fcb2f99f65711a7d6df7f552255b910bf59f09fcd5935f44c170b4cb0d1b50995906136f69089908990918252602082015260400190565b60405180910390a283156137b7575f8181526008602052604090205460ff1615613744577f0000000000000000000000000000000000000000000000000de0b6b3a76400008501945061375d565b5f818152600860205260409020805460ff191660011790555b60035460405163449add1b60e01b8152600481018990526001600160a01b039091169063449add1b906024015f604051808303815f87803b1580156137a0575f80fd5b505af11580156137b2573d5f803e3d5ffd5b505050505b846801bc16d674ec80000011156138345760035460405163e5220e3f60e01b8152600481018990526801bc16d674ec80000087900360248201526001600160a01b039091169063e5220e3f906044015f604051808303815f87803b15801561381d575f80fd5b505af115801561382f573d5f803e3d5ffd5b505050505b61384087600180613ba7565b50505050505050565b7f0ce23c3e399818cfee81a7ab0880f714e53d7672b08df0fa62f2843416e1ea0961387381613b12565b61387c83613b71565b5f8381526006602052604090208054600160401b900463ffffffff1683106138b757604051635caf530f60e11b815260040160405180910390fd5b608084901b83175f8181526008602052604090205460ff16156138ed57604051639fbfc58960e01b815260040160405180910390fd5b5f8181526008602052604090819020805460ff191660011790555185907fd34db8e8c0ddbc9c7b6dd8c397623dfbe01929e41e527540bff8794685d9b407906139399087815260200190565b60405180910390a260035460405163e5220e3f60e01b8152600481018790527f0000000000000000000000000000000000000000000000000de0b6b3a764000060248201526001600160a01b039091169063e5220e3f906044015f604051808303815f87803b1580156139aa575f80fd5b505af11580156139bc573d5f803e3d5ffd5b505050506114ac8560015f613ba7565b6139d4613e63565b6139dd866146cd565b6003546040516358a46db560e11b815260048101889052602481018790526001600160a01b039091169063b148db6a90604401602060405180830381865afa158015613a2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4f9190615cc3565b3414613a6e5760405163162908e360e11b815260040160405180910390fd5b600354604051630b96641560e21b8152336004820152602481018890526001600160a01b0390911690632e5990549034906044015f604051808303818588803b158015613ab9575f80fd5b505af1158015613acb573d5f803e3d5ffd5b50505050506116a9868686868686614214565b5f6001600160e01b03198216637965db0b60e01b148061132157506301ffc9a760e01b6001600160e01b0319831614611321565b6113598133614d10565b613b24614d4d565b427fe8b012900cb200ee5dfc3b895a32791b67d12891b09f117814f167a237783a02556040517f62451d457bc659158be6e6247f56ec1df424a5c7597f71c20c2bc44e0965c8f9905f90a1565b600954600160c01b90046001600160401b0316811015613b8e5750565b604051633ed893db60e21b815260040160405180910390fd5b5f8381526006602052604081208054909190613bd99063ffffffff600160401b8204811691600160601b900416615e32565b6003546040516301a5e9e360e01b81526004810188905263ffffffff9290921692505f916001600160a01b03909116906301a5e9e390602401602060405180830381865afa158015613c2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c519190615cc3565b905081811115613c63575f9150613c69565b80820391505b8254600160801b900463ffffffff1615801590613c8557505f82115b15613c8e575f91505b8254600160e01b900460ff1615801590613ca757505f82115b15613cff57825463ffffffff600160201b82048116600160401b8304821603811691613cfb91600160c01b909104168210613ce2575f613cf5565b8454600160c01b900463ffffffff168290035b84614c17565b9250505b8254600160a01b900463ffffffff1682146116a95782546009805467ffffffffffffffff60801b198116600160a01b9384900463ffffffff908116600160801b938490046001600160401b039081169190910388011690920217909155845463ffffffff60a01b191690841690910217835560405182815286907ff9109091b368cedad2edff45414eef892edd6b4fe80084bd590aa8f8def8ed339060200160405180910390a28415613db457613db4613e23565b83156116a957604051633f58c75d60e21b8152600160048201526006602482015260448101879052739031730603ea1a523b34d4b04b81ea7a08db0fc49063fd631d74906064015f6040518083038186803b158015613e11575f80fd5b505af415801561162c573d5f803e3d5ffd5b60058054600101908190556040519081527f7220970e1f1f12864ecccd8942690a837c7a8dd45d158cb891eb45a8a69134aa9060200160405180910390a1565b613e6b612b9d565b15613e8957604051630286f07360e31b815260040160405180910390fd5b565b6004545f90600160a01b900460ff16613ed257811580613eb457506004546001600160a01b0316155b15613ed25760405163084a55b960e41b815260040160405180910390fd5b50600954600160c01b90046001600160401b03165f81815260066020908152604082209190613f0390880188615e4f565b6001600160a01b031614613f2357613f1e6020870187615e4f565b613f25565b335b6001820180546001600160a01b0392909216600160401b027fffffffff0000000000000000000000000000000000000000ffffffffffffffff9092169190911790555f613f786040880160208901615e4f565b6001600160a01b031614613f9b57613f966040870160208801615e4f565b613f9d565b335b6003820180546001600160a01b0319166001600160a01b0392909216919091179055613fcf6060870160408801615e6a565b1561400357613fe46060870160408801615e6a565b600482018054911515600160a01b0260ff60a01b199092169190911790555b6009805460016001600160401b03600160c01b80840482168301909116026001600160c01b03909216919091179091556003820154908201546040516001600160a01b0392831692600160401b9092049091169084907ff35982c84fdc94f58d48e901c54c615804cf7d7939b9b8f76ce4d459354e6363905f90a46001600160a01b038516156140c3576040516001600160a01b0386169083907f67334334c388385e5f244703f8a8b28b7f4ffe52909130aca69bc62a8e27f09a905f90a35b82158015906140dc57506004546001600160a01b031615155b1561420b576004805460405163076123b360e21b81526001600160a01b0390911691631d848ecc916141149133918991899101615e83565b5f604051808303815f87803b15801561412b575f80fd5b505af115801561413d573d5f803e3d5ffd5b5050600354600480546040805163464b6c0d60e11b815290516001600160a01b03948516965063b2d03e4d9550889490921692638c96d81a9282820192602092908290030181865afa158015614195573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141b99190615cc3565b6040516001600160e01b031960e085901b168152600481019290925260248201526044015f604051808303815f87803b1580156141f4575f80fd5b505af1158015614206573d5f803e3d5ffd5b505050505b50949350505050565b5f868152600660205260409020805460045463ffffffff90911690600160a01b900460ff1615801561426757507f000000000000000000000000000000000000000000000000000000000000000a878201115b15614285576040516347f1bdb360e11b815260040160405180910390fd5b61429488828989898989614d72565b50815463ffffffff600160601b8204811691160361430f57815463ffffffff600160601b80830482168a018216810263ffffffff60601b199093169290921780855560405192900416815288907f947f955eec7e1f626bee3afd2aa47b5de04ddcdd3fe78dc8838213015ef58dfd9060200160405180910390a25b815463ffffffff80821689011663ffffffff199091168117835560405190815288907fdd01838a366ae4dc9a86e1922512c0716abebc9a440baae0e22d2dec578223f09060200160405180910390a261436a885f6001613ba7565b61287c613e23565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320008161439f8585614f06565b90508015611e88575f85815260208390526040902061420b9085614fae565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816143eb8585614fc2565b90508015611e88575f85815260208390526040902061420b908561503b565b5f8181526006602052604090206001810154600160401b90046001600160a01b031661444957604051633ed893db60e21b815260040160405180910390fd5b6001810154600160401b90046001600160a01b0316331480159061447a575060038101546001600160a01b03163314155b15612eb65760405163743a3f7960e11b815260040160405180910390fd5b5f8381526006602052604090205463ffffffff166144b68284615d02565b111561171457604051635caf530f60e11b815260040160405180910390fd5b6060806144e3603084615e00565b6001600160401b038111156144fa576144fa615b1d565b6040519080825280601f01601f191660200182016040528015614524576020820181803683370190505b50614530606085615e00565b6001600160401b0381111561454757614547615b1d565b6040519080825280601f01601f191660200182016040528015614571576020820181803683370190505b5091509150915091565b5f805b8581101561287c576145bc88614594838a615d02565b7f059e9c54cf92ba46cc39c6b4acd51d5116e9d49fabee6193530ea918b54be94a919061504f565b60018082015460801c85840160308181028a01908101929092528354602092830152600284015460609182028901928301526003840154604083015260048401549101529092500161457e565b613e897fb3e25b5404b87e5a838579cb5d7481d61ad96ee284d38ec1e97c07ba64e7f6fc613b12565b60605f614640603084615e00565b6001600160401b0381111561465757614657615b1d565b6040519080825280601f01601f191660200182016040528015614681576020820181803683370190505b5091505f5b838110156146c45761469c866145948388615d02565b9150603081026020840101600183015460801c60108201528254815250600181019050614686565b50509392505050565b5f8181526006602052604090206001810154600160401b90046001600160a01b031661470c57604051633ed893db60e21b815260040160405180910390fd5b6001810154600160401b90046001600160a01b03163314612eb65760405163743a3f7960e11b815260040160405180910390fd5b5f8215806147565750816147548486615d02565b115b80614764575063ffffffff82115b156147825760405163575697ff60e01b815260040160405180910390fd5b604080516030808252606082019092525f91829182918291906020820181803683370190505090508787015b888111156148bc576147e47f059e9c54cf92ba46cc39c6b4acd51d5116e9d49fabee6193530ea918b54be94a8b5f19840161504f565b9450600185015460801c60308301528454602083015286811015614856576148307f059e9c54cf92ba46cc39c6b4acd51d5116e9d49fabee6193530ea918b54be94a8b5f198a0161504f565b93505f92505b6005831015614852578284015483860155600183019250614836565b8394505b5f92505b6005831015614873575f8386015560018301925061485a565b600187039650600181039050897fea4b75aaf57196f73d338cadf79ecd0a437902e2dd0d2c4c2cf3ea71b8ab27b9836040516148af9190615661565b60405180910390a26147ae565b509498975050505050505050565b5f61344a8383615086565b5f8190556040518181527f699ec9c671aad1f3dcc15e571375584a1d6fb7176afd545d14467fd31477e98e906020015b60405180910390a150565b5f61491c600885615eb9565b614927601084615eb9565b14158061493d575061493a600885615ecc565b15155b80614951575061494e601083615ecc565b15155b1561496f5760405163319c9a2160e21b815260040160405180910390fd5b61497a600885615eb9565b95945050505050565b61498c83613b71565b5f838152600660205260409020600181015463ffffffff1683036149b05750505050565b8054600160401b900463ffffffff168311156149df5760405163cc11217f60e01b815260040160405180910390fd5b811580156149f65750600181015463ffffffff1683105b15614a14576040516371a4bd1560e01b815260040160405180910390fd5b6001810180546009805463ffffffff9283166001600160401b03600160401b808404821692909203890116026fffffffffffffffff000000000000000019909116179055815490851663ffffffff1990911617905560405183815284907f0f67960648751434ae86bf350db61194f387fda387e7f568b0ccd0ae0c2201669060200160405180910390a250505050565b614aad82613b71565b5f8281526006602052604090208054600160801b900463ffffffff168203614ad457505050565b6001810154815463ffffffff918216600160401b90910482160316821115614b0f57604051636af5e8d960e11b815260040160405180910390fd5b805463ffffffff60801b1916600160801b63ffffffff84160217815560405182815283907fb4f5879eca27b32881cec7907d1310378e9b4c79927062fb7d4a321434b5b04a9060200160405180910390a25f82118015614b7c57508054600160a01b900463ffffffff1615155b15614c0c5780546009805467ffffffffffffffff60801b198116600160a01b90930463ffffffff16600160801b918290046001600160401b03908116919091031602919091179055805463ffffffff60a01b191681556040515f815283907ff9109091b368cedad2edff45414eef892edd6b4fe80084bd590aa8f8def8ed339060200160405180910390a2505050565b611714835f80613ba7565b5f818310614c25578161344a565b5090919050565b613e896150ac565b614c3c613e63565b805f03614c5c5760405163ad58bfc760e01b815260040160405180910390fd5b5f5f198203614c6d57505f19614c7a565b614c778242615d02565b90505b612eb6816150f5565b80546001600160801b03165f90815260018201602052604090205480614cbc576040516363c3654960e01b815260040160405180910390fd5b81546fffffffffffffffffffffffffffffffff19166001600160801b0382161790915590565b60801b67ffffffffffffffff60801b1667ffffffffffffffff60801b19919091161790565b5f611321825490565b614d1a8282612751565b612eb65760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b614d55612b9d565b613e895760405163b047186b60e01b815260040160405180910390fd5b5f851580614d8c575063ffffffff614d8a8789615d02565b115b15614daa5760405163575697ff60e01b815260040160405180910390fd5b6030860284141580614dbf5750606086028214155b15614ddd5760405163251f56a160e21b815260040160405180910390fd5b604080516030808252606082019092525f91829182916020820181803683370190505090505f5b89811015614ef657614e377f059e9c54cf92ba46cc39c6b4acd51d5116e9d49fabee6193530ea918b54be94a8d8d61504f565b60308281028b0160108101359185018290523560208501819052919550171592508215614e7757604051630f35a7eb60e21b815260040160405180910390fd5b60208201518455603082015160801b60018501556060810287018035600286015560208101356003860155604081013560048601555060018101905060018b019a508b7fc77a17d6b857abe6d6e6c37301621bc72c4dd52fa8830fb54dfa715c04911a8983604051614ee99190615661565b60405180910390a2614e04565b50989a9950505050505050505050565b5f5f80516020615f14833981519152614f1f8484612751565b614f9e575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055614f543390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050611321565b5f915050611321565b5092915050565b5f61344a836001600160a01b038416615190565b5f5f80516020615f14833981519152614fdb8484612751565b15614f9e575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050611321565b5f61344a836001600160a01b0384166151dc565b6040805160208082019590955280820193909352606080840192909252805180840390920182526080909201909152805191012090565b5f825f01828154811061509b5761509b615cda565b905f5260205f200154905092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613e8957604051631afcd79f60e31b815260040160405180910390fd5b61511e7fe8b012900cb200ee5dfc3b895a32791b67d12891b09f117814f167a237783a02829055565b5f198103615157576040515f1981527f32fb7c9891bc4f963c7de9f1186d2a7755c7d6e9f4604dabe1d8bb3027c2f49e90602001614905565b7f32fb7c9891bc4f963c7de9f1186d2a7755c7d6e9f4604dabe1d8bb3027c2f49e6151824283615ded565b604051908152602001614905565b5f8181526001830160205260408120546151d557508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611321565b505f611321565b5f8181526001830160205260408120548015614f9e575f6151fe600183615ded565b85549091505f9061521190600190615ded565b9050808214615270575f865f01828154811061522f5761522f615cda565b905f5260205f200154905080875f01848154811061524f5761524f615cda565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061528157615281615edf565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611321565b5f602082840312156152c6575f80fd5b81356001600160e01b03198116811461344a575f80fd5b5f805f606084860312156152ef575f80fd5b505081359360208301359350604090920135919050565b5f8083601f840112615316575f80fd5b5081356001600160401b0381111561532c575f80fd5b602083019150836020828501011115615343575f80fd5b9250929050565b5f6060828403121561535a575f80fd5b50919050565b5f8083601f840112615370575f80fd5b5081356001600160401b03811115615386575f80fd5b6020830191508360208260051b8501011115615343575f80fd5b6001600160a01b0381168114611359575f80fd5b5f805f805f805f805f6101008a8c0312156153cd575f80fd5b8935985060208a01356001600160401b03808211156153ea575f80fd5b6153f68d838e01615306565b909a50985060408c013591508082111561540e575f80fd5b61541a8d838e01615306565b909850965086915061542f8d60608e0161534a565b955060c08c0135915080821115615444575f80fd5b506154518c828d01615360565b90945092505060e08a0135615465816153a0565b809150509295985092959850929598565b5f8060408385031215615487575f80fd5b823591506020830135615499816153a0565b809150509250929050565b5f602082840312156154b4575f80fd5b5035919050565b5f80602083850312156154cc575f80fd5b82356001600160401b038111156154e1575f80fd5b6154ed85828601615360565b90969095509350505050565b5f806040838503121561550a575f80fd5b50508035926020909101359150565b5f805f805f6080868803121561552d575f80fd5b85359450602086013593506040860135925060608601356001600160401b03811115615557575f80fd5b61556388828901615360565b969995985093965092949392505050565b5f60a0828403121561535a575f80fd5b5f805f60e08486031215615596575f80fd5b83359250602084013591506155ae8560408601615574565b90509250925092565b602080825282518282018190525f9190848201906040850190845b818110156155ee578351835292840192918401916001016155d2565b50909695505050505050565b5f81518084525f5b8181101561561e57602081850181015186830182015201615602565b505f602082860101526020601f19601f83011685010191505092915050565b604081525f61564f60408301856155fa565b828103602084015261497a81856155fa565b602081525f61344a60208301846155fa565b5f8060408385031215615684575f80fd5b823561568f816153a0565b946020939093013593505050565b5f602082840312156156ad575f80fd5b81356001600160801b038116811461344a575f80fd5b815163ffffffff1681526101e0810160208301516156e9602084018263ffffffff169052565b506040830151615701604084018263ffffffff169052565b506060830151615719606084018263ffffffff169052565b506080830151615731608084018263ffffffff169052565b5060a083015161574960a084018263ffffffff169052565b5060c083015161576160c084018263ffffffff169052565b5060e083015161577660e084018260ff169052565b506101008381015163ffffffff908116918401919091526101208085015190911690830152610140808401516001600160a01b039081169184019190915261016080850151821690840152610180808501518216908401526101a080850151909116908301526101c0928301511515929091019190915290565b5f805f805f805f805f806101a08b8d03121561580a575f80fd5b8a35995060208b01356001600160401b0380821115615827575f80fd5b6158338e838f01615306565b909b50995060408d013591508082111561584b575f80fd5b6158578e838f01615306565b909950975087915061586c8e60608f0161534a565b965061587b8e60c08f01615574565b95506101608d0135915080821115615891575f80fd5b5061589e8d828e01615360565b9094509250506101808b01356158b3816153a0565b809150509295989b9194979a5092959850565b5f805f805f805f610120888a0312156158dd575f80fd5b873596506020880135955060408801356001600160401b0380821115615901575f80fd5b61590d8b838c01615306565b909750955060608a0135915080821115615925575f80fd5b506159328a828b01615306565b909450925061594690508960808a01615574565b905092959891949750929550565b5f805f8060408587031215615967575f80fd5b84356001600160401b038082111561597d575f80fd5b61598988838901615306565b909650945060208701359150808211156159a1575f80fd5b506159ae87828801615306565b95989497509550505050565b5f805f80608085870312156159cd575f80fd5b84356159d8816153a0565b935060208501356159e8816153a0565b92506040850135915060608501356159ff816153a0565b939692955090935050565b5f805f60408486031215615a1c575f80fd5b8335925060208401356001600160401b03811115615a38575f80fd5b615a4486828701615306565b9497909650939450505050565b80358015158114615a60575f80fd5b919050565b5f805f8060808587031215615a78575f80fd5b843593506020850135925060408501359150615a9660608601615a51565b905092959194509250565b5f805f805f8060808789031215615ab6575f80fd5b863595506020870135945060408701356001600160401b0380821115615ada575f80fd5b615ae68a838b01615306565b90965094506060890135915080821115615afe575f80fd5b50615b0b89828a01615306565b979a9699509497509295939492505050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715615b5357615b53615b1d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715615b8157615b81615b1d565b604052919050565b5f6020808385031215615b9a575f80fd5b82516001600160401b0380821115615bb0575f80fd5b9084019060408287031215615bc3575f80fd5b615bcb615b31565b825182811115615bd9575f80fd5b8301601f81018813615be9575f80fd5b805183811115615bfb57615bfb615b1d565b8060051b9350615c0c868501615b59565b818152938201860193868101908a861115615c25575f80fd5b928701925b85841015615c4357835182529287019290870190615c2a565b84525050509183015192820192909252949350505050565b8281525f60206040602084015260808301845160408086015281815180845260a0870191506020830193505f92505b80831015615caa5783518252928401926001929092019190840190615c8a565b5060208701516060870152809450505050509392505050565b5f60208284031215615cd3575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561132157611321615cee565b8183525f6001600160fb1b03831115615d2c575f80fd5b8260051b80836020870137939093016020019392505050565b8681528560208201526001600160a01b038516604082015283606082015260a060808201525f615d7960a083018486615d15565b98975050505050505050565b5f610100820190506001600160a01b03861682528460208301528360408301528235606083015260208301356080830152604083013560ff8116808214615dca575f80fd5b60a084015250606083013560c083015260809092013560e0909101529392505050565b8181038181111561132157611321615cee565b808202811582820484141761132157611321615cee565b5f60208284031215615e27575f80fd5b815161344a816153a0565b63ffffffff828116828216039080821115614fa757614fa7615cee565b5f60208284031215615e5f575f80fd5b813561344a816153a0565b5f60208284031215615e7a575f80fd5b61344a82615a51565b6001600160a01b0384168152604060208201525f61497a604083018486615d15565b634e487b7160e01b5f52601260045260245ffd5b5f82615ec757615ec7615ea5565b500490565b5f82615eda57615eda615ea5565b500690565b634e487b7160e01b5f52603160045260245ffdfebb75b874360e0bfd87f964eadd8276d8efb7c942134fc329b513032d0803e0c602dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a164736f6c6343000818000a \ No newline at end of file diff --git a/internal/lido/contracts/csmodule/keys.go b/internal/lido/contracts/csmodule/keys.go new file mode 100644 index 000000000..491800065 --- /dev/null +++ b/internal/lido/contracts/csmodule/keys.go @@ -0,0 +1,67 @@ +/* +Copyright 2022 Nethermind + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package csmodule + +import ( + "fmt" + "math/big" +) + +// Keys : Struct represent keys status of Node Operator +type Keys struct { + StuckValidatorsCount *big.Int + RefundedValidatorsCount *big.Int + ExitedValidators *big.Int + DepositedValidators *big.Int + DepositableValidatorsCount *big.Int +} + +/* +KeysStatus : +This function is responsible for: +retrieving keys status for Lido CSM node +params :- +network (string): The name of the network (e.g."holesky"). +nodeID (*big.Int): Node Operator ID +returns :- +a. Keys +Struct that include keys status +b. error +Error if any +*/ +func KeysStatus(network string, nodeID *big.Int) (Keys, error) { + var keys Keys + + if nodeID.Sign() < 0 { + return keys, fmt.Errorf("node ID value out-of-bounds: can't be negative") + } + contract, err := csModuleContract(network) + if err != nil { + return keys, fmt.Errorf("failed to call csModuleContract: %w", err) + } + + nodeOp, err := contract.GetNodeOperatorSummary(nil, nodeID) + if err != nil { + return keys, fmt.Errorf("failed to call GetNodeOperator: %w", err) + } + keys.DepositableValidatorsCount = nodeOp.DepositableValidatorsCount + keys.DepositedValidators = nodeOp.TotalDepositedValidators + keys.ExitedValidators = nodeOp.TotalExitedValidators + keys.RefundedValidatorsCount = nodeOp.RefundedValidatorsCount + keys.StuckValidatorsCount = nodeOp.StuckValidatorsCount + + return keys, nil +} diff --git a/internal/lido/contracts/csmodule/keys_test.go b/internal/lido/contracts/csmodule/keys_test.go new file mode 100644 index 000000000..696d105b9 --- /dev/null +++ b/internal/lido/contracts/csmodule/keys_test.go @@ -0,0 +1,70 @@ +/* +Copyright 2022 Nethermind + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package csmodule + +import ( + "io" + "log" + "math/big" + "testing" +) + +func TestKeysStatus(t *testing.T) { + // Silence logger + log.SetOutput(io.Discard) + tcs := []struct { + name string + network string + nodeID *big.Int + invalidID bool + }{ + { + "Valid NodeID, Holesky #1", "holesky", big.NewInt(13), false, + }, + { + "Valid NodeID, Holesky #2", "holesky", big.NewInt(4), false, + }, + { + "Invalid NodeID, Holesky #1", "holesky", big.NewInt(-4), true, + }, + { + "Invalid NodeID, Holesky #2", "holesky", big.NewInt(20000), true, + }, + } + + for _, tc := range tcs { + t.Run(tc.name, func(t *testing.T) { + keys, err := KeysStatus(tc.network, tc.nodeID) + if err != nil && !tc.invalidID { + t.Fatalf("failed to call KeysStatus: %v", err) + } + nodeInfo, err := NodeOperatorInfo(tc.network, tc.nodeID) + if err != nil { + t.Fatalf("failed to call NodeOperatorInfo: %v", err) + } + expectedDeposited := big.NewInt(int64(nodeInfo.TotalDepositedKeys)) + deposited := keys.DepositedValidators + if deposited == nil && tc.invalidID { + t.Skipf("Expected nil value for deposited keys") + } else if deposited == nil && !tc.invalidID { + t.Fatalf("invalid deposited value: expected a value, got nil") + } + if deposited.Cmp(expectedDeposited) != 0 { + t.Errorf("Not same nodeID, expected %v, got: %v", expectedDeposited, deposited) + } + }) + } +} diff --git a/internal/lido/contracts/csmodule/nodeOperator.go b/internal/lido/contracts/csmodule/nodeOperator.go new file mode 100644 index 000000000..e92a164b5 --- /dev/null +++ b/internal/lido/contracts/csmodule/nodeOperator.go @@ -0,0 +1,139 @@ +/* +Copyright 2022 Nethermind + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package csmodule + +import ( + "fmt" + "math/big" + + "github.com/NethermindEth/sedge/internal/lido/contracts" + "github.com/ethereum/go-ethereum/common" +) + +/* +NodeID : +This function is responsible for: +retrieving NodeOperatorID for Lido CSM node +params :- +network (string): The name of the network (e.g."holesky"). +rewardAddress (string): The reward address of the node operator +returns :- +a. *big.Int +Node Operator ID +b. error +Error if any +*/ +func NodeID(network string, rewardAddress string) (*big.Int, error) { + // Convert the reward address to a common.Address and check if it's zero + rewardAddr := common.HexToAddress(rewardAddress) + if rewardAddr == (common.Address{}) { + return nil, fmt.Errorf("invalid reward address: can't be zero address") + } + + nodeOperatorIDs, err := nodeOpIDs(network) + if err != nil { + return nil, fmt.Errorf("failed to call NodeOpIDs: %w", err) + } + + for _, nodeID := range nodeOperatorIDs { + node, err := NodeOperatorInfo(network, nodeID) + if err != nil { + return nil, fmt.Errorf("failed to get NodeOperatorInfo: %w", err) + } + if node.RewardAddress == rewardAddr { + return nodeID, nil + } + } + return nil, fmt.Errorf("invalid reward address: %s", rewardAddress) +} + +/* +NodeOperatorInfo : +This function is responsible for: +retrieving NodeOperator info for Lido CSM node +params :- +network (string): The name of the network (e.g."holesky"). +nodeID (*big.Int): Node Operator ID +returns :- +a. NodeOperator +Struct that includes Node Operator info +b. error +Error if any +*/ +func NodeOperatorInfo(network string, nodeID *big.Int) (NodeOperator, error) { + var nodeOperator NodeOperator + contract, err := csModuleContract(network) + if err != nil { + return nodeOperator, fmt.Errorf("failed to call csModuleContract: %w", err) + } + + nodeOperator, err = contract.GetNodeOperator(nil, nodeID) + if err != nil { + return nodeOperator, fmt.Errorf("failed to call GetNodeOperator: %w", err) + } + return nodeOperator, nil +} + +func nodeOpIDs(network string) ([]*big.Int, error) { + var nodeOperatorIDs []*big.Int + contract, err := csModuleContract(network) + if err != nil { + return nil, fmt.Errorf("failed to call csModuleContract: %w", err) + } + + limit, err := nodeOpsCount(network) + if err != nil { + return nil, fmt.Errorf("failed to call nodeOpsCount: %w", err) + } + offset := big.NewInt(0) + + nodeOperatorIDs, err = contract.GetNodeOperatorIds(nil, offset, limit) + if err != nil { + return nil, fmt.Errorf("failed to call GetNodeOperatorIds: %w", err) + } + return nodeOperatorIDs, nil +} + +func nodeOpsCount(network string) (*big.Int, error) { + var nodeOperatorCount *big.Int + contract, err := csModuleContract(network) + if err != nil { + return nil, fmt.Errorf("failed to call csModuleContract: %w", err) + } + + nodeOperatorCount, err = contract.GetNodeOperatorsCount(nil) + if err != nil { + return nil, fmt.Errorf("failed to call GetNodeOperatorsCount: %w", err) + } + + return nodeOperatorCount, nil +} + +func csModuleContract(network string) (*Csmodule, error) { + client, err := contracts.ConnectClient(network) + if err != nil { + return nil, fmt.Errorf("failed to connect to client: %w", err) + } + defer client.Close() + + contractName := contracts.CSModule + address := common.HexToAddress(contracts.DeployedAddresses(contractName)[network]) + contract, err := NewCsmodule(address, client) + if err != nil { + return nil, fmt.Errorf("failed to create CSModule instance: %w", err) + } + return contract, nil +} diff --git a/internal/lido/contracts/csmodule/nodeOperator_test.go b/internal/lido/contracts/csmodule/nodeOperator_test.go new file mode 100644 index 000000000..bb57cbdd8 --- /dev/null +++ b/internal/lido/contracts/csmodule/nodeOperator_test.go @@ -0,0 +1,169 @@ +/* +Copyright 2022 Nethermind + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package csmodule + +import ( + "io" + "log" + "math/big" + "testing" + "unicode/utf8" +) + +func TestNodeOpIDs(t *testing.T) { + // Silence logger + log.SetOutput(io.Discard) + tcs := []struct { + name string + network string + }{ + { + "NodeOpIDs, Holesky", "holesky", + }, + } + for _, tc := range tcs { + t.Run(tc.name, func(t *testing.T) { + nodeOperatorIDs, err := nodeOpIDs(tc.network) + if err != nil { + t.Errorf("failed to call NodeOpIDs: %v", err) + } + + nodeOperatorsCount, err := nodeOpsCount(tc.network) + if err != nil { + t.Errorf("failed to call nodeOpsCount: %v", err) + } + + if len(nodeOperatorIDs) != int(nodeOperatorsCount.Int64()) { + t.Errorf("mismatch: nodeOperatorIDs size (%d) != nodeOperatorsCount (%d)", len(nodeOperatorIDs), nodeOperatorsCount.Int64()) + } + }) + } +} + +func TestNodeOperatorInfo(t *testing.T) { + log.SetOutput(io.Discard) + tcs := []struct { + name string + network string + nodeID *big.Int + expectedAddress string + wantErr bool + }{ + { + "Valid NodeID, Holesky", "holesky", big.NewInt(13), "0xC870Fd7316956C1582A2c8Fd2c42552cCEC70C88", false, + }, + { + "Valid Address, Holesky", "holesky", big.NewInt(4), "0xed1Fc097b5B9B007d40502e08aa0cddF477AaeaA", false, + }, + { + "Invalid Address, Holesky", "holesky", big.NewInt(4), "0xC870Fd7316956C1582A2c8Fd2c46752cCEC70C99", true, + }, + } + + for _, tc := range tcs { + t.Run(tc.name, func(t *testing.T) { + nodeOp, err := NodeOperatorInfo(tc.network, tc.nodeID) + if err != nil { + t.Fatalf("failed to call NodeOperatorInfo: %v", err) + } + if nodeOp.ManagerAddress.String() != tc.expectedAddress && !tc.wantErr { + t.Errorf("Not same Manager Address, expected %v, got: %v", tc.expectedAddress, nodeOp.ManagerAddress.Hex()) + } + }) + } +} + +func TestNodeID(t *testing.T) { + // Silence logger + log.SetOutput(io.Discard) + tcs := []struct { + name string + network string + expectedNodeID *big.Int + wantErr bool + }{ + { + "Valid NodeID, Holesky #1", "holesky", big.NewInt(13), false, + }, + { + "Valid NodeID, Holesky #2", "holesky", big.NewInt(4), false, + }, + { + "Invalid NodeID, Holesky #1", "holesky", big.NewInt(-4), true, + }, + { + "Invalid NodeID, Holesky #2", "holesky", big.NewInt(20000), true, + }, + } + + for _, tc := range tcs { + t.Run(tc.name, func(t *testing.T) { + nodeOp, err := NodeOperatorInfo(tc.network, tc.expectedNodeID) + if err != nil { + t.Fatalf("failed to call NodeOperatorInfo: %v", err) + } + nodeID, err := NodeID(tc.network, nodeOp.RewardAddress.Hex()) + if err != nil && !tc.wantErr { + t.Fatalf("failed to call NodeID: %v", err) + } + if nodeID != nil && nodeID.Cmp(tc.expectedNodeID) != 0 { + t.Errorf("not same nodeID, expected %v, got: %v", tc.expectedNodeID, nodeID) + } + }) + } +} + +func FuzzTestNodeID(f *testing.F) { + testcases := []struct { + network string + nodeID *big.Int + }{ + {"holesky", big.NewInt(13)}, + {"holesky", big.NewInt(-1)}, + {"holesky", big.NewInt(40000)}, + } + + for _, tc := range testcases { + f.Add(tc.network, tc.nodeID.String()) + } + + f.Fuzz(func(t *testing.T, network string, nodeIDStr string) { + // Convert nodeIDStr back to *big.Int + nodeID, ok := new(big.Int).SetString(nodeIDStr, 10) + if !ok { + t.Skip("Skipping invalid big.Int string") + } + + // Silence logger + log.SetOutput(io.Discard) + + nodeOp, err := NodeOperatorInfo(network, nodeID) + if err != nil { + t.Logf("Expected failure in NodeOperatorInfo: %v", err) + return + } + + nodeIDReturned, err := NodeID(network, nodeOp.RewardAddress.Hex()) + if err != nil { + t.Logf("Expected failure in NodeID: %v", err) + return + } + + if nodeIDReturned != nil && utf8.ValidString(network) && nodeIDReturned.Cmp(nodeID) != 0 { + t.Errorf("not same nodeID, expected %v, got: %v", nodeID, nodeIDReturned) + } + }) +} diff --git a/internal/lido/contracts/mevboostrelaylist/MEVBoostRelayAllowedList.go b/internal/lido/contracts/mevboostrelaylist/MEVBoostRelayAllowedList.go deleted file mode 100644 index 8f6c5836b..000000000 --- a/internal/lido/contracts/mevboostrelaylist/MEVBoostRelayAllowedList.go +++ /dev/null @@ -1,1398 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package mevboostrelaylist - -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 -) - -// Struct0 is an auto generated low-level Go binding around an user-defined struct. -type Struct0 struct { - Uri string - Operator string - IsMandatory bool - Description string -} - -// ApiMetaData contains all meta data concerning the Api contract. -var ApiMetaData = &bind.MetaData{ - ABI: "[{\"name\":\"RelayAdded\",\"inputs\":[{\"name\":\"uri_hash\",\"type\":\"string\",\"indexed\":true},{\"name\":\"relay\",\"type\":\"tuple\",\"components\":[{\"name\":\"uri\",\"type\":\"string\"},{\"name\":\"operator\",\"type\":\"string\"},{\"name\":\"is_mandatory\",\"type\":\"bool\"},{\"name\":\"description\",\"type\":\"string\"}],\"indexed\":false}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"RelayRemoved\",\"inputs\":[{\"name\":\"uri_hash\",\"type\":\"string\",\"indexed\":true},{\"name\":\"uri\",\"type\":\"string\",\"indexed\":false}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"AllowedListUpdated\",\"inputs\":[{\"name\":\"allowed_list_version\",\"type\":\"uint256\",\"indexed\":true}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"OwnerChanged\",\"inputs\":[{\"name\":\"new_owner\",\"type\":\"address\",\"indexed\":true}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"ManagerChanged\",\"inputs\":[{\"name\":\"new_manager\",\"type\":\"address\",\"indexed\":true}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"ERC20Recovered\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true}],\"anonymous\":false,\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"constructor\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"outputs\":[]},{\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"get_relays_amount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}]},{\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"get_owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\"}]},{\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"get_manager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\"}]},{\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"get_relays\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"components\":[{\"name\":\"uri\",\"type\":\"string\"},{\"name\":\"operator\",\"type\":\"string\"},{\"name\":\"is_mandatory\",\"type\":\"bool\"},{\"name\":\"description\",\"type\":\"string\"}]}]},{\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"get_relay_by_uri\",\"inputs\":[{\"name\":\"relay_uri\",\"type\":\"string\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"components\":[{\"name\":\"uri\",\"type\":\"string\"},{\"name\":\"operator\",\"type\":\"string\"},{\"name\":\"is_mandatory\",\"type\":\"bool\"},{\"name\":\"description\",\"type\":\"string\"}]}]},{\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"get_allowed_list_version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}]},{\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"add_relay\",\"inputs\":[{\"name\":\"uri\",\"type\":\"string\"},{\"name\":\"operator\",\"type\":\"string\"},{\"name\":\"is_mandatory\",\"type\":\"bool\"},{\"name\":\"description\",\"type\":\"string\"}],\"outputs\":[]},{\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"remove_relay\",\"inputs\":[{\"name\":\"uri\",\"type\":\"string\"}],\"outputs\":[]},{\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"change_owner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"outputs\":[]},{\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"set_manager\",\"inputs\":[{\"name\":\"manager\",\"type\":\"address\"}],\"outputs\":[]},{\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"dismiss_manager\",\"inputs\":[],\"outputs\":[]},{\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"recover_erc20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"},{\"name\":\"recipient\",\"type\":\"address\"}],\"outputs\":[]},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"}]", - Bin: "0x60206115ff6000396000518060a01c6115fa57604052346115fa5760405161007e5760126060527f7a65726f206f776e65722061646472657373000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405160005561156361009661000039611563610000f36003361161000c57611181565b60003560e01c346115515763312c3165811861003657600436186115515760025460405260206040f35b630ac298dc811861005557600436186115515760005460405260206040f35b639e4a0fc4811861007457600436186115515760015460405260206040f35b6304e469ea81186102545760043618611551576020806040528060400160006002548083528060051b6000826028811161155157801561024057905b828160051b60208801015260648102600301836020880101608080825280820183548082526001850160208301600083601f0160051c6020811161155157801561010c57905b808401548160051b8401526001018181186100f6575b50505050508051806020830101601f82600003163682375050601f19601f825160200101169050810190508060208301526021830181830181548082526001830160208301600083601f0160051c6020811161155157801561018057905b808401548160051b84015260010181811861016a575b50505050508051806020830101601f82600003163682375050601f19601f825160200101169050905081019050604283015460408301528060608301526043830181830181548082526001830160208301600083601f0160051c6020811161155157801561020057905b808401548160051b8401526001018181186101ea575b50505050508051806020830101601f82600003163682375050601f19601f82516020010116905090508101905090509050830192506001018181186100b0575b505082016020019150509050810190506040f35b63f5f33c7b81186104b457604436106115515760043560040161040081351161155157803580611120526020820181816111403750505061112051806040528060608261114060045afa50506102ab611560611187565b61156051611540526115405119610322576015611560527f6e6f2072656c61792077697468207468652055524900000000000000000000006115805261156050611560518061158001601f826000031636823750506308c379a061152052602061154052601f19601f61156051011660440161153cfd5b6020806115605260646115405160025481101561155157026003018161156001608080825280820183548082526001850160208301600083601f0160051c6020811161155157801561038657905b808401548160051b840152600101818118610370575b50505050508051806020830101601f82600003163682375050601f19601f825160200101169050810190508060208301526021830181830181548082526001830160208301600083601f0160051c602081116115515780156103fa57905b808401548160051b8401526001018181186103e4575b50505050508051806020830101601f82600003163682375050601f19601f825160200101169050905081019050604283015460408301528060608301526043830181830181548082526001830160208301600083601f0160051c6020811161155157801561047a57905b808401548160051b840152600101818118610464575b50505050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190509050905081019050611560f35b6376650ad381186104d4576004361861155157610fa35460405260206040f35b632e21ecef81186109805760e43610611551576004356004016104008135116115515780358061112052602082018181611140375050506024356004016104008135116115515780358061154052602082018181611560375050506044358060011c611551576119605260643560040161040081351161155157803580611980526020820181816119a03750505061056a6112ed565b6000611da052611da08051602082012090506111205161114020186105ef57601b6121c0527f72656c617920555249206d757374206e6f7420626520656d70747900000000006121e0526121c0506121c051806121e001601f826000031636823750506308c379a06121805260206121a052601f19601f6121c051011660440161219cfd5b6027600254111561066057601c611da0527f616c7265616479206d6178206e756d626572206f662072656c61797300000000611dc052611da050611da05180611dc001601f826000031636823750506308c379a0611d60526020611d8052601f19601f611da0510116604401611d7cfd5b61112051806040528060608261114060045afa5050610680611dc0611187565b611dc051611da052611da051191561071d576021611dc0527f72656c61792077697468207468652055524920616c7265616479206578697374611de0527f7300000000000000000000000000000000000000000000000000000000000000611e0052611dc050611dc05180611de001601f826000031636823750506308c379a0611d80526020611da052601f19601f611dc0510116604401611d9cfd5b6111205180611dc05280611de08261114060045afa505061154051806121e052806122008261156060045afa5050611960516126005261198051806126205280612640826119a060045afa505060025460278111611551576001810160025560648102600301611dc05180825560018201600082601f0160051c602081116115515780156107bf57905b8060051b611de00151818401556001018181186107a7575b505050506121e05180602183015560016021830101600082601f0160051c6020811161155157801561080557905b8060051b6122000151818401556001018181186107ed575b505050506126005160428201556126205180604383015560016043830101600082601f0160051c6020811161155157801561085457905b8060051b61264001518184015560010181811861083c575b505050505050610862611374565b61112051611140207feee5faa84d45af657ab405cdbf2c6a8a6d466e83fa694a358fee5ff84431d0bf602080612a405280612a40016080808252808201611dc05180825260208201818183611de060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190508060208301528082016121e0518082526020820181818361220060045afa5050508051806020830101601f82600003163682375050601f19601f82516020010116905081019050612600516040830152806060830152808201612620518082526020820181818361264060045afa5050508051806020830101601f82600003163682375050601f19601f82516020010116905081019050905081019050612a40a2005b63f5a70a808118610ca45760443610611551576004356004016104008135116115515780358061112052602082018181611140375050506109bf6112ed565b600061154052611540805160208201209050611120516111402018610a4457601b611960527f72656c617920555249206d757374206e6f7420626520656d70747900000000006119805261196050611960518061198001601f826000031636823750506308c379a061192052602061194052601f19601f61196051011660440161193cfd5b6002546115405261112051806040528060608261114060045afa5050610a6b611580611187565b6115805161156052611540516115605110610ae6576015611580527f6e6f2072656c61792077697468207468652055524900000000000000000000006115a0526115805061158051806115a001601f826000031636823750506308c379a061154052602061156052601f19601f61158051011660440161155cfd5b61154051600181038181116115515790506115605114610c1257606461156051600254811015611551570260030160646115405160018103818111611551579050600254811015611551570260030180548083556001820160018401600083601f0160051c60208111611551578015610b6e57905b8084015481840155600101818118610b5b575b50505050506021810180548060218501556001820160016021860101600083601f0160051c60208111611551578015610bb657905b8084015481840155600101818118610ba3575b505050505050604281015460428301556043810180548060438501556001820160016043860101600083601f0160051c60208111611551578015610c0957905b8084015481840155600101818118610bf6575b50505050505050505b6001600254801561155157038060025550610c2b611374565b61112051611140207fef756634af7ee7210f786ec0f91930afa63fda84d9ff6493ae681c332055dadb602080611580528061158001611120518082526020820181818361114060045afa5050508051806020830101601f82600003163682375050601f19601f82516020010116905081019050611580a2005b63253c8bd48118610dca5760243618611551576004358060a01c61155157608052610ccd6113ba565b608051610d3157601260a0527f7a65726f206f776e65722061646472657373000000000000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b60005460805118610d9957600a60a0527f73616d65206f776e65720000000000000000000000000000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b6080516000556080517fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf36600060a0a2005b639aece83e8118610ef05760243618611551576004358060a01c61155157608052610df36113ba565b608051610e5757601460a0527f7a65726f206d616e61676572206164647265737300000000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b60015460805118610ebf57600c60a0527f73616d65206d616e61676572000000000000000000000000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b6080516001556080517f198db6e425fb8aafd1823c6ca50be2d51e5764571a5ae0f0f21c6812e45def0b600060a0a2005b63417a02b48118610f9e576004361861155157610f0b6113ba565b600154610f6f57600e6080527f6e6f206d616e616765722073657400000000000000000000000000000000000060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b600060015560007f198db6e425fb8aafd1823c6ca50be2d51e5764571a5ae0f0f21c6812e45def0b60006080a2005b63edd885b4811861117f5760643618611551576004358060a01c611551576101e0526044358060a01c6115515761020052610fd76113ba565b6101e051611045576012610220527f7a65726f20746f6b656e206164647265737300000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b610200516110b3576016610220527f7a65726f20726563697069656e742061646472657373000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6101e0513b611122576011610220527f656f6120746f6b656e20616464726573730000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6024351561117d576101e05160405261020051606052602435608052611146611423565b610200516101e0517f8619312ed4eff1cf9f0116e6db2f49d9570a86f0350d1c5ad1bd0f7b0cf9e132602435610220526020610220a35b005b505b60006000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610460526000610480526000600254602881116115515780156112e257905b606481026003018054806104a05260018201600082601f0160051c6020811161155157801561120a57905b808301548160051b6104c001526001018181186111f2575b50505050602181018054806108c05260018201600082601f0160051c6020811161155157801561124e57905b808301548160051b6108e00152600101818118611236575b50505050506042810154610ce05260438101805480610d005260018201600082601f0160051c6020811161155157801561129c57905b808301548160051b610d200152600101818118611284575b5050505050506040516060206104a0516104c020186112c25761048051610460526112e2565b6104805160018101818110611551579050610480526001018181186111c7575b505061046051815250565b60005433186112fd576001611311565b600154331861130e57331515611311565b60005b61137257601f6040527f6d73672e73656e646572206e6f74206f776e6572206f72206d616e616765720060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b610fa35460018101818110611551579050604052604051610fa3556040517f49f5627aa055ec3fcd474f99c8b7799b798c04af7b9f215305512c867e5a183960006060a2565b6000543318156114215760146040527f6d73672e73656e646572206e6f74206f776e657200000000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b6000600460e0527fa9059cbb000000000000000000000000000000000000000000000000000000006101005260e08051602082018361014001815181525050808301925050506060518161014001526020810190506080518161014001526020810190508061012052610120505060206101c06101205161014060006040515af16114b3573d600060003e3d6000fd5b3d602081183d60201002186101a0526101a080518060a05260208201805160c05250505060a0511561154f5760c05160a05160200360031b1c61154f57601560e0527f6572633230207472616e73666572206661696c656400000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b565b600080fda165767970657283000306000b005b600080fd", -} - -// ApiABI is the input ABI used to generate the binding from. -// Deprecated: Use ApiMetaData.ABI instead. -var ApiABI = ApiMetaData.ABI - -// ApiBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ApiMetaData.Bin instead. -var ApiBin = ApiMetaData.Bin - -// DeployApi deploys a new Ethereum contract, binding an instance of Api to it. -func DeployApi(auth *bind.TransactOpts, backend bind.ContractBackend, owner common.Address) (common.Address, *types.Transaction, *Api, error) { - parsed, err := ApiMetaData.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(ApiBin), backend, owner) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &Api{ApiCaller: ApiCaller{contract: contract}, ApiTransactor: ApiTransactor{contract: contract}, ApiFilterer: ApiFilterer{contract: contract}}, nil -} - -// Api is an auto generated Go binding around an Ethereum contract. -type Api struct { - ApiCaller // Read-only binding to the contract - ApiTransactor // Write-only binding to the contract - ApiFilterer // Log filterer for contract events -} - -// ApiCaller is an auto generated read-only Go binding around an Ethereum contract. -type ApiCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ApiTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ApiTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ApiFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ApiFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ApiSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ApiSession struct { - Contract *Api // 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 -} - -// ApiCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ApiCallerSession struct { - Contract *ApiCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ApiTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ApiTransactorSession struct { - Contract *ApiTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ApiRaw is an auto generated low-level Go binding around an Ethereum contract. -type ApiRaw struct { - Contract *Api // Generic contract binding to access the raw methods on -} - -// ApiCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ApiCallerRaw struct { - Contract *ApiCaller // Generic read-only contract binding to access the raw methods on -} - -// ApiTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ApiTransactorRaw struct { - Contract *ApiTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewApi creates a new instance of Api, bound to a specific deployed contract. -func NewApi(address common.Address, backend bind.ContractBackend) (*Api, error) { - contract, err := bindApi(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &Api{ApiCaller: ApiCaller{contract: contract}, ApiTransactor: ApiTransactor{contract: contract}, ApiFilterer: ApiFilterer{contract: contract}}, nil -} - -// NewApiCaller creates a new read-only instance of Api, bound to a specific deployed contract. -func NewApiCaller(address common.Address, caller bind.ContractCaller) (*ApiCaller, error) { - contract, err := bindApi(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ApiCaller{contract: contract}, nil -} - -// NewApiTransactor creates a new write-only instance of Api, bound to a specific deployed contract. -func NewApiTransactor(address common.Address, transactor bind.ContractTransactor) (*ApiTransactor, error) { - contract, err := bindApi(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ApiTransactor{contract: contract}, nil -} - -// NewApiFilterer creates a new log filterer instance of Api, bound to a specific deployed contract. -func NewApiFilterer(address common.Address, filterer bind.ContractFilterer) (*ApiFilterer, error) { - contract, err := bindApi(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ApiFilterer{contract: contract}, nil -} - -// bindApi binds a generic wrapper to an already deployed contract. -func bindApi(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ApiMetaData.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 (_Api *ApiRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Api.Contract.ApiCaller.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 (_Api *ApiRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Api.Contract.ApiTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Api *ApiRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Api.Contract.ApiTransactor.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 (_Api *ApiCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Api.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 (_Api *ApiTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Api.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Api *ApiTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Api.Contract.contract.Transact(opts, method, params...) -} - -// GetAllowedListVersion is a free data retrieval call binding the contract method 0x76650ad3. -// -// Solidity: function get_allowed_list_version() view returns(uint256) -func (_Api *ApiCaller) GetAllowedListVersion(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "get_allowed_list_version") - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err -} - -// GetAllowedListVersion is a free data retrieval call binding the contract method 0x76650ad3. -// -// Solidity: function get_allowed_list_version() view returns(uint256) -func (_Api *ApiSession) GetAllowedListVersion() (*big.Int, error) { - return _Api.Contract.GetAllowedListVersion(&_Api.CallOpts) -} - -// GetAllowedListVersion is a free data retrieval call binding the contract method 0x76650ad3. -// -// Solidity: function get_allowed_list_version() view returns(uint256) -func (_Api *ApiCallerSession) GetAllowedListVersion() (*big.Int, error) { - return _Api.Contract.GetAllowedListVersion(&_Api.CallOpts) -} - -// GetManager is a free data retrieval call binding the contract method 0x9e4a0fc4. -// -// Solidity: function get_manager() view returns(address) -func (_Api *ApiCaller) GetManager(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "get_manager") - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err -} - -// GetManager is a free data retrieval call binding the contract method 0x9e4a0fc4. -// -// Solidity: function get_manager() view returns(address) -func (_Api *ApiSession) GetManager() (common.Address, error) { - return _Api.Contract.GetManager(&_Api.CallOpts) -} - -// GetManager is a free data retrieval call binding the contract method 0x9e4a0fc4. -// -// Solidity: function get_manager() view returns(address) -func (_Api *ApiCallerSession) GetManager() (common.Address, error) { - return _Api.Contract.GetManager(&_Api.CallOpts) -} - -// GetOwner is a free data retrieval call binding the contract method 0x0ac298dc. -// -// Solidity: function get_owner() view returns(address) -func (_Api *ApiCaller) GetOwner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "get_owner") - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err -} - -// GetOwner is a free data retrieval call binding the contract method 0x0ac298dc. -// -// Solidity: function get_owner() view returns(address) -func (_Api *ApiSession) GetOwner() (common.Address, error) { - return _Api.Contract.GetOwner(&_Api.CallOpts) -} - -// GetOwner is a free data retrieval call binding the contract method 0x0ac298dc. -// -// Solidity: function get_owner() view returns(address) -func (_Api *ApiCallerSession) GetOwner() (common.Address, error) { - return _Api.Contract.GetOwner(&_Api.CallOpts) -} - -// GetRelayByUri is a free data retrieval call binding the contract method 0xf5f33c7b. -// -// Solidity: function get_relay_by_uri(string relay_uri) view returns((string,string,bool,string)) -func (_Api *ApiCaller) GetRelayByUri(opts *bind.CallOpts, relay_uri string) (Struct0, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "get_relay_by_uri", relay_uri) - if err != nil { - return *new(Struct0), err - } - - out0 := *abi.ConvertType(out[0], new(Struct0)).(*Struct0) - - return out0, err -} - -// GetRelayByUri is a free data retrieval call binding the contract method 0xf5f33c7b. -// -// Solidity: function get_relay_by_uri(string relay_uri) view returns((string,string,bool,string)) -func (_Api *ApiSession) GetRelayByUri(relay_uri string) (Struct0, error) { - return _Api.Contract.GetRelayByUri(&_Api.CallOpts, relay_uri) -} - -// GetRelayByUri is a free data retrieval call binding the contract method 0xf5f33c7b. -// -// Solidity: function get_relay_by_uri(string relay_uri) view returns((string,string,bool,string)) -func (_Api *ApiCallerSession) GetRelayByUri(relay_uri string) (Struct0, error) { - return _Api.Contract.GetRelayByUri(&_Api.CallOpts, relay_uri) -} - -// GetRelays is a free data retrieval call binding the contract method 0x04e469ea. -// -// Solidity: function get_relays() view returns((string,string,bool,string)[]) -func (_Api *ApiCaller) GetRelays(opts *bind.CallOpts) ([]Struct0, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "get_relays") - if err != nil { - return *new([]Struct0), err - } - - out0 := *abi.ConvertType(out[0], new([]Struct0)).(*[]Struct0) - - return out0, err -} - -// GetRelays is a free data retrieval call binding the contract method 0x04e469ea. -// -// Solidity: function get_relays() view returns((string,string,bool,string)[]) -func (_Api *ApiSession) GetRelays() ([]Struct0, error) { - return _Api.Contract.GetRelays(&_Api.CallOpts) -} - -// GetRelays is a free data retrieval call binding the contract method 0x04e469ea. -// -// Solidity: function get_relays() view returns((string,string,bool,string)[]) -func (_Api *ApiCallerSession) GetRelays() ([]Struct0, error) { - return _Api.Contract.GetRelays(&_Api.CallOpts) -} - -// GetRelaysAmount is a free data retrieval call binding the contract method 0x312c3165. -// -// Solidity: function get_relays_amount() view returns(uint256) -func (_Api *ApiCaller) GetRelaysAmount(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "get_relays_amount") - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err -} - -// GetRelaysAmount is a free data retrieval call binding the contract method 0x312c3165. -// -// Solidity: function get_relays_amount() view returns(uint256) -func (_Api *ApiSession) GetRelaysAmount() (*big.Int, error) { - return _Api.Contract.GetRelaysAmount(&_Api.CallOpts) -} - -// GetRelaysAmount is a free data retrieval call binding the contract method 0x312c3165. -// -// Solidity: function get_relays_amount() view returns(uint256) -func (_Api *ApiCallerSession) GetRelaysAmount() (*big.Int, error) { - return _Api.Contract.GetRelaysAmount(&_Api.CallOpts) -} - -// AddRelay is a paid mutator transaction binding the contract method 0x2e21ecef. -// -// Solidity: function add_relay(string uri, string operator, bool is_mandatory, string description) returns() -func (_Api *ApiTransactor) AddRelay(opts *bind.TransactOpts, uri string, operator string, is_mandatory bool, description string) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "add_relay", uri, operator, is_mandatory, description) -} - -// AddRelay is a paid mutator transaction binding the contract method 0x2e21ecef. -// -// Solidity: function add_relay(string uri, string operator, bool is_mandatory, string description) returns() -func (_Api *ApiSession) AddRelay(uri string, operator string, is_mandatory bool, description string) (*types.Transaction, error) { - return _Api.Contract.AddRelay(&_Api.TransactOpts, uri, operator, is_mandatory, description) -} - -// AddRelay is a paid mutator transaction binding the contract method 0x2e21ecef. -// -// Solidity: function add_relay(string uri, string operator, bool is_mandatory, string description) returns() -func (_Api *ApiTransactorSession) AddRelay(uri string, operator string, is_mandatory bool, description string) (*types.Transaction, error) { - return _Api.Contract.AddRelay(&_Api.TransactOpts, uri, operator, is_mandatory, description) -} - -// ChangeOwner is a paid mutator transaction binding the contract method 0x253c8bd4. -// -// Solidity: function change_owner(address owner) returns() -func (_Api *ApiTransactor) ChangeOwner(opts *bind.TransactOpts, owner common.Address) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "change_owner", owner) -} - -// ChangeOwner is a paid mutator transaction binding the contract method 0x253c8bd4. -// -// Solidity: function change_owner(address owner) returns() -func (_Api *ApiSession) ChangeOwner(owner common.Address) (*types.Transaction, error) { - return _Api.Contract.ChangeOwner(&_Api.TransactOpts, owner) -} - -// ChangeOwner is a paid mutator transaction binding the contract method 0x253c8bd4. -// -// Solidity: function change_owner(address owner) returns() -func (_Api *ApiTransactorSession) ChangeOwner(owner common.Address) (*types.Transaction, error) { - return _Api.Contract.ChangeOwner(&_Api.TransactOpts, owner) -} - -// DismissManager is a paid mutator transaction binding the contract method 0x417a02b4. -// -// Solidity: function dismiss_manager() returns() -func (_Api *ApiTransactor) DismissManager(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "dismiss_manager") -} - -// DismissManager is a paid mutator transaction binding the contract method 0x417a02b4. -// -// Solidity: function dismiss_manager() returns() -func (_Api *ApiSession) DismissManager() (*types.Transaction, error) { - return _Api.Contract.DismissManager(&_Api.TransactOpts) -} - -// DismissManager is a paid mutator transaction binding the contract method 0x417a02b4. -// -// Solidity: function dismiss_manager() returns() -func (_Api *ApiTransactorSession) DismissManager() (*types.Transaction, error) { - return _Api.Contract.DismissManager(&_Api.TransactOpts) -} - -// RecoverErc20 is a paid mutator transaction binding the contract method 0xedd885b4. -// -// Solidity: function recover_erc20(address token, uint256 amount, address recipient) returns() -func (_Api *ApiTransactor) RecoverErc20(opts *bind.TransactOpts, token common.Address, amount *big.Int, recipient common.Address) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "recover_erc20", token, amount, recipient) -} - -// RecoverErc20 is a paid mutator transaction binding the contract method 0xedd885b4. -// -// Solidity: function recover_erc20(address token, uint256 amount, address recipient) returns() -func (_Api *ApiSession) RecoverErc20(token common.Address, amount *big.Int, recipient common.Address) (*types.Transaction, error) { - return _Api.Contract.RecoverErc20(&_Api.TransactOpts, token, amount, recipient) -} - -// RecoverErc20 is a paid mutator transaction binding the contract method 0xedd885b4. -// -// Solidity: function recover_erc20(address token, uint256 amount, address recipient) returns() -func (_Api *ApiTransactorSession) RecoverErc20(token common.Address, amount *big.Int, recipient common.Address) (*types.Transaction, error) { - return _Api.Contract.RecoverErc20(&_Api.TransactOpts, token, amount, recipient) -} - -// RemoveRelay is a paid mutator transaction binding the contract method 0xf5a70a80. -// -// Solidity: function remove_relay(string uri) returns() -func (_Api *ApiTransactor) RemoveRelay(opts *bind.TransactOpts, uri string) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "remove_relay", uri) -} - -// RemoveRelay is a paid mutator transaction binding the contract method 0xf5a70a80. -// -// Solidity: function remove_relay(string uri) returns() -func (_Api *ApiSession) RemoveRelay(uri string) (*types.Transaction, error) { - return _Api.Contract.RemoveRelay(&_Api.TransactOpts, uri) -} - -// RemoveRelay is a paid mutator transaction binding the contract method 0xf5a70a80. -// -// Solidity: function remove_relay(string uri) returns() -func (_Api *ApiTransactorSession) RemoveRelay(uri string) (*types.Transaction, error) { - return _Api.Contract.RemoveRelay(&_Api.TransactOpts, uri) -} - -// SetManager is a paid mutator transaction binding the contract method 0x9aece83e. -// -// Solidity: function set_manager(address manager) returns() -func (_Api *ApiTransactor) SetManager(opts *bind.TransactOpts, manager common.Address) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "set_manager", manager) -} - -// SetManager is a paid mutator transaction binding the contract method 0x9aece83e. -// -// Solidity: function set_manager(address manager) returns() -func (_Api *ApiSession) SetManager(manager common.Address) (*types.Transaction, error) { - return _Api.Contract.SetManager(&_Api.TransactOpts, manager) -} - -// SetManager is a paid mutator transaction binding the contract method 0x9aece83e. -// -// Solidity: function set_manager(address manager) returns() -func (_Api *ApiTransactorSession) SetManager(manager common.Address) (*types.Transaction, error) { - return _Api.Contract.SetManager(&_Api.TransactOpts, manager) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() returns() -func (_Api *ApiTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { - return _Api.contract.RawTransact(opts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() returns() -func (_Api *ApiSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _Api.Contract.Fallback(&_Api.TransactOpts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() returns() -func (_Api *ApiTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _Api.Contract.Fallback(&_Api.TransactOpts, calldata) -} - -// ApiAllowedListUpdatedIterator is returned from FilterAllowedListUpdated and is used to iterate over the raw logs and unpacked data for AllowedListUpdated events raised by the Api contract. -type ApiAllowedListUpdatedIterator struct { - Event *ApiAllowedListUpdated // 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 *ApiAllowedListUpdatedIterator) 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(ApiAllowedListUpdated) - 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(ApiAllowedListUpdated) - 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 *ApiAllowedListUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiAllowedListUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiAllowedListUpdated represents a AllowedListUpdated event raised by the Api contract. -type ApiAllowedListUpdated struct { - AllowedListVersion *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAllowedListUpdated is a free log retrieval operation binding the contract event 0x49f5627aa055ec3fcd474f99c8b7799b798c04af7b9f215305512c867e5a1839. -// -// Solidity: event AllowedListUpdated(uint256 indexed allowed_list_version) -func (_Api *ApiFilterer) FilterAllowedListUpdated(opts *bind.FilterOpts, allowed_list_version []*big.Int) (*ApiAllowedListUpdatedIterator, error) { - var allowed_list_versionRule []interface{} - for _, allowed_list_versionItem := range allowed_list_version { - allowed_list_versionRule = append(allowed_list_versionRule, allowed_list_versionItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "AllowedListUpdated", allowed_list_versionRule) - if err != nil { - return nil, err - } - return &ApiAllowedListUpdatedIterator{contract: _Api.contract, event: "AllowedListUpdated", logs: logs, sub: sub}, nil -} - -// WatchAllowedListUpdated is a free log subscription operation binding the contract event 0x49f5627aa055ec3fcd474f99c8b7799b798c04af7b9f215305512c867e5a1839. -// -// Solidity: event AllowedListUpdated(uint256 indexed allowed_list_version) -func (_Api *ApiFilterer) WatchAllowedListUpdated(opts *bind.WatchOpts, sink chan<- *ApiAllowedListUpdated, allowed_list_version []*big.Int) (event.Subscription, error) { - var allowed_list_versionRule []interface{} - for _, allowed_list_versionItem := range allowed_list_version { - allowed_list_versionRule = append(allowed_list_versionRule, allowed_list_versionItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "AllowedListUpdated", allowed_list_versionRule) - 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(ApiAllowedListUpdated) - if err := _Api.contract.UnpackLog(event, "AllowedListUpdated", 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 -} - -// ParseAllowedListUpdated is a log parse operation binding the contract event 0x49f5627aa055ec3fcd474f99c8b7799b798c04af7b9f215305512c867e5a1839. -// -// Solidity: event AllowedListUpdated(uint256 indexed allowed_list_version) -func (_Api *ApiFilterer) ParseAllowedListUpdated(log types.Log) (*ApiAllowedListUpdated, error) { - event := new(ApiAllowedListUpdated) - if err := _Api.contract.UnpackLog(event, "AllowedListUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiERC20RecoveredIterator is returned from FilterERC20Recovered and is used to iterate over the raw logs and unpacked data for ERC20Recovered events raised by the Api contract. -type ApiERC20RecoveredIterator struct { - Event *ApiERC20Recovered // 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 *ApiERC20RecoveredIterator) 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(ApiERC20Recovered) - 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(ApiERC20Recovered) - 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 *ApiERC20RecoveredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiERC20RecoveredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiERC20Recovered represents a ERC20Recovered event raised by the Api contract. -type ApiERC20Recovered struct { - Token common.Address - Amount *big.Int - Recipient common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC20Recovered is a free log retrieval operation binding the contract event 0x8619312ed4eff1cf9f0116e6db2f49d9570a86f0350d1c5ad1bd0f7b0cf9e132. -// -// Solidity: event ERC20Recovered(address indexed token, uint256 amount, address indexed recipient) -func (_Api *ApiFilterer) FilterERC20Recovered(opts *bind.FilterOpts, token []common.Address, recipient []common.Address) (*ApiERC20RecoveredIterator, error) { - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - var recipientRule []interface{} - for _, recipientItem := range recipient { - recipientRule = append(recipientRule, recipientItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "ERC20Recovered", tokenRule, recipientRule) - if err != nil { - return nil, err - } - return &ApiERC20RecoveredIterator{contract: _Api.contract, event: "ERC20Recovered", logs: logs, sub: sub}, nil -} - -// WatchERC20Recovered is a free log subscription operation binding the contract event 0x8619312ed4eff1cf9f0116e6db2f49d9570a86f0350d1c5ad1bd0f7b0cf9e132. -// -// Solidity: event ERC20Recovered(address indexed token, uint256 amount, address indexed recipient) -func (_Api *ApiFilterer) WatchERC20Recovered(opts *bind.WatchOpts, sink chan<- *ApiERC20Recovered, token []common.Address, recipient []common.Address) (event.Subscription, error) { - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - - var recipientRule []interface{} - for _, recipientItem := range recipient { - recipientRule = append(recipientRule, recipientItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "ERC20Recovered", tokenRule, 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(ApiERC20Recovered) - if err := _Api.contract.UnpackLog(event, "ERC20Recovered", 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 -} - -// ParseERC20Recovered is a log parse operation binding the contract event 0x8619312ed4eff1cf9f0116e6db2f49d9570a86f0350d1c5ad1bd0f7b0cf9e132. -// -// Solidity: event ERC20Recovered(address indexed token, uint256 amount, address indexed recipient) -func (_Api *ApiFilterer) ParseERC20Recovered(log types.Log) (*ApiERC20Recovered, error) { - event := new(ApiERC20Recovered) - if err := _Api.contract.UnpackLog(event, "ERC20Recovered", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiManagerChangedIterator is returned from FilterManagerChanged and is used to iterate over the raw logs and unpacked data for ManagerChanged events raised by the Api contract. -type ApiManagerChangedIterator struct { - Event *ApiManagerChanged // 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 *ApiManagerChangedIterator) 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(ApiManagerChanged) - 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(ApiManagerChanged) - 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 *ApiManagerChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiManagerChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiManagerChanged represents a ManagerChanged event raised by the Api contract. -type ApiManagerChanged struct { - NewManager common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterManagerChanged is a free log retrieval operation binding the contract event 0x198db6e425fb8aafd1823c6ca50be2d51e5764571a5ae0f0f21c6812e45def0b. -// -// Solidity: event ManagerChanged(address indexed new_manager) -func (_Api *ApiFilterer) FilterManagerChanged(opts *bind.FilterOpts, new_manager []common.Address) (*ApiManagerChangedIterator, error) { - var new_managerRule []interface{} - for _, new_managerItem := range new_manager { - new_managerRule = append(new_managerRule, new_managerItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "ManagerChanged", new_managerRule) - if err != nil { - return nil, err - } - return &ApiManagerChangedIterator{contract: _Api.contract, event: "ManagerChanged", logs: logs, sub: sub}, nil -} - -// WatchManagerChanged is a free log subscription operation binding the contract event 0x198db6e425fb8aafd1823c6ca50be2d51e5764571a5ae0f0f21c6812e45def0b. -// -// Solidity: event ManagerChanged(address indexed new_manager) -func (_Api *ApiFilterer) WatchManagerChanged(opts *bind.WatchOpts, sink chan<- *ApiManagerChanged, new_manager []common.Address) (event.Subscription, error) { - var new_managerRule []interface{} - for _, new_managerItem := range new_manager { - new_managerRule = append(new_managerRule, new_managerItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "ManagerChanged", new_managerRule) - 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(ApiManagerChanged) - if err := _Api.contract.UnpackLog(event, "ManagerChanged", 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 -} - -// ParseManagerChanged is a log parse operation binding the contract event 0x198db6e425fb8aafd1823c6ca50be2d51e5764571a5ae0f0f21c6812e45def0b. -// -// Solidity: event ManagerChanged(address indexed new_manager) -func (_Api *ApiFilterer) ParseManagerChanged(log types.Log) (*ApiManagerChanged, error) { - event := new(ApiManagerChanged) - if err := _Api.contract.UnpackLog(event, "ManagerChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiOwnerChangedIterator is returned from FilterOwnerChanged and is used to iterate over the raw logs and unpacked data for OwnerChanged events raised by the Api contract. -type ApiOwnerChangedIterator struct { - Event *ApiOwnerChanged // 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 *ApiOwnerChangedIterator) 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(ApiOwnerChanged) - 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(ApiOwnerChanged) - 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 *ApiOwnerChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiOwnerChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiOwnerChanged represents a OwnerChanged event raised by the Api contract. -type ApiOwnerChanged struct { - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnerChanged is a free log retrieval operation binding the contract event 0xa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf36. -// -// Solidity: event OwnerChanged(address indexed new_owner) -func (_Api *ApiFilterer) FilterOwnerChanged(opts *bind.FilterOpts, new_owner []common.Address) (*ApiOwnerChangedIterator, error) { - var new_ownerRule []interface{} - for _, new_ownerItem := range new_owner { - new_ownerRule = append(new_ownerRule, new_ownerItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "OwnerChanged", new_ownerRule) - if err != nil { - return nil, err - } - return &ApiOwnerChangedIterator{contract: _Api.contract, event: "OwnerChanged", logs: logs, sub: sub}, nil -} - -// WatchOwnerChanged is a free log subscription operation binding the contract event 0xa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf36. -// -// Solidity: event OwnerChanged(address indexed new_owner) -func (_Api *ApiFilterer) WatchOwnerChanged(opts *bind.WatchOpts, sink chan<- *ApiOwnerChanged, new_owner []common.Address) (event.Subscription, error) { - var new_ownerRule []interface{} - for _, new_ownerItem := range new_owner { - new_ownerRule = append(new_ownerRule, new_ownerItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "OwnerChanged", new_ownerRule) - 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(ApiOwnerChanged) - if err := _Api.contract.UnpackLog(event, "OwnerChanged", 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 -} - -// ParseOwnerChanged is a log parse operation binding the contract event 0xa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf36. -// -// Solidity: event OwnerChanged(address indexed new_owner) -func (_Api *ApiFilterer) ParseOwnerChanged(log types.Log) (*ApiOwnerChanged, error) { - event := new(ApiOwnerChanged) - if err := _Api.contract.UnpackLog(event, "OwnerChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiRelayAddedIterator is returned from FilterRelayAdded and is used to iterate over the raw logs and unpacked data for RelayAdded events raised by the Api contract. -type ApiRelayAddedIterator struct { - Event *ApiRelayAdded // 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 *ApiRelayAddedIterator) 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(ApiRelayAdded) - 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(ApiRelayAdded) - 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 *ApiRelayAddedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiRelayAddedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiRelayAdded represents a RelayAdded event raised by the Api contract. -type ApiRelayAdded struct { - UriHash common.Hash - Relay Struct0 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRelayAdded is a free log retrieval operation binding the contract event 0xeee5faa84d45af657ab405cdbf2c6a8a6d466e83fa694a358fee5ff84431d0bf. -// -// Solidity: event RelayAdded(string indexed uri_hash, (string,string,bool,string) relay) -func (_Api *ApiFilterer) FilterRelayAdded(opts *bind.FilterOpts, uri_hash []string) (*ApiRelayAddedIterator, error) { - var uri_hashRule []interface{} - for _, uri_hashItem := range uri_hash { - uri_hashRule = append(uri_hashRule, uri_hashItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "RelayAdded", uri_hashRule) - if err != nil { - return nil, err - } - return &ApiRelayAddedIterator{contract: _Api.contract, event: "RelayAdded", logs: logs, sub: sub}, nil -} - -// WatchRelayAdded is a free log subscription operation binding the contract event 0xeee5faa84d45af657ab405cdbf2c6a8a6d466e83fa694a358fee5ff84431d0bf. -// -// Solidity: event RelayAdded(string indexed uri_hash, (string,string,bool,string) relay) -func (_Api *ApiFilterer) WatchRelayAdded(opts *bind.WatchOpts, sink chan<- *ApiRelayAdded, uri_hash []string) (event.Subscription, error) { - var uri_hashRule []interface{} - for _, uri_hashItem := range uri_hash { - uri_hashRule = append(uri_hashRule, uri_hashItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "RelayAdded", uri_hashRule) - 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(ApiRelayAdded) - if err := _Api.contract.UnpackLog(event, "RelayAdded", 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 -} - -// ParseRelayAdded is a log parse operation binding the contract event 0xeee5faa84d45af657ab405cdbf2c6a8a6d466e83fa694a358fee5ff84431d0bf. -// -// Solidity: event RelayAdded(string indexed uri_hash, (string,string,bool,string) relay) -func (_Api *ApiFilterer) ParseRelayAdded(log types.Log) (*ApiRelayAdded, error) { - event := new(ApiRelayAdded) - if err := _Api.contract.UnpackLog(event, "RelayAdded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiRelayRemovedIterator is returned from FilterRelayRemoved and is used to iterate over the raw logs and unpacked data for RelayRemoved events raised by the Api contract. -type ApiRelayRemovedIterator struct { - Event *ApiRelayRemoved // 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 *ApiRelayRemovedIterator) 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(ApiRelayRemoved) - 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(ApiRelayRemoved) - 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 *ApiRelayRemovedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiRelayRemovedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiRelayRemoved represents a RelayRemoved event raised by the Api contract. -type ApiRelayRemoved struct { - UriHash common.Hash - Uri string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRelayRemoved is a free log retrieval operation binding the contract event 0xef756634af7ee7210f786ec0f91930afa63fda84d9ff6493ae681c332055dadb. -// -// Solidity: event RelayRemoved(string indexed uri_hash, string uri) -func (_Api *ApiFilterer) FilterRelayRemoved(opts *bind.FilterOpts, uri_hash []string) (*ApiRelayRemovedIterator, error) { - var uri_hashRule []interface{} - for _, uri_hashItem := range uri_hash { - uri_hashRule = append(uri_hashRule, uri_hashItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "RelayRemoved", uri_hashRule) - if err != nil { - return nil, err - } - return &ApiRelayRemovedIterator{contract: _Api.contract, event: "RelayRemoved", logs: logs, sub: sub}, nil -} - -// WatchRelayRemoved is a free log subscription operation binding the contract event 0xef756634af7ee7210f786ec0f91930afa63fda84d9ff6493ae681c332055dadb. -// -// Solidity: event RelayRemoved(string indexed uri_hash, string uri) -func (_Api *ApiFilterer) WatchRelayRemoved(opts *bind.WatchOpts, sink chan<- *ApiRelayRemoved, uri_hash []string) (event.Subscription, error) { - var uri_hashRule []interface{} - for _, uri_hashItem := range uri_hash { - uri_hashRule = append(uri_hashRule, uri_hashItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "RelayRemoved", uri_hashRule) - 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(ApiRelayRemoved) - if err := _Api.contract.UnpackLog(event, "RelayRemoved", 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 -} - -// ParseRelayRemoved is a log parse operation binding the contract event 0xef756634af7ee7210f786ec0f91930afa63fda84d9ff6493ae681c332055dadb. -// -// Solidity: event RelayRemoved(string indexed uri_hash, string uri) -func (_Api *ApiFilterer) ParseRelayRemoved(log types.Log) (*ApiRelayRemoved, error) { - event := new(ApiRelayRemoved) - if err := _Api.contract.UnpackLog(event, "RelayRemoved", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/internal/lido/contracts/mevboostrelaylist/get_relays.go b/internal/lido/contracts/mevboostrelaylist/get_relays.go index 7a3c8d1e3..03405c181 100644 --- a/internal/lido/contracts/mevboostrelaylist/get_relays.go +++ b/internal/lido/contracts/mevboostrelaylist/get_relays.go @@ -16,14 +16,11 @@ limitations under the License. package mevboostrelaylist import ( - "encoding/hex" "fmt" "sort" - "strings" - "github.com/NethermindEth/sedge/configs" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/rpc" + "github.com/NethermindEth/sedge/internal/lido/contracts" + "github.com/ethereum/go-ethereum/common" ) // Relay : Struct represent data of MEV-Boost Relay @@ -34,37 +31,7 @@ type Relay struct { Description string `yaml:"Description"` } -// Define deployed contract addresses for Mainnet and Holesky -var deployedContractAddresses = map[string]string{ - configs.NetworkMainnet: "0xF95f069F9AD107938F6ba802a3da87892298610E", - configs.NetworkHolesky: "0x2d86C5855581194a386941806E38cA119E50aEA3", -} - -/* -connectToRPC : -This function is responsible for: -attempting to connect to the first available RPC endpoint from the provided list. -params :- -RPCs ([]string): A list of RPC endpoint URLs. -returns :- -a. *rpc.Client -The connected RPC client -b. error -Error if no connections could be established -*/ -func connectToRPC(RPCs []string) (*rpc.Client, error) { - var client *rpc.Client - var err error - - for _, url := range RPCs { - client, err = rpc.DialHTTP(url) - if err == nil { - return client, nil - } - } - - return nil, fmt.Errorf("failed to connect to any RPC URL") -} +var contractName = contracts.MEVBoostRelayAllowedList /* Relays : @@ -80,56 +47,23 @@ Error if any */ func Relays(network string) ([]Relay, error) { var relays []Relay - rpcs, err := configs.GetPublicRPCs(network) - if err != nil { - return relays, fmt.Errorf("failed to get public RPC: %w", err) - } - - // Connect to the RPC endpoint - client, err := connectToRPC(rpcs) - if err != nil { - return relays, fmt.Errorf("failed to connect to RPC: %w", err) - } - defer client.Close() - - // Parse the ABI of the contract - parsedABI, err := abi.JSON(strings.NewReader(ApiABI)) + contract, err := mevBoostRelayListContract(network) if err != nil { - return relays, fmt.Errorf("failed to parse ABI: %w", err) + return relays, fmt.Errorf("failed to call mevBoostRelayListContract: %w", err) } - - // Pack the data for the "get_relays" method - data, err := parsedABI.Pack("get_relays") - if err != nil { - return relays, fmt.Errorf("failed to pack ABI data: %w", err) - } - - // Prepare the RPC call arguments - type CallArgs struct { - To string `json:"to"` - Data string `json:"data"` - } - args := CallArgs{ - To: deployedContractAddresses[network], - Data: "0x" + hex.EncodeToString(data), - } - - // Execute the RPC call - var result string - if err := client.Call(&result, "eth_call", args, "latest"); err != nil { - return relays, fmt.Errorf("failed to make RPC call: %w", err) - } - - // Decode the result from the RPC call - output, err := hex.DecodeString(result[2:]) // Remove the '0x' prefix + result, err := contract.GetRelays(nil) if err != nil { - return relays, fmt.Errorf("failed to decode result hex: %w", err) + return relays, fmt.Errorf("failed to call GetRelays: %w", err) } - // Unpack the result into the relays slice - err = parsedABI.UnpackIntoInterface(&relays, "get_relays", output) - if err != nil { - return relays, fmt.Errorf("failed to unpack ABI output: %w", err) + for _, r := range result { + relay := Relay{ + Uri: r.Uri, + Operator: r.Operator, + IsMandatory: r.IsMandatory, + Description: r.Description, + } + relays = append(relays, relay) } return relays, nil @@ -161,7 +95,7 @@ func RelaysURI(network string) ([]string, error) { func LidoSupportedNetworksMevBoost() []string { networks := []string{} - for network := range deployedContractAddresses { + for network := range contracts.DeployedAddresses(contractName) { networks = append(networks, network) } sort.Strings(networks) @@ -181,3 +115,18 @@ func NetworkSupportedByLidoMevBoost(network string) ([]string, bool) { } return nil, supported } + +func mevBoostRelayListContract(network string) (*Mevboostrelaylist, error) { + client, err := contracts.ConnectClient(network) + if err != nil { + return nil, fmt.Errorf("failed to connect to client: %w", err) + } + defer client.Close() + + address := common.HexToAddress(contracts.DeployedAddresses(contractName)[network]) + contract, err := NewMevboostrelaylist(address, client) + if err != nil { + return nil, fmt.Errorf("failed to create Mevboostrelaylist instance: %w", err) + } + return contract, nil +} diff --git a/internal/lido/contracts/staking_router/StakingRouter.abi b/internal/lido/contracts/staking_router/StakingRouter.abi deleted file mode 100644 index c72053cdf..000000000 --- a/internal/lido/contracts/staking_router/StakingRouter.abi +++ /dev/null @@ -1 +0,0 @@ -[{"inputs":[{"internalType":"address","name":"_depositContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AppAuthLidoFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"firstArrayLength","type":"uint256"},{"internalType":"uint256","name":"secondArrayLength","type":"uint256"}],"name":"ArraysLengthMismatch","type":"error"},{"inputs":[],"name":"DepositContractZeroAddress","type":"error"},{"inputs":[],"name":"DirectETHTransfer","type":"error"},{"inputs":[],"name":"EmptyWithdrawalsCredentials","type":"error"},{"inputs":[],"name":"ExitedValidatorsCountCannotDecrease","type":"error"},{"inputs":[],"name":"InvalidContractVersionIncrement","type":"error"},{"inputs":[{"internalType":"uint256","name":"etherValue","type":"uint256"},{"internalType":"uint256","name":"depositsCount","type":"uint256"}],"name":"InvalidDepositsValue","type":"error"},{"inputs":[{"internalType":"uint256","name":"actual","type":"uint256"},{"internalType":"uint256","name":"expected","type":"uint256"}],"name":"InvalidPublicKeysBatchLength","type":"error"},{"inputs":[{"internalType":"uint256","name":"code","type":"uint256"}],"name":"InvalidReportData","type":"error"},{"inputs":[{"internalType":"uint256","name":"actual","type":"uint256"},{"internalType":"uint256","name":"expected","type":"uint256"}],"name":"InvalidSignaturesBatchLength","type":"error"},{"inputs":[],"name":"NonZeroContractVersionOnInit","type":"error"},{"inputs":[{"internalType":"uint256","name":"reportedExitedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"depositedValidatorsCount","type":"uint256"}],"name":"ReportedExitedValidatorsExceedDeposited","type":"error"},{"inputs":[],"name":"StakingModuleAddressExists","type":"error"},{"inputs":[],"name":"StakingModuleNotActive","type":"error"},{"inputs":[],"name":"StakingModuleNotPaused","type":"error"},{"inputs":[],"name":"StakingModuleStatusTheSame","type":"error"},{"inputs":[],"name":"StakingModuleUnregistered","type":"error"},{"inputs":[],"name":"StakingModuleWrongName","type":"error"},{"inputs":[],"name":"StakingModulesLimitExceeded","type":"error"},{"inputs":[{"internalType":"uint256","name":"expected","type":"uint256"},{"internalType":"uint256","name":"received","type":"uint256"}],"name":"UnexpectedContractVersion","type":"error"},{"inputs":[{"internalType":"uint256","name":"currentModuleExitedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"currentNodeOpExitedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"currentNodeOpStuckValidatorsCount","type":"uint256"}],"name":"UnexpectedCurrentValidatorsCount","type":"error"},{"inputs":[],"name":"UnrecoverableModuleError","type":"error"},{"inputs":[{"internalType":"string","name":"field","type":"string"}],"name":"ValueOver100Percent","type":"error"},{"inputs":[{"internalType":"string","name":"field","type":"string"}],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"version","type":"uint256"}],"name":"ContractVersionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"lowLevelRevertData","type":"bytes"}],"name":"ExitedAndStuckValidatorsCountsUpdateFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"lowLevelRevertData","type":"bytes"}],"name":"RewardsMintedReportFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"address","name":"stakingModule","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"address","name":"createdBy","type":"address"}],"name":"StakingModuleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unreportedExitedValidatorsCount","type":"uint256"}],"name":"StakingModuleExitedValidatorsIncompleteReporting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakingModuleFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"setBy","type":"address"}],"name":"StakingModuleFeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"enum StakingRouter.StakingModuleStatus","name":"status","type":"uint8"},{"indexed":false,"internalType":"address","name":"setBy","type":"address"}],"name":"StakingModuleStatusSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"targetShare","type":"uint256"},{"indexed":false,"internalType":"address","name":"setBy","type":"address"}],"name":"StakingModuleTargetShareSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakingRouterETHDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"withdrawalCredentials","type":"bytes32"},{"indexed":false,"internalType":"address","name":"setBy","type":"address"}],"name":"WithdrawalCredentialsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"lowLevelRevertData","type":"bytes"}],"name":"WithdrawalsCredentialsChangeFailed","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSIT_CONTRACT","outputs":[{"internalType":"contract IDepositContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_PRECISION_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_WITHDRAWAL_CREDENTIALS_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_STAKING_MODULES_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_STAKING_MODULE_NAME_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REPORT_EXITED_VALIDATORS_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REPORT_REWARDS_MINTED_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MODULE_MANAGE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MODULE_PAUSE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MODULE_RESUME_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_BASIS_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNSAFE_SET_EXITED_VALIDATORS_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"address","name":"_stakingModuleAddress","type":"address"},{"internalType":"uint256","name":"_targetShare","type":"uint256"},{"internalType":"uint256","name":"_stakingModuleFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"addStakingModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_depositsCount","type":"uint256"},{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"bytes","name":"_depositCalldata","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getAllNodeOperatorDigests","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"},{"components":[{"internalType":"bool","name":"isTargetLimitActive","type":"bool"},{"internalType":"uint256","name":"targetValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"refundedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckPenaltyEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"internalType":"struct StakingRouter.NodeOperatorSummary","name":"summary","type":"tuple"}],"internalType":"struct StakingRouter.NodeOperatorDigest[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllStakingModuleDigests","outputs":[{"components":[{"internalType":"uint256","name":"nodeOperatorsCount","type":"uint256"},{"internalType":"uint256","name":"activeNodeOperatorsCount","type":"uint256"},{"components":[{"internalType":"uint24","name":"id","type":"uint24"},{"internalType":"address","name":"stakingModuleAddress","type":"address"},{"internalType":"uint16","name":"stakingModuleFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"targetShare","type":"uint16"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint64","name":"lastDepositAt","type":"uint64"},{"internalType":"uint256","name":"lastDepositBlock","type":"uint256"},{"internalType":"uint256","name":"exitedValidatorsCount","type":"uint256"}],"internalType":"struct StakingRouter.StakingModule","name":"state","type":"tuple"},{"components":[{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"internalType":"struct StakingRouter.StakingModuleSummary","name":"summary","type":"tuple"}],"internalType":"struct StakingRouter.StakingModuleDigest[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_depositsCount","type":"uint256"}],"name":"getDepositsAllocation","outputs":[{"internalType":"uint256","name":"allocated","type":"uint256"},{"internalType":"uint256[]","name":"allocations","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLido","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256[]","name":"_nodeOperatorIds","type":"uint256[]"}],"name":"getNodeOperatorDigests","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"},{"components":[{"internalType":"bool","name":"isTargetLimitActive","type":"bool"},{"internalType":"uint256","name":"targetValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"refundedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckPenaltyEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"internalType":"struct StakingRouter.NodeOperatorSummary","name":"summary","type":"tuple"}],"internalType":"struct StakingRouter.NodeOperatorDigest[]","name":"digests","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"getNodeOperatorDigests","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"},{"components":[{"internalType":"bool","name":"isTargetLimitActive","type":"bool"},{"internalType":"uint256","name":"targetValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"refundedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckPenaltyEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"internalType":"struct StakingRouter.NodeOperatorSummary","name":"summary","type":"tuple"}],"internalType":"struct StakingRouter.NodeOperatorDigest[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"_nodeOperatorId","type":"uint256"}],"name":"getNodeOperatorSummary","outputs":[{"components":[{"internalType":"bool","name":"isTargetLimitActive","type":"bool"},{"internalType":"uint256","name":"targetValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"refundedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckPenaltyEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"internalType":"struct StakingRouter.NodeOperatorSummary","name":"summary","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingFeeAggregateDistribution","outputs":[{"internalType":"uint96","name":"modulesFee","type":"uint96"},{"internalType":"uint96","name":"treasuryFee","type":"uint96"},{"internalType":"uint256","name":"basePrecision","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingFeeAggregateDistributionE4Precision","outputs":[{"internalType":"uint16","name":"modulesFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModule","outputs":[{"components":[{"internalType":"uint24","name":"id","type":"uint24"},{"internalType":"address","name":"stakingModuleAddress","type":"address"},{"internalType":"uint16","name":"stakingModuleFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"targetShare","type":"uint16"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint64","name":"lastDepositAt","type":"uint64"},{"internalType":"uint256","name":"lastDepositBlock","type":"uint256"},{"internalType":"uint256","name":"exitedValidatorsCount","type":"uint256"}],"internalType":"struct StakingRouter.StakingModule","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleActiveValidatorsCount","outputs":[{"internalType":"uint256","name":"activeValidatorsCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_stakingModuleIds","type":"uint256[]"}],"name":"getStakingModuleDigests","outputs":[{"components":[{"internalType":"uint256","name":"nodeOperatorsCount","type":"uint256"},{"internalType":"uint256","name":"activeNodeOperatorsCount","type":"uint256"},{"components":[{"internalType":"uint24","name":"id","type":"uint24"},{"internalType":"address","name":"stakingModuleAddress","type":"address"},{"internalType":"uint16","name":"stakingModuleFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"targetShare","type":"uint16"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint64","name":"lastDepositAt","type":"uint64"},{"internalType":"uint256","name":"lastDepositBlock","type":"uint256"},{"internalType":"uint256","name":"exitedValidatorsCount","type":"uint256"}],"internalType":"struct StakingRouter.StakingModule","name":"state","type":"tuple"},{"components":[{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"internalType":"struct StakingRouter.StakingModuleSummary","name":"summary","type":"tuple"}],"internalType":"struct StakingRouter.StakingModuleDigest[]","name":"digests","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingModuleIds","outputs":[{"internalType":"uint256[]","name":"stakingModuleIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleIsDepositsPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleIsStopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleLastDepositBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"_maxDepositsValue","type":"uint256"}],"name":"getStakingModuleMaxDepositsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleStatus","outputs":[{"internalType":"enum StakingRouter.StakingModuleStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleSummary","outputs":[{"components":[{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"internalType":"struct StakingRouter.StakingModuleSummary","name":"summary","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingModules","outputs":[{"components":[{"internalType":"uint24","name":"id","type":"uint24"},{"internalType":"address","name":"stakingModuleAddress","type":"address"},{"internalType":"uint16","name":"stakingModuleFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"targetShare","type":"uint16"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint64","name":"lastDepositAt","type":"uint64"},{"internalType":"uint256","name":"lastDepositBlock","type":"uint256"},{"internalType":"uint256","name":"exitedValidatorsCount","type":"uint256"}],"internalType":"struct StakingRouter.StakingModule[]","name":"res","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingModulesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingRewardsDistribution","outputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"stakingModuleIds","type":"uint256[]"},{"internalType":"uint96[]","name":"stakingModuleFees","type":"uint96[]"},{"internalType":"uint96","name":"totalFee","type":"uint96"},{"internalType":"uint256","name":"precisionPoints","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalFeeE4Precision","outputs":[{"internalType":"uint16","name":"totalFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWithdrawalCredentials","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"hasStakingModule","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_lido","type":"address"},{"internalType":"bytes32","name":"_withdrawalCredentials","type":"bytes32"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"onValidatorsCountsByNodeOperatorReportingFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"pauseStakingModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_stakingModuleIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_totalShares","type":"uint256[]"}],"name":"reportRewardsMinted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"bytes","name":"_nodeOperatorIds","type":"bytes"},{"internalType":"bytes","name":"_exitedValidatorsCounts","type":"bytes"}],"name":"reportStakingModuleExitedValidatorsCountByNodeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"bytes","name":"_nodeOperatorIds","type":"bytes"},{"internalType":"bytes","name":"_stuckValidatorsCounts","type":"bytes"}],"name":"reportStakingModuleStuckValidatorsCountByNodeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"resumeStakingModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"enum StakingRouter.StakingModuleStatus","name":"_status","type":"uint8"}],"name":"setStakingModuleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_withdrawalCredentials","type":"bytes32"}],"name":"setWithdrawalCredentials","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"_nodeOperatorId","type":"uint256"},{"internalType":"bool","name":"_triggerUpdateFinish","type":"bool"},{"components":[{"internalType":"uint256","name":"currentModuleExitedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"currentNodeOperatorExitedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"currentNodeOperatorStuckValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"newModuleExitedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"newNodeOperatorExitedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"newNodeOperatorStuckValidatorsCount","type":"uint256"}],"internalType":"struct StakingRouter.ValidatorsCountsCorrection","name":"_correction","type":"tuple"}],"name":"unsafeSetExitedValidatorsCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_stakingModuleIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_exitedValidatorsCounts","type":"uint256[]"}],"name":"updateExitedValidatorsCountByStakingModule","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"_nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"_refundedValidatorsCount","type":"uint256"}],"name":"updateRefundedValidatorsCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"_targetShare","type":"uint256"},{"internalType":"uint256","name":"_stakingModuleFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"updateStakingModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"_nodeOperatorId","type":"uint256"},{"internalType":"bool","name":"_isTargetLimitActive","type":"bool"},{"internalType":"uint256","name":"_targetLimit","type":"uint256"}],"name":"updateTargetValidatorsLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}] \ No newline at end of file diff --git a/internal/lido/contracts/staking_router/StakingRouter.bin b/internal/lido/contracts/staking_router/StakingRouter.bin deleted file mode 100644 index 2f90b4773..000000000 --- a/internal/lido/contracts/staking_router/StakingRouter.bin +++ /dev/null @@ -1 +0,0 @@ -60a06040523480156200001157600080fd5b5060405162006098380380620060988339810160408190526200003491620000ae565b806001600160a01b0381166200005d57604051637c5f8bcf60e11b815260040160405180910390fd5b6001600160a01b0316608052620000a37f4dd0f6662ba1d6b081f08b350f5e9a6a7b15cf586926ba66f753594928fa64a6600019620000aa602090811b6200374a17901c565b50620000e0565b9055565b600060208284031215620000c157600080fd5b81516001600160a01b0381168114620000d957600080fd5b9392505050565b608051615f9562000103600039600081816107540152613d220152615f956000f3fe6080604052600436106103d25760003560e01c80639010d07c116101fd578063c82b1bb111610118578063e016e6f7116100ab578063efcdcc0e1161007a578063efcdcc0e14610c4a578063f07ff28a14610c7a578063f2aebb6514610c9a578063f8bb6d4214610cbc578063fa5093eb14610cdc57600080fd5b8063e016e6f714610bc8578063e1b92a5c14610bea578063e24ce9f114610c0a578063e97ee8cc14610c2a57600080fd5b8063d0a2b1b8116100e7578063d0a2b1b814610b53578063d547741f14610b73578063d861c58414610b93578063db3c7ba714610bb357600080fd5b8063c82b1bb114610ac5578063c8ac498014610af3578063ca15c87314610b13578063cb589b9a14610b3357600080fd5b8063a7357c8c11610190578063af1240971161015f578063af12409714610a30578063ba21ccae14610a50578063bc1bb19014610a76578063c445ea7514610aa357600080fd5b8063a7357c8c1461099d578063aa0b7db7146109d0578063aa5a1b9d146109e3578063abd44a2414610a1057600080fd5b80639fbb7bae116101cc5780639fbb7bae146108e55780639fc5a6ed1461090d578063a217fddf1461093a578063a734329c1461094f57600080fd5b80639010d07c1461087057806391d148541461089057806396b5d81c146108b05780639b75b4ef146108d057600080fd5b806356396715116102ed5780636b96736b116102805780638525e3a11161024f5780638525e3a1146107e75780638801da79146108075780638aa104351461083b5780638dc70c571461085057600080fd5b80636b96736b146107425780637443f523146107765780637a74884d146107965780637c8da51c146107ca57600080fd5b80636183214d116102bc5780636183214d146106b35780636608b11b146106d55780636a516b47146106f55780636ada55b91461072257600080fd5b8063563967151461063c57806357993b85146106515780635bf55e40146106735780636133f9851461069357600080fd5b8063271662ec116103655780633e54ee5b116103345780633e54ee5b146105d2578063473e0433146105f25780634a7583b6146106125780634b3a1cb71461062757600080fd5b8063271662ec1461054f5780632f2ff15d146105655780633240a3221461058557806336568abe146105b257600080fd5b80631565d2f2116103a15780631565d2f2146104a757806319c64b79146104db5780631d1b9d3c146104fb578063248a9ca31461052f57600080fd5b806301ffc9a7146103f55780630519fbbf1461042a578063072859c71461045857806307e203ac1461047a57600080fd5b366103f0576040516309fb455960e41b815260040160405180910390fd5b600080fd5b34801561040157600080fd5b50610415610410366004614e4f565b610d17565b60405190151581526020015b60405180910390f35b34801561043657600080fd5b5061044a610445366004614e79565b610d42565b604051908152602001610421565b34801561046457600080fd5b50610478610473366004614f0e565b610dbd565b005b34801561048657600080fd5b5061049a610495366004614e79565b610fcc565b6040516104219190614fa3565b3480156104b357600080fd5b5061044a7f55180e25fcacf9af017d35d497765476319b23896daa1f9bc2b38fa80b36a16381565b3480156104e757600080fd5b5061044a6104f6366004614fc4565b61108b565b34801561050757600080fd5b5061044a7f779e5c23cb7a5bcb9bfe1e9a5165a00057f12bcdfd13e374540fdf1a1cd9113781565b34801561053b57600080fd5b5061044a61054a366004614e79565b611108565b34801561055b57600080fd5b5061044a61271081565b34801561057157600080fd5b50610478610580366004615002565b61112a565b34801561059157600080fd5b506105a56105a0366004614e79565b61114c565b604051610421919061507e565b3480156105be57600080fd5b506104786105cd366004615002565b6111e4565b3480156105de57600080fd5b506104786105ed36600461512c565b611262565b3480156105fe57600080fd5b5061044a61060d366004614e79565b611685565b34801561061e57600080fd5b5061044a61169c565b34801561063357600080fd5b5061044a602081565b34801561064857600080fd5b5061044a6116cb565b34801561065d57600080fd5b506106666116f5565b60405161042191906152c6565b34801561067f57600080fd5b5061047861068e366004614e79565b611702565b34801561069f57600080fd5b506104786106ae36600461536b565b611792565b3480156106bf57600080fd5b506106c86118b6565b60405161042191906153a7565b3480156106e157600080fd5b506104156106f0366004614e79565b611a85565b34801561070157600080fd5b5061070a611aaa565b6040516001600160a01b039091168152602001610421565b34801561072e57600080fd5b5061041561073d366004614e79565b611ad4565b34801561074e57600080fd5b5061070a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561078257600080fd5b50610478610791366004615409565b611add565b3480156107a257600080fd5b5061044a7fe7c742a54cd11fc9749a47ab34bdcd7327820908e8d0d48b4a5c7f17b029409881565b3480156107d657600080fd5b5061044a68056bc75e2d6310000081565b3480156107f357600080fd5b506106666108023660046154cb565b611b7d565b34801561081357600080fd5b5061044a7f9a2f67efb89489040f2c48c3b2c38f719fba1276678d2ced3bd9049fb5edc6b281565b34801561084757600080fd5b5061044a611d67565b34801561085c57600080fd5b5061047861086b3660046154ff565b611d91565b34801561087c57600080fd5b5061070a61088b366004614fc4565b611f22565b34801561089c57600080fd5b506104156108ab366004615002565b611f4e565b3480156108bc57600080fd5b5061044a6108cb366004614e79565b611f86565b3480156108dc57600080fd5b5061044a601f81565b3480156108f157600080fd5b506108fa612045565b60405161ffff9091168152602001610421565b34801561091957600080fd5b5061092d610928366004614e79565b612073565b6040516104219190615569565b34801561094657600080fd5b5061044a600081565b34801561095b57600080fd5b5061041561096a366004614e79565b60009081527f9b48f5b32acb95b982effe269feac267eead113c4b5af14ffeb9aadac18a6e9c6020526040902054151590565b3480156109a957600080fd5b5061044a7eb1e70095ba5bacc3202c3db9faf1f7873186f0ed7b6c84e80c0018dcc6e38e81565b6104786109de366004615577565b61209a565b3480156109ef57600080fd5b50610a036109fe366004614fc4565b612300565b60405161042191906155c9565b348015610a1c57600080fd5b5061044a610a2b36600461561c565b61241f565b348015610a3c57600080fd5b50610478610a4b36600461561c565b612679565b348015610a5c57600080fd5b50610a6561284f565b6040516104219594939291906156b6565b348015610a8257600080fd5b50610a96610a91366004614e79565b612bca565b6040516104219190615775565b348015610aaf57600080fd5b5061044a600080516020615f2083398151915281565b348015610ad157600080fd5b50610ae5610ae0366004614e79565b612d0e565b604051610421929190615788565b348015610aff57600080fd5b50610478610b0e3660046157a1565b612d26565b348015610b1f57600080fd5b5061044a610b2e366004614e79565b612dc9565b348015610b3f57600080fd5b50610478610b4e3660046157a1565b612ded565b348015610b5f57600080fd5b50610478610b6e36600461581a565b612e61565b348015610b7f57600080fd5b50610478610b8e366004615002565b612ef6565b348015610b9f57600080fd5b50610478610bae366004614e79565b612f13565b348015610bbf57600080fd5b50610478612fa4565b348015610bd457600080fd5b5061044a600080516020615f4083398151915281565b348015610bf657600080fd5b50610478610c0536600461584e565b613171565b348015610c1657600080fd5b50610415610c25366004614e79565b6131fd565b348015610c3657600080fd5b50610478610c45366004614e79565b613206565b348015610c5657600080fd5b50610c5f6133c5565b6040805161ffff938416815292909116602083015201610421565b348015610c8657600080fd5b506105a5610c9536600461587a565b61340c565b348015610ca657600080fd5b50610caf6135a0565b60405161042191906158c0565b348015610cc857600080fd5b506105a5610cd736600461584e565b613636565b348015610ce857600080fd5b50610cf16136d8565b604080516001600160601b03948516815293909216602084015290820152606001610421565b60006001600160e01b03198216635a05180f60e01b1480610d3c5750610d3c8261374e565b92915050565b6000610d4d82613783565b6001600160a01b031663d087d2886040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8557600080fd5b505afa158015610d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c91906158d3565b7f55180e25fcacf9af017d35d497765476319b23896daa1f9bc2b38fa80b36a163610de881336137a5565b6000610df386613809565b8054604051632cc1db0f60e21b815260048101889052919250630100000090046001600160a01b0316906000908190839063b3076c3c906024016101006040518083038186803b158015610e4657600080fd5b505afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e91906158ec565b5050955050509350505083600401548660000151141580610ea3575080866020015114155b80610eb2575081866040015114155b15610ee95760048481015460405163e882688560e01b81529182015260248101829052604481018390526064015b60405180910390fd5b6060860151600480860191909155608087015160a088015160405163f2e2ca6360e01b81529283018b9052602483019190915260448201526001600160a01b0384169063f2e2ca6390606401600060405180830381600087803b158015610f4f57600080fd5b505af1158015610f63573d6000803e3d6000fd5b505050508615610fc157826001600160a01b031663e864299e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fa857600080fd5b505af1158015610fbc573d6000803e3d6000fd5b505050505b505050505050505050565b610ff060405180606001604052806000815260200160008152602001600081525090565b6000610ffb83612bca565b9050600081602001519050806001600160a01b0316639abddf096040518163ffffffff1660e01b815260040160606040518083038186803b15801561103f57600080fd5b505afa158015611053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110779190615956565b604086015260208501528352509092915050565b600080806110aa6110a56801bc16d674ec800000866159b0565b61381c565b925092505060006110ba866139e1565b90508181815181106110ce576110ce6159c4565b602002602001015160c001518382815181106110ec576110ec6159c4565b60200260200101516110fe91906159da565b9695505050505050565b6000908152600080516020615f00833981519152602052604090206001015490565b61113382611108565b61113d81336137a5565b6111478383613a3a565b505050565b6060600061115983613783565b90506000816001600160a01b031663a70c70e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561119657600080fd5b505afa1580156111aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ce91906158d3565b90506111dc84600083613636565b949350505050565b6001600160a01b03811633146112545760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ee0565b61125e8282613a69565b5050565b600080516020615f4083398151915261127b81336137a5565b6127108411156112bd57604051630cb4392560e31b815260206004820152600c60248201526b5f746172676574536861726560a01b6044820152606401610ee0565b6127106112ca83856159f1565b111561131957604051630cb4392560e31b815260206004820181905260248201527f5f7374616b696e674d6f64756c65466565202b205f74726561737572794665656044820152606401610ee0565b6001600160a01b0385166113685760405163eac0d38960e01b81526020600482015260156024820152745f7374616b696e674d6f64756c654164647265737360581b6044820152606401610ee0565b8515806113755750601f86115b156113935760405163ac18716960e01b815260040160405180910390fd5b600061139d61169c565b9050602081106113c05760405163309eed9960e01b815260040160405180910390fd5b60005b81811015611410576113d481613a98565b546001600160a01b0388811663010000009092041614156114085760405163050f969d60e41b815260040160405180910390fd5b6001016113c3565b50600061141c82613a98565b905060006114487ff9a85ae945d8134f58bd2ee028636634dcb9e812798acb5c806bf1951232a2255490565b611453906001615a09565b825462ffffff191662ffffff82161783559050611474600183018b8b614c69565b508154630100000065ffff0000000160b81b03191663010000006001600160a01b038a160261ffff60d81b191617600160d81b61ffff898116919091029190911763ffffffff60b81b1916600160b81b8883160261ffff60c81b191617600160c81b918716919091021760ff60e81b1916825560028201805467ffffffffffffffff1916426001600160401b03161790554360038301556040805160008152905162ffffff8316917f9151b7f88aca05d432bb395647ef52b2ffc454e3c6afb69c95345af6b5a778c0919081900360200190a26115568162ffffff1684613ac8565b62ffffff81167ff9a85ae945d8134f58bd2ee028636634dcb9e812798acb5c806bf1951232a225556115b061158c8460016159f1565b7f1b3ef9db2d6f0727a31622833b45264c21051726d23ddb6f73b3b65628cafcc355565b8062ffffff167f43b5213f0e1666cd0b8692a73686164c94deb955a59c65e10dee8bb958e7ce3e898c8c336040516115eb9493929190615a59565b60405180910390a26040805188815233602082015262ffffff8316917f065e5bd8e4145dd99cf69bad5871ad52d094aee07a67fcf2f418c89e49d5f20c910160405180910390a260408051878152602081018790523381830152905162ffffff8316917f303c8ac43d1b1f9b898ddd2915a294efa01e9b07c322d7deeb7db332b66f0410919081900360600190a250505050505050505050565b60008061169183613809565b600301549392505050565b60006116c67f1b3ef9db2d6f0727a31622833b45264c21051726d23ddb6f73b3b65628cafcc35490565b905090565b60006116c67fabeb05279af36da5d476d7f950157cd2ea98a4166fa68a6bc97ce3a22fbb93c05490565b60606116c66108026135a0565b7eb1e70095ba5bacc3202c3db9faf1f7873186f0ed7b6c84e80c0018dcc6e38e61172c81336137a5565b600061173783613809565b905060008154600160e81b900460ff16600281111561175857611758615531565b600281111561176957611769615531565b146117875760405163322e64fb60e11b815260040160405180910390fd5b611147816001613b0b565b6001600160a01b0383166117d25760405163eac0d38960e01b81526020600482015260066024820152652fb0b236b4b760d11b6044820152606401610ee0565b6001600160a01b0382166118115760405163eac0d38960e01b81526020600482015260056024820152645f6c69646f60d81b6044820152606401610ee0565b61181b6001613bce565b611826600084613c00565b61184f7f706b9ed9846c161ad535be9b6345c3a7b2cb929e8d4a7254dee9ba6e6f8e5531839055565b6118787fabeb05279af36da5d476d7f950157cd2ea98a4166fa68a6bc97ce3a22fbb93c0829055565b604080518281523360208201527f82e72df77173eab89b00556d791a407a78f4605c5c2f0694967c8c429dd43c7c91015b60405180910390a1505050565b606060006118c261169c565b9050806001600160401b038111156118dc576118dc614ea0565b60405190808252806020026020018201604052801561191557816020015b611902614ced565b8152602001906001900390816118fa5790505b50915060005b81811015611a805761192c81613a98565b6040805161014081018252825462ffffff81168252630100000081046001600160a01b03166020830152600160b81b810461ffff90811693830193909352600160c81b810483166060830152600160d81b81049092166080820152600160e81b90910460ff1660a082015260018201805491929160c0840191906119af90615a90565b80601f01602080910402602001604051908101604052809291908181526020018280546119db90615a90565b8015611a285780601f106119fd57610100808354040283529160200191611a28565b820191906000526020600020905b815481529060010190602001808311611a0b57829003601f168201915b505050918352505060028201546001600160401b03166020820152600382015460408201526004909101546060909101528351849083908110611a6d57611a6d6159c4565b602090810291909101015260010161191b565b505090565b6000805b611a9283612073565b6002811115611aa357611aa3615531565b1492915050565b60006116c67f706b9ed9846c161ad535be9b6345c3a7b2cb929e8d4a7254dee9ba6e6f8e55315490565b60006002611a89565b600080516020615f40833981519152611af681336137a5565b6000611b0186613809565b546040516354f3d42360e11b81526004810187905285151560248201526044810185905263010000009091046001600160a01b03169150819063a9e7a84690606401600060405180830381600087803b158015611b5d57600080fd5b505af1158015611b71573d6000803e3d6000fd5b50505050505050505050565b606081516001600160401b03811115611b9857611b98614ea0565b604051908082528060200260200182016040528015611bd157816020015b611bbe614d40565b815260200190600190039081611bb65790505b50905060005b8251811015611d61576000611c04848381518110611bf757611bf76159c4565b6020026020010151612bca565b90506000816020015190506040518060800160405280826001600160a01b031663a70c70e46040518163ffffffff1660e01b815260040160206040518083038186803b158015611c5357600080fd5b505afa158015611c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8b91906158d3565b8152602001826001600160a01b0316638469cbd36040518163ffffffff1660e01b815260040160206040518083038186803b158015611cc957600080fd5b505afa158015611cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0191906158d3565b8152602001838152602001611d2e878681518110611d2157611d216159c4565b6020026020010151610fcc565b815250848481518110611d4357611d436159c4565b6020026020010181905250505080611d5a90615ac5565b9050611bd7565b50919050565b60006116c67f4dd0f6662ba1d6b081f08b350f5e9a6a7b15cf586926ba66f753594928fa64a65490565b600080516020615f40833981519152611daa81336137a5565b612710841115611dec57604051630cb4392560e31b815260206004820152600c60248201526b5f746172676574536861726560a01b6044820152606401610ee0565b612710611df983856159f1565b1115611e4857604051630cb4392560e31b815260206004820181905260248201527f5f7374616b696e674d6f64756c65466565202b205f74726561737572794665656044820152606401610ee0565b6000611e5386613809565b805463ffffffff60c81b1916600160d81b61ffff8881169190910261ffff60c81b191691909117600160c81b868316021761ffff60b81b1916600160b81b918716919091021781556040805187815233602082015291925087917f065e5bd8e4145dd99cf69bad5871ad52d094aee07a67fcf2f418c89e49d5f20c910160405180910390a260408051858152602081018590523381830152905187917f303c8ac43d1b1f9b898ddd2915a294efa01e9b07c322d7deeb7db332b66f0410919081900360600190a2505050505050565b6000828152600080516020615ee083398151915260205260408120611f479083613c0a565b9392505050565b6000918252600080516020615f00833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080611f9283613809565b90506000808260000160039054906101000a90046001600160a01b03166001600160a01b0316639abddf096040518163ffffffff1660e01b815260040160606040518083038186803b158015611fe757600080fd5b505afa158015611ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201f9190615956565b5091509150612032836004015483613c16565b61203c90826159da565b95945050505050565b600080600061205261284f565b9450945050505061206c826001600160601b031682613c2c565b9250505090565b600061207e82613809565b54600160e81b900460ff166002811115610d3c57610d3c615531565b7f706b9ed9846c161ad535be9b6345c3a7b2cb929e8d4a7254dee9ba6e6f8e5531546001600160a01b0316336001600160a01b0316146120ed57604051637e71782360e01b815260040160405180910390fd5b60006120f76116cb565b9050806121175760405163180a97cd60e21b815260040160405180910390fd5b600061212285613809565b905060008154600160e81b900460ff16600281111561214357612143615531565b600281111561215457612154615531565b146121725760405163322e64fb60e11b815260040160405180910390fd5b60028101805467ffffffffffffffff1916426001600160401b0316179055436003820155604051348082529086907f9151b7f88aca05d432bb395647ef52b2ffc454e3c6afb69c95345af6b5a778c09060200160405180910390a26121e06801bc16d674ec80000088615ae0565b81146122095760405163023db95b60e21b81526004810182905260248101889052604401610ee0565b86156122f75781546040516317dc836b60e31b8152600091829163010000009091046001600160a01b03169063bee41b589061224d908c908b908b90600401615aff565b600060405180830381600087803b15801561226757600080fd5b505af115801561227b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122a39190810190615b7c565b9150915060004790506122d98a876040516020016122c391815260200190565b6040516020818303038152906040528585613c45565b47846122e582846159da565b146122f2576122f2615bd5565b505050505b50505050505050565b612308614d8f565b600061231384612bca565b9050600081602001519050600080600080600080600080886001600160a01b031663b3076c3c8d6040518263ffffffff1660e01b815260040161235891815260200190565b6101006040518083038186803b15801561237157600080fd5b505afa158015612385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a991906158ec565b97509750975097509750975097509750878b6000019015159081151581525050868b6020018181525050858b6040018181525050848b6060018181525050838b6080018181525050828b60a0018181525050818b60c0018181525050808b60e00181815250505050505050505050505092915050565b6000600080516020615f2083398151915261243a81336137a5565b8483146124645760405163098b37e560e31b81526004810186905260248101849052604401610ee0565b6000805b8681101561266e576000888883818110612484576124846159c4565b905060200201359050600061249882613809565b6004810154909150808989868181106124b3576124b36159c4565b9050602002013510156124d957604051632f789f4960e21b815260040160405180910390fd5b6000808360000160039054906101000a90046001600160a01b03166001600160a01b0316639abddf096040518163ffffffff1660e01b815260040160606040518083038186803b15801561252c57600080fd5b505afa158015612540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125649190615956565b5091509150808b8b8881811061257c5761257c6159c4565b9050602002013511156125c7578a8a8781811061259b5761259b6159c4565b9050602002013581604051630b72c59d60e21b8152600401610ee0929190918252602082015260400190565b828b8b888181106125da576125da6159c4565b905060200201356125eb91906159da565b6125f590886159f1565b96508282101561263d57847fdd2523ca96a639ba7e17420698937f71eddd8af012ccb36ff5c8fe96141acae961262b84866159da565b60405190815260200160405180910390a25b8a8a8781811061264f5761264f6159c4565b9050602002013584600401819055508560010195505050505050612468565b509695505050505050565b7f779e5c23cb7a5bcb9bfe1e9a5165a00057f12bcdfd13e374540fdf1a1cd911376126a481336137a5565b8382146126ce5760405163098b37e560e31b81526004810185905260248101839052604401610ee0565b60005b848110156128475760008484838181106126ed576126ed6159c4565b90506020020135111561283f57600061271d878784818110612711576127116159c4565b90506020020135613809565b54630100000090046001600160a01b0316905080638d7e4017868685818110612748576127486159c4565b905060200201356040518263ffffffff1660e01b815260040161276d91815260200190565b600060405180830381600087803b15801561278757600080fd5b505af1925050508015612798575060015b61283d573d8080156127c6576040519150601f19603f3d011682016040523d82523d6000602084013e6127cb565b606091505b5080516127eb57604051638fd297d960e01b815260040160405180910390fd5b8787848181106127fd576127fd6159c4565b905060200201357ff74208fedac7280fd11f8de0be14e00423dc5076da8e8ec8ca90e09257fff1b3826040516128339190615beb565b60405180910390a2505b505b6001016126d1565b505050505050565b6060806060600080600080612862613dc3565b80519193509150801580612874575082155b156128b65750506040805160008082526020820181815282840182815260608401909452919850909650909450925068056bc75e2d631000009150612bc39050565b68056bc75e2d631000009350806001600160401b038111156128da576128da614ea0565b604051908082528060200260200182016040528015612903578160200160208202803683370190505b509650806001600160401b0381111561291e5761291e614ea0565b604051908082528060200260200182016040528015612947578160200160208202803683370190505b509750806001600160401b0381111561296257612962614ea0565b60405190808252806020026020018201604052801561298b578160200160208202803683370190505b5095506000808060005b84811015612b905760008682815181106129b1576129b16159c4565b602002602001015160c001511115612b88578581815181106129d5576129d56159c4565b60200260200101516020015162ffffff168b85815181106129f8576129f86159c4565b6020026020010181815250508688878381518110612a1857612a186159c4565b602002602001015160c00151612a2e9190615ae0565b612a3891906159b0565b9250858181518110612a4c57612a4c6159c4565b6020026020010151600001518c8581518110612a6a57612a6a6159c4565b60200260200101906001600160a01b031690816001600160a01b031681525050612710868281518110612a9f57612a9f6159c4565b60200260200101516040015161ffff1684612aba9190615ae0565b612ac491906159b0565b91506002868281518110612ada57612ada6159c4565b602002602001015160a001516002811115612af757612af7615531565b14612b3057818a8581518110612b0f57612b0f6159c4565b60200260200101906001600160601b031690816001600160601b0316815250505b81612710878381518110612b4657612b466159c4565b60200260200101516060015161ffff1685612b619190615ae0565b612b6b91906159b0565b612b759190615bfe565b612b7f908a615bfe565b98506001909301925b600101612995565b5086886001600160601b03161115612baa57612baa615bd5565b83831015612bbc57828a52828b528289525b5050505050505b9091929394565b612bd2614ced565b612bdb82613809565b6040805161014081018252825462ffffff81168252630100000081046001600160a01b03166020830152600160b81b810461ffff90811693830193909352600160c81b810483166060830152600160d81b81049092166080820152600160e81b90910460ff1660a082015260018201805491929160c084019190612c5e90615a90565b80601f0160208091040260200160405190810160405280929190818152602001828054612c8a90615a90565b8015612cd75780601f10612cac57610100808354040283529160200191612cd7565b820191906000526020600020905b815481529060010190602001808311612cba57829003601f168201915b505050918352505060028201546001600160401b031660208201526003820154604082015260049091015460609091015292915050565b60006060612d1b8361381c565b509094909350915050565b600080516020615f20833981519152612d3f81336137a5565b6000612d4a87613809565b54630100000090046001600160a01b03169050612d6986868686613e91565b604051634d8060a360e11b81526001600160a01b03821690639b00c14690612d9b908990899089908990600401615c20565b600060405180830381600087803b158015612db557600080fd5b505af11580156122f2573d6000803e3d6000fd5b6000818152600080516020615ee083398151915260205260408120610d3c90613f37565b600080516020615f20833981519152612e0681336137a5565b6000612e1187613809565b54630100000090046001600160a01b03169050612e3086868686613e91565b604051629b3d1960e81b81526001600160a01b03821690639b3d190090612d9b908990899089908990600401615c20565b600080516020615f40833981519152612e7a81336137a5565b6000612e8584613809565b9050826002811115612e9957612e99615531565b8154600160e81b900460ff166002811115612eb657612eb6615531565b6002811115612ec757612ec7615531565b1415612ee657604051635ca16fa760e11b815260040160405180910390fd5b612ef08184613b0b565b50505050565b612eff82611108565b612f0981336137a5565b6111478383613a69565b7f9a2f67efb89489040f2c48c3b2c38f719fba1276678d2ced3bd9049fb5edc6b2612f3e81336137a5565b6000612f4983613809565b905060018154600160e81b900460ff166002811115612f6a57612f6a615531565b6002811115612f7b57612f7b615531565b14612f99576040516316c1da1560e21b815260040160405180910390fd5b611147816000613b0b565b600080516020615f20833981519152612fbd81336137a5565b6000612fc761169c565b905060005b81811015611147576000612fdf82613a98565b905060008160000160039054906101000a90046001600160a01b031690506000816001600160a01b0316639abddf096040518163ffffffff1660e01b815260040160606040518083038186803b15801561303857600080fd5b505afa15801561304c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130709190615956565b50509050826004015481141561316357816001600160a01b031663e864299e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156130bb57600080fd5b505af19250505080156130cc575060015b613163573d8080156130fa576040519150601f19603f3d011682016040523d82523d6000602084013e6130ff565b606091505b50805161311f57604051638fd297d960e01b815260040160405180910390fd5b835460405162ffffff909116907fe74bf895f0c3a2d6c74c40cbb362fdd9640035fc4226c72e3843809ad2a9d2b590613159908490615beb565b60405180910390a2505b836001019350505050612fcc565b600080516020615f4083398151915261318a81336137a5565b600061319585613809565b5460405163a2e080f160e01b8152600481018690526024810185905263010000009091046001600160a01b03169150819063a2e080f190604401600060405180830381600087803b1580156131e957600080fd5b505af1158015610fc1573d6000803e3d6000fd5b60006001611a89565b7fe7c742a54cd11fc9749a47ab34bdcd7327820908e8d0d48b4a5c7f17b029409861323181336137a5565b61325a7fabeb05279af36da5d476d7f950157cd2ea98a4166fa68a6bc97ce3a22fbb93c0839055565b600061326461169c565b905060005b8181101561338f57600061327c82613a98565b90508160010191508060000160039054906101000a90046001600160a01b03166001600160a01b03166390c09bdb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132d657600080fd5b505af19250505080156132e7575060015b613389573d808015613315576040519150601f19603f3d011682016040523d82523d6000602084013e61331a565b606091505b50805161333a57604051638fd297d960e01b815260040160405180910390fd5b613345826001613b0b565b815460405162ffffff909116907f0d64b11929aa111ca874dd00b5b0cc2d82b741be924ec9e3691e67c71552f6239061337f908490615beb565b60405180910390a2505b50613269565b50604080518481523360208201527f82e72df77173eab89b00556d791a407a78f4605c5c2f0694967c8c429dd43c7c91016118a9565b60008060008060006133d56136d8565b92506001600160601b031692506001600160601b031692506133f78382613c2c565b94506134038282613c2c565b93505050509091565b6060600061341984613783565b905082516001600160401b0381111561343457613434614ea0565b60405190808252806020026020018201604052801561346d57816020015b61345a614dd6565b8152602001906001900390816134525790505b50915060005b8351811015613598576040518060600160405280858381518110613499576134996159c4565b60200260200101518152602001836001600160a01b0316635e2fb9088785815181106134c7576134c76159c4565b60200260200101516040518263ffffffff1660e01b81526004016134ed91815260200190565b60206040518083038186803b15801561350557600080fd5b505afa158015613519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353d9190615c52565b151581526020016135678787858151811061355a5761355a6159c4565b6020026020010151612300565b81525083828151811061357c5761357c6159c4565b60200260200101819052508061359190615ac5565b9050613473565b505092915050565b606060006135ac61169c565b9050806001600160401b038111156135c6576135c6614ea0565b6040519080825280602002602001820160405280156135ef578160200160208202803683370190505b50915060005b81811015611a805761360681613a98565b54835162ffffff90911690849083908110613623576136236159c4565b60209081029190910101526001016135f5565b6060600061364385613783565b604051634febc81b60e01b815260048101869052602481018590529091506000906001600160a01b03831690634febc81b9060440160006040518083038186803b15801561369057600080fd5b505afa1580156136a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136cc9190810190615c6f565b90506110fe868261340c565b6000806000606060006136e961284f565b9650909450925060009150505b825181101561373657828181518110613711576137116159c4565b6020026020010151866137249190615bfe565b955061372f81615ac5565b90506136f6565b506137418582615cf4565b93505050909192565b9055565b60006001600160e01b03198216637965db0b60e01b1480610d3c57506301ffc9a760e01b6001600160e01b0319831614610d3c565b600061378e82613809565b54630100000090046001600160a01b031692915050565b6137af8282611f4e565b61125e576137c7816001600160a01b03166014613f41565b6137d2836020613f41565b6040516020016137e3929190615d1c565b60408051601f198184030181529082905262461bcd60e51b8252610ee091600401615beb565b6000610d3c613817836139e1565b613a98565b6000606080600061382b613dc3565b8051909350909150806001600160401b0381111561384b5761384b614ea0565b604051908082528060200260200182016040528015613874578160200160208202803683370190505b50935080156139d85761388786836159f1565b91506000816001600160401b038111156138a3576138a3614ea0565b6040519080825280602002602001820160405280156138cc578160200160208202803683370190505b5090506000805b838110156139c7578581815181106138ed576138ed6159c4565b602002602001015160c0015187828151811061390b5761390b6159c4565b6020026020010181815250506127108587838151811061392d5761392d6159c4565b60200260200101516080015161ffff166139479190615ae0565b61395191906159b0565b91506139a282878381518110613969576139696159c4565b602002602001015160e00151888481518110613987576139876159c4565b602002602001015160c0015161399d91906159f1565b6140dc565b8382815181106139b4576139b46159c4565b60209081029190910101526001016138d3565b506139d386838a6140eb565b965050505b50509193909250565b60008181527f9b48f5b32acb95b982effe269feac267eead113c4b5af14ffeb9aadac18a6e9c6020819052604082205480613a2f57604051636a0eb14160e11b815260040160405180910390fd5b6111dc6001826159da565b613a448282614130565b6000828152600080516020615ee08339815191526020526040902061114790826141a6565b613a7382826141bb565b6000828152600080516020615ee083398151915260205260409020611147908261422f565b60009081527f1d2f69fc9b5fe89d7414bf039e8d897c4c487c7603d80de6bcdd2868466f94766020526040902090565b7f9b48f5b32acb95b982effe269feac267eead113c4b5af14ffeb9aadac18a6e9c613af48260016159f1565b600093845260209190915260409092209190915550565b8154600090600160e81b900460ff166002811115613b2b57613b2b615531565b9050816002811115613b3f57613b3f615531565b816002811115613b5157613b51615531565b1461114757816002811115613b6857613b68615531565b835460ff91909116600160e81b0260ff60e81b1982168117855560405162ffffff9182169190921617907ffd6f15fb2b48a21a60fe3d44d3c3a0433ca01e121b5124a63ec45c30ad925a1790613bc19085903390615d91565b60405180910390a2505050565b613bd6611d67565b15613bf45760405163184e52a160e21b815260040160405180910390fd5b613bfd81614244565b50565b61125e8282613a3a565b6000611f4783836142a3565b6000818311613c255781611f47565b5090919050565b600081613c3b61271085615ae0565b611f4791906159b0565b613c50846030615ae0565b825114613c86578151613c64856030615ae0565b6040516346b38e7960e11b815260048101929092526024820152604401610ee0565b613c91846060615ae0565b815114613cc7578051613ca5856060615ae0565b604051633c11c1f760e21b815260048101929092526024820152604401610ee0565b6000613cd360306142cd565b90506000613ce160606142cd565b905060005b868110156122f757613d078584613cfe603085615ae0565b600060306142e6565b613d208483613d17606085615ae0565b600060606142e6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec800000858986613d678c8a8a61436d565b6040518663ffffffff1660e01b8152600401613d869493929190615db7565b6000604051808303818588803b158015613d9f57600080fd5b505af1158015613db3573d6000803e3d6000fd5b5050505050806001019050613ce6565b600060606000613dd161169c565b9050806001600160401b03811115613deb57613deb614ea0565b604051908082528060200260200182016040528015613e2457816020015b613e11614df5565b815260200190600190039081613e095790505b50915060005b81811015613e8b57613e3b816146e8565b838281518110613e4d57613e4d6159c4565b6020026020010181905250828181518110613e6a57613e6a6159c4565b602002602001015160c0015184613e8191906159f1565b9350600101613e2a565b50509091565b613e9c600884615e02565b151580613eb25750613eaf601082615e02565b15155b15613ed3576040516363209a7d60e11b815260036004820152602401610ee0565b6000613ee06008856159b0565b905080613eee6010846159b0565b14613f0f576040516363209a7d60e11b815260026004820152602401610ee0565b80613f30576040516363209a7d60e11b815260016004820152602401610ee0565b5050505050565b6000610d3c825490565b60606000613f50836002615ae0565b613f5b9060026159f1565b6001600160401b03811115613f7257613f72614ea0565b6040519080825280601f01601f191660200182016040528015613f9c576020820181803683370190505b509050600360fc1b81600081518110613fb757613fb76159c4565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613fe657613fe66159c4565b60200101906001600160f81b031916908160001a905350600061400a846002615ae0565b6140159060016159f1565b90505b600181111561408d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614049576140496159c4565b1a60f81b82828151811061405f5761405f6159c4565b60200101906001600160f81b031916908160001a90535060049490941c9361408681615e16565b9050614018565b508315611f475760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ee0565b6000818310613c255781611f47565b6000805b828210156141285761410b858561410685876159da565b614867565b90508061411757614128565b61412181836159f1565b91506140ef565b509392505050565b61413a8282611f4e565b61125e576000828152600080516020615f00833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611f47836001600160a01b038416614aa5565b6141c58282611f4e565b1561125e576000828152600080516020615f00833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611f47836001600160a01b038416614af4565b61426d7f4dd0f6662ba1d6b081f08b350f5e9a6a7b15cf586926ba66f753594928fa64a6829055565b6040518181527ffddcded6b4f4730c226821172046b48372d3cd963c159701ae1b7c3bcac541bb9060200160405180910390a150565b60008260000182815481106142ba576142ba6159c4565b9060005260206000200154905092915050565b60408051828152603f92810192909201601f1916905290565b84516142f282856159f1565b1115801561430a5750835161430782846159f1565b11155b6143565760405162461bcd60e51b815260206004820152601960248201527f42595445535f41525241595f4f55545f4f465f424f554e4453000000000000006044820152606401610ee0565b6020838601810190838601016122f7828285614be7565b60008061437a60406142cd565b9050600061439261438d604060606159da565b6142cd565b90506143a3848360008060406142e6565b6143bc8482604060006143b78260606159da565b6142e6565b6000600286600060801b6040516020016143d7929190615e2d565b60408051601f19818403018152908290526143f191615e65565b602060405180830381855afa15801561440e573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061443191906158d3565b90506000600280856040516020016144499190615e65565b60408051601f198184030181529082905261446391615e65565b602060405180830381855afa158015614480573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906144a391906158d3565b6040516002906144ba908790600090602001615e81565b60408051601f19818403018152908290526144d491615e65565b602060405180830381855afa1580156144f1573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061451491906158d3565b60408051602081019390935282015260600160408051601f198184030181529082905261454091615e65565b602060405180830381855afa15801561455d573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061458091906158d3565b9050600280838a604051602001614598929190615ea3565b60408051601f19818403018152908290526145b291615e65565b602060405180830381855afa1580156145cf573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906145f291906158d3565b60408051634059730760d81b60208201526000602882015290810184905260029060600160408051601f198184030181529082905261463091615e65565b602060405180830381855afa15801561464d573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061467091906158d3565b60408051602081019390935282015260600160408051601f198184030181529082905261469c91615e65565b602060405180830381855afa1580156146b9573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146dc91906158d3565b98975050505050505050565b6146f0614df5565b60006146fb83613a98565b80546001600160a01b036301000000820416845262ffffff8116602085015261ffff600160b81b820481166040860152600160c81b820481166060860152600160d81b820416608085015290915060ff600160e81b90910416600281111561476557614765615531565b8260a00190600281111561477b5761477b615531565b9081600281111561478e5761478e615531565b81525050600080600084600001516001600160a01b0316639abddf096040518163ffffffff1660e01b815260040160606040518083038186803b1580156147d457600080fd5b505afa1580156147e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061480c9190615956565b9194509250905060008560a00151600281111561482b5761482b615531565b14614837576000614839565b805b60e0860152600484015461484e908490613c16565b61485890836159da565b60c08601525092949350505050565b825160009060001982846148815760009350505050611f47565b60005b87518110156149535786818151811061489f5761489f6159c4565b60200260200101518882815181106148b9576148b96159c4565b6020026020010151106148cb57614943565b8781815181106148dd576148dd6159c4565b60200260200101518311156149145780935060019150878181518110614905576149056159c4565b60200260200101519250614943565b878181518110614926576149266159c4565b6020026020010151831415614943576149406001836159f1565b91505b61494c81615ac5565b9050614884565b50806149655760009350505050611f47565b60001960005b8851811015614a2457878181518110614986576149866159c4565b60200260200101518982815181106149a0576149a06159c4565b6020026020010151106149b257614a14565b838982815181106149c5576149c56159c4565b60200260200101511180156149f25750818982815181106149e8576149e86159c4565b6020026020010151105b15614a1457888181518110614a0957614a096159c4565b602002602001015191505b614a1d81615ac5565b905061496b565b50614a6e60018311614a365786614a40565b614a408784614c32565b84614a64848b8981518110614a5757614a576159c4565b60200260200101516140dc565b61399d91906159da565b945084888581518110614a8357614a836159c4565b60200260200101818151614a9791906159f1565b905250505050509392505050565b6000818152600183016020526040812054614aec57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d3c565b506000610d3c565b60008181526001830160205260408120548015614bdd576000614b186001836159da565b8554909150600090614b2c906001906159da565b9050818114614b91576000866000018281548110614b4c57614b4c6159c4565b9060005260206000200154905080876000018481548110614b6f57614b6f6159c4565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ba257614ba2615ec9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d3c565b6000915050610d3c565b5b601f811115614c08578251825260209283019290910190601f1901614be8565b80156111475782518251600019600160086020869003021b01908116901991909116178252505050565b60008215614c605781614c466001856159da565b614c5091906159b0565b614c5b9060016159f1565b611f47565b50600092915050565b828054614c7590615a90565b90600052602060002090601f016020900481019282614c975760008555614cdd565b82601f10614cb05782800160ff19823516178555614cdd565b82800160010185558215614cdd579182015b82811115614cdd578235825591602001919060010190614cc2565b50614ce9929150614e3a565b5090565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e08101829052610100810182905261012081019190915290565b60405180608001604052806000815260200160008152602001614d61614ced565b8152602001614d8a60405180606001604052806000815260200160008152602001600081525090565b905290565b604051806101000160405280600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160608101825260008082526020820152908101614d8a614d8f565b604080516101008101825260008082526020820181905291810182905260608101829052608081018290529060a0820190815260200160008152602001600081525090565b5b80821115614ce95760008155600101614e3b565b600060208284031215614e6157600080fd5b81356001600160e01b031981168114611f4757600080fd5b600060208284031215614e8b57600080fd5b5035919050565b8015158114613bfd57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715614ed857614ed8614ea0565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614f0657614f06614ea0565b604052919050565b600080600080848603610120811215614f2657600080fd5b85359450602086013593506040860135614f3f81614e92565b925060c0605f1982011215614f5357600080fd5b50614f5c614eb6565b606086013581526080860135602082015260a0860135604082015260c0860135606082015260e0860135608082015261010086013560a08201528091505092959194509250565b81518152602080830151908201526040808301519082015260608101610d3c565b60008060408385031215614fd757600080fd5b50508035926020909101359150565b80356001600160a01b0381168114614ffd57600080fd5b919050565b6000806040838503121561501557600080fd5b8235915061502560208401614fe6565b90509250929050565b8051151582526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b602080825282518282018190526000919060409081850190868401855b828110156150d757815180518552868101511515878601528501516150c28686018261502e565b5061014093909301929085019060010161509b565b5091979650505050505050565b60008083601f8401126150f657600080fd5b5081356001600160401b0381111561510d57600080fd5b60208301915083602082850101111561512557600080fd5b9250929050565b60008060008060008060a0878903121561514557600080fd5b86356001600160401b0381111561515b57600080fd5b61516789828a016150e4565b909750955061517a905060208801614fe6565b93506040870135925060608701359150608087013590509295509295509295565b60005b838110156151b657818101518382015260200161519e565b83811115612ef05750506000910152565b600081518084526151df81602086016020860161519b565b601f01601f19169290920160200192915050565b805162ffffff1682526000610140602083015161521b60208601826001600160a01b03169052565b506040830151615231604086018261ffff169052565b506060830151615247606086018261ffff169052565b50608083015161525d608086018261ffff169052565b5060a083015161527260a086018260ff169052565b5060c08301518160c086015261528a828601826151c7565b91505060e08301516152a760e08601826001600160401b03169052565b5061010083810151908501526101209283015192909301919091525090565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561535d57603f19898403018552815160c0815185528882015189860152878201518189870152615323828701826151f3565b60609384015180518886015260208101516080890152604081015160a08901529390925090505095880195935050908601906001016152ed565b509098975050505050505050565b60008060006060848603121561538057600080fd5b61538984614fe6565b925061539760208501614fe6565b9150604084013590509250925092565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156153fc57603f198886030184526153ea8583516151f3565b945092850192908501906001016153ce565b5092979650505050505050565b6000806000806080858703121561541f57600080fd5b8435935060208501359250604085013561543881614e92565b9396929550929360600135925050565b60006001600160401b0382111561546157615461614ea0565b5060051b60200190565b600082601f83011261547c57600080fd5b8135602061549161548c83615448565b614ede565b82815260059290921b840181019181810190868411156154b057600080fd5b8286015b8481101561266e57803583529183019183016154b4565b6000602082840312156154dd57600080fd5b81356001600160401b038111156154f357600080fd5b6111dc8482850161546b565b6000806000806080858703121561551557600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052602160045260246000fd5b6003811061556557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610d3c8284615547565b6000806000806060858703121561558d57600080fd5b843593506020850135925060408501356001600160401b038111156155b157600080fd5b6155bd878288016150e4565b95989497509550505050565b6101008101610d3c828461502e565b60008083601f8401126155ea57600080fd5b5081356001600160401b0381111561560157600080fd5b6020830191508360208260051b850101111561512557600080fd5b6000806000806040858703121561563257600080fd5b84356001600160401b038082111561564957600080fd5b615655888389016155d8565b9096509450602087013591508082111561566e57600080fd5b506155bd878288016155d8565b600081518084526020808501945080840160005b838110156156ab5781518752958201959082019060010161568f565b509495945050505050565b60a0808252865190820181905260009060209060c0840190828a01845b828110156156f85781516001600160a01b0316845292840192908401906001016156d3565b5050508381038285015261570c818961567b565b8481036040860152875180825283890192509083019060005b8181101561574a5783516001600160601b031683529284019291840191600101615725565b50506001600160601b03871660608601529250615765915050565b8260808301529695505050505050565b602081526000611f4760208301846151f3565b8281526040602082015260006111dc604083018461567b565b6000806000806000606086880312156157b957600080fd5b8535945060208601356001600160401b03808211156157d757600080fd5b6157e389838a016150e4565b909650945060408801359150808211156157fc57600080fd5b50615809888289016150e4565b969995985093965092949392505050565b6000806040838503121561582d57600080fd5b8235915060208301356003811061584357600080fd5b809150509250929050565b60008060006060848603121561586357600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561588d57600080fd5b8235915060208301356001600160401b038111156158aa57600080fd5b6158b68582860161546b565b9150509250929050565b602081526000611f47602083018461567b565b6000602082840312156158e557600080fd5b5051919050565b600080600080600080600080610100898b03121561590957600080fd5b885161591481614e92565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b60008060006060848603121561596b57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826159bf576159bf615984565b500490565b634e487b7160e01b600052603260045260246000fd5b6000828210156159ec576159ec61599a565b500390565b60008219821115615a0457615a0461599a565b500190565b600062ffffff808316818516808303821115615a2757615a2761599a565b01949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600060018060a01b03808716835260606020840152615a7c606084018688615a30565b915080841660408401525095945050505050565b600181811c90821680615aa457607f821691505b60208210811415611d6157634e487b7160e01b600052602260045260246000fd5b6000600019821415615ad957615ad961599a565b5060010190565b6000816000190483118215151615615afa57615afa61599a565b500290565b83815260406020820152600061203c604083018486615a30565b600082601f830112615b2a57600080fd5b81516001600160401b03811115615b4357615b43614ea0565b615b56601f8201601f1916602001614ede565b818152846020838601011115615b6b57600080fd5b6111dc82602083016020870161519b565b60008060408385031215615b8f57600080fd5b82516001600160401b0380821115615ba657600080fd5b615bb286838701615b19565b93506020850151915080821115615bc857600080fd5b506158b685828601615b19565b634e487b7160e01b600052600160045260246000fd5b602081526000611f4760208301846151c7565b60006001600160601b03808316818516808303821115615a2757615a2761599a565b604081526000615c34604083018688615a30565b8281036020840152615c47818587615a30565b979650505050505050565b600060208284031215615c6457600080fd5b8151611f4781614e92565b60006020808385031215615c8257600080fd5b82516001600160401b03811115615c9857600080fd5b8301601f81018513615ca957600080fd5b8051615cb761548c82615448565b81815260059190911b82018301908381019087831115615cd657600080fd5b928401925b82841015615c4757835182529284019290840190615cdb565b60006001600160601b0383811690831681811015615d1457615d1461599a565b039392505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351615d5481601785016020880161519b565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615d8581602884016020880161519b565b01602801949350505050565b60408101615d9f8285615547565b6001600160a01b039290921660209190910152919050565b608081526000615dca60808301876151c7565b8281036020840152615ddc81876151c7565b90508281036040840152615df081866151c7565b91505082606083015295945050505050565b600082615e1157615e11615984565b500690565b600081615e2557615e2561599a565b506000190190565b60008351615e3f81846020880161519b565b6fffffffffffffffffffffffffffffffff19939093169190920190815260100192915050565b60008251615e7781846020870161519b565b9190910192915050565b60008351615e9381846020880161519b565b9190910191825250602001919050565b82815260008251615ebb81602085016020870161519b565b919091016020019392505050565b634e487b7160e01b600052603160045260246000fdfe8f8c450dae5029cd48cd91dd9db65da48fb742893edfc7941250f6721d93cbbe9a627a5d4aa7c17f87ff26e3fe9a42c2b6c559e8b41a42282d0ecebb17c0e4d3c23292b191d95d2a7dd94fc6436eb44338fda9e1307d9394fd27c28157c1b33c3105bcbf19d4417b73ae0e58d508a65ecf75665e46c2622d8521732de6080c48a264697066735822122093f74b570f38204664e512a5339a76eebcc26abe3394e4e21b014b1dd0eedf8964736f6c63430008090033 \ No newline at end of file diff --git a/internal/lido/contracts/staking_router/StakingRouter.go b/internal/lido/contracts/staking_router/StakingRouter.go deleted file mode 100644 index d9a3e2ec0..000000000 --- a/internal/lido/contracts/staking_router/StakingRouter.go +++ /dev/null @@ -1,4249 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package stakingrouter - -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 -) - -// StakingRouterNodeOperatorDigest is an auto generated low-level Go binding around an user-defined struct. -type StakingRouterNodeOperatorDigest struct { - Id *big.Int - IsActive bool - Summary StakingRouterNodeOperatorSummary -} - -// StakingRouterNodeOperatorSummary is an auto generated low-level Go binding around an user-defined struct. -type StakingRouterNodeOperatorSummary struct { - IsTargetLimitActive bool - TargetValidatorsCount *big.Int - StuckValidatorsCount *big.Int - RefundedValidatorsCount *big.Int - StuckPenaltyEndTimestamp *big.Int - TotalExitedValidators *big.Int - TotalDepositedValidators *big.Int - DepositableValidatorsCount *big.Int -} - -// StakingRouterStakingModule is an auto generated low-level Go binding around an user-defined struct. -type StakingRouterStakingModule struct { - Id *big.Int - StakingModuleAddress common.Address - StakingModuleFee uint16 - TreasuryFee uint16 - TargetShare uint16 - Status uint8 - Name string - LastDepositAt uint64 - LastDepositBlock *big.Int - ExitedValidatorsCount *big.Int -} - -// StakingRouterStakingModuleDigest is an auto generated low-level Go binding around an user-defined struct. -type StakingRouterStakingModuleDigest struct { - NodeOperatorsCount *big.Int - ActiveNodeOperatorsCount *big.Int - State StakingRouterStakingModule - Summary StakingRouterStakingModuleSummary -} - -// StakingRouterStakingModuleSummary is an auto generated low-level Go binding around an user-defined struct. -type StakingRouterStakingModuleSummary struct { - TotalExitedValidators *big.Int - TotalDepositedValidators *big.Int - DepositableValidatorsCount *big.Int -} - -// StakingRouterValidatorsCountsCorrection is an auto generated low-level Go binding around an user-defined struct. -type StakingRouterValidatorsCountsCorrection struct { - CurrentModuleExitedValidatorsCount *big.Int - CurrentNodeOperatorExitedValidatorsCount *big.Int - CurrentNodeOperatorStuckValidatorsCount *big.Int - NewModuleExitedValidatorsCount *big.Int - NewNodeOperatorExitedValidatorsCount *big.Int - NewNodeOperatorStuckValidatorsCount *big.Int -} - -// ApiMetaData contains all meta data concerning the Api contract. -var ApiMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_depositContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AppAuthLidoFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"firstArrayLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondArrayLength\",\"type\":\"uint256\"}],\"name\":\"ArraysLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositContractZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DirectETHTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyWithdrawalsCredentials\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExitedValidatorsCountCannotDecrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractVersionIncrement\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"etherValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositsCount\",\"type\":\"uint256\"}],\"name\":\"InvalidDepositsValue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"}],\"name\":\"InvalidPublicKeysBatchLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"code\",\"type\":\"uint256\"}],\"name\":\"InvalidReportData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"}],\"name\":\"InvalidSignaturesBatchLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonZeroContractVersionOnInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reportedExitedValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositedValidatorsCount\",\"type\":\"uint256\"}],\"name\":\"ReportedExitedValidatorsExceedDeposited\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingModuleAddressExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingModuleNotActive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingModuleNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingModuleStatusTheSame\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingModuleUnregistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingModuleWrongName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakingModulesLimitExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"name\":\"UnexpectedContractVersion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentModuleExitedValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentNodeOpExitedValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentNodeOpStuckValidatorsCount\",\"type\":\"uint256\"}],\"name\":\"UnexpectedCurrentValidatorsCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnrecoverableModuleError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"field\",\"type\":\"string\"}],\"name\":\"ValueOver100Percent\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"field\",\"type\":\"string\"}],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"ContractVersionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"stakingModuleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"lowLevelRevertData\",\"type\":\"bytes\"}],\"name\":\"ExitedAndStuckValidatorsCountsUpdateFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"stakingModuleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"lowLevelRevertData\",\"type\":\"bytes\"}],\"name\":\"RewardsMintedReportFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"stakingModuleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"stakingModule\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"createdBy\",\"type\":\"address\"}],\"name\":\"StakingModuleAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"stakingModuleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unreportedExitedValidatorsCount\",\"type\":\"uint256\"}],\"name\":\"StakingModuleExitedValidatorsIncompleteReporting\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"stakingModuleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakingModuleFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"setBy\",\"type\":\"address\"}],\"name\":\"StakingModuleFeesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"stakingModuleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enumStakingRouter.StakingModuleStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"setBy\",\"type\":\"address\"}],\"name\":\"StakingModuleStatusSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"stakingModuleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"targetShare\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"setBy\",\"type\":\"address\"}],\"name\":\"StakingModuleTargetShareSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"stakingModuleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"StakingRouterETHDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawalCredentials\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"setBy\",\"type\":\"address\"}],\"name\":\"WithdrawalCredentialsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"stakingModuleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"lowLevelRevertData\",\"type\":\"bytes\"}],\"name\":\"WithdrawalsCredentialsChangeFailed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEPOSIT_CONTRACT\",\"outputs\":[{\"internalType\":\"contractIDepositContract\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_PRECISION_POINTS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MANAGE_WITHDRAWAL_CREDENTIALS_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_STAKING_MODULES_COUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_STAKING_MODULE_NAME_LENGTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REPORT_EXITED_VALIDATORS_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REPORT_REWARDS_MINTED_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_MODULE_MANAGE_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_MODULE_PAUSE_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_MODULE_RESUME_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOTAL_BASIS_POINTS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNSAFE_SET_EXITED_VALIDATORS_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_stakingModuleAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_targetShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_stakingModuleFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_treasuryFee\",\"type\":\"uint256\"}],\"name\":\"addStakingModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_depositsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_depositCalldata\",\"type\":\"bytes\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"}],\"name\":\"getAllNodeOperatorDigests\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isTargetLimitActive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"targetValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stuckValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"refundedValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stuckPenaltyEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalExitedValidators\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDepositedValidators\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositableValidatorsCount\",\"type\":\"uint256\"}],\"internalType\":\"structStakingRouter.NodeOperatorSummary\",\"name\":\"summary\",\"type\":\"tuple\"}],\"internalType\":\"structStakingRouter.NodeOperatorDigest[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllStakingModuleDigests\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nodeOperatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"activeNodeOperatorsCount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint24\",\"name\":\"id\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"stakingModuleAddress\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"stakingModuleFee\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"treasuryFee\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"targetShare\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"lastDepositAt\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"lastDepositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exitedValidatorsCount\",\"type\":\"uint256\"}],\"internalType\":\"structStakingRouter.StakingModule\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalExitedValidators\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDepositedValidators\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositableValidatorsCount\",\"type\":\"uint256\"}],\"internalType\":\"structStakingRouter.StakingModuleSummary\",\"name\":\"summary\",\"type\":\"tuple\"}],\"internalType\":\"structStakingRouter.StakingModuleDigest[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getContractVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_depositsCount\",\"type\":\"uint256\"}],\"name\":\"getDepositsAllocation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"allocated\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"allocations\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLido\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_nodeOperatorIds\",\"type\":\"uint256[]\"}],\"name\":\"getNodeOperatorDigests\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isTargetLimitActive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"targetValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stuckValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"refundedValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stuckPenaltyEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalExitedValidators\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDepositedValidators\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositableValidatorsCount\",\"type\":\"uint256\"}],\"internalType\":\"structStakingRouter.NodeOperatorSummary\",\"name\":\"summary\",\"type\":\"tuple\"}],\"internalType\":\"structStakingRouter.NodeOperatorDigest[]\",\"name\":\"digests\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_limit\",\"type\":\"uint256\"}],\"name\":\"getNodeOperatorDigests\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isTargetLimitActive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"targetValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stuckValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"refundedValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stuckPenaltyEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalExitedValidators\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDepositedValidators\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositableValidatorsCount\",\"type\":\"uint256\"}],\"internalType\":\"structStakingRouter.NodeOperatorSummary\",\"name\":\"summary\",\"type\":\"tuple\"}],\"internalType\":\"structStakingRouter.NodeOperatorDigest[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nodeOperatorId\",\"type\":\"uint256\"}],\"name\":\"getNodeOperatorSummary\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isTargetLimitActive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"targetValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stuckValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"refundedValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stuckPenaltyEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalExitedValidators\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDepositedValidators\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositableValidatorsCount\",\"type\":\"uint256\"}],\"internalType\":\"structStakingRouter.NodeOperatorSummary\",\"name\":\"summary\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakingFeeAggregateDistribution\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"modulesFee\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"treasuryFee\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"basePrecision\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakingFeeAggregateDistributionE4Precision\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"modulesFee\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"treasuryFee\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"}],\"name\":\"getStakingModule\",\"outputs\":[{\"components\":[{\"internalType\":\"uint24\",\"name\":\"id\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"stakingModuleAddress\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"stakingModuleFee\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"treasuryFee\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"targetShare\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"lastDepositAt\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"lastDepositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exitedValidatorsCount\",\"type\":\"uint256\"}],\"internalType\":\"structStakingRouter.StakingModule\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"}],\"name\":\"getStakingModuleActiveValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activeValidatorsCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_stakingModuleIds\",\"type\":\"uint256[]\"}],\"name\":\"getStakingModuleDigests\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nodeOperatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"activeNodeOperatorsCount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint24\",\"name\":\"id\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"stakingModuleAddress\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"stakingModuleFee\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"treasuryFee\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"targetShare\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"lastDepositAt\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"lastDepositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exitedValidatorsCount\",\"type\":\"uint256\"}],\"internalType\":\"structStakingRouter.StakingModule\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalExitedValidators\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDepositedValidators\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositableValidatorsCount\",\"type\":\"uint256\"}],\"internalType\":\"structStakingRouter.StakingModuleSummary\",\"name\":\"summary\",\"type\":\"tuple\"}],\"internalType\":\"structStakingRouter.StakingModuleDigest[]\",\"name\":\"digests\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakingModuleIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"stakingModuleIds\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"}],\"name\":\"getStakingModuleIsActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"}],\"name\":\"getStakingModuleIsDepositsPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"}],\"name\":\"getStakingModuleIsStopped\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"}],\"name\":\"getStakingModuleLastDepositBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxDepositsValue\",\"type\":\"uint256\"}],\"name\":\"getStakingModuleMaxDepositsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"}],\"name\":\"getStakingModuleNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"}],\"name\":\"getStakingModuleStatus\",\"outputs\":[{\"internalType\":\"enumStakingRouter.StakingModuleStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"}],\"name\":\"getStakingModuleSummary\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalExitedValidators\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDepositedValidators\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositableValidatorsCount\",\"type\":\"uint256\"}],\"internalType\":\"structStakingRouter.StakingModuleSummary\",\"name\":\"summary\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakingModules\",\"outputs\":[{\"components\":[{\"internalType\":\"uint24\",\"name\":\"id\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"stakingModuleAddress\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"stakingModuleFee\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"treasuryFee\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"targetShare\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"lastDepositAt\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"lastDepositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exitedValidatorsCount\",\"type\":\"uint256\"}],\"internalType\":\"structStakingRouter.StakingModule[]\",\"name\":\"res\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakingModulesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakingRewardsDistribution\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"stakingModuleIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint96[]\",\"name\":\"stakingModuleFees\",\"type\":\"uint96[]\"},{\"internalType\":\"uint96\",\"name\":\"totalFee\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"precisionPoints\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalFeeE4Precision\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"totalFee\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawalCredentials\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"}],\"name\":\"hasStakingModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lido\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_withdrawalCredentials\",\"type\":\"bytes32\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onValidatorsCountsByNodeOperatorReportingFinished\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"}],\"name\":\"pauseStakingModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_stakingModuleIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_totalShares\",\"type\":\"uint256[]\"}],\"name\":\"reportRewardsMinted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_nodeOperatorIds\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_exitedValidatorsCounts\",\"type\":\"bytes\"}],\"name\":\"reportStakingModuleExitedValidatorsCountByNodeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_nodeOperatorIds\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_stuckValidatorsCounts\",\"type\":\"bytes\"}],\"name\":\"reportStakingModuleStuckValidatorsCountByNodeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"}],\"name\":\"resumeStakingModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"},{\"internalType\":\"enumStakingRouter.StakingModuleStatus\",\"name\":\"_status\",\"type\":\"uint8\"}],\"name\":\"setStakingModuleStatus\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_withdrawalCredentials\",\"type\":\"bytes32\"}],\"name\":\"setWithdrawalCredentials\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nodeOperatorId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_triggerUpdateFinish\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"currentModuleExitedValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentNodeOperatorExitedValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentNodeOperatorStuckValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newModuleExitedValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newNodeOperatorExitedValidatorsCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newNodeOperatorStuckValidatorsCount\",\"type\":\"uint256\"}],\"internalType\":\"structStakingRouter.ValidatorsCountsCorrection\",\"name\":\"_correction\",\"type\":\"tuple\"}],\"name\":\"unsafeSetExitedValidatorsCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_stakingModuleIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_exitedValidatorsCounts\",\"type\":\"uint256[]\"}],\"name\":\"updateExitedValidatorsCountByStakingModule\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nodeOperatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_refundedValidatorsCount\",\"type\":\"uint256\"}],\"name\":\"updateRefundedValidatorsCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_targetShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_stakingModuleFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_treasuryFee\",\"type\":\"uint256\"}],\"name\":\"updateStakingModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_stakingModuleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nodeOperatorId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isTargetLimitActive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_targetLimit\",\"type\":\"uint256\"}],\"name\":\"updateTargetValidatorsLimits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a06040523480156200001157600080fd5b5060405162006098380380620060988339810160408190526200003491620000ae565b806001600160a01b0381166200005d57604051637c5f8bcf60e11b815260040160405180910390fd5b6001600160a01b0316608052620000a37f4dd0f6662ba1d6b081f08b350f5e9a6a7b15cf586926ba66f753594928fa64a6600019620000aa602090811b6200374a17901c565b50620000e0565b9055565b600060208284031215620000c157600080fd5b81516001600160a01b0381168114620000d957600080fd5b9392505050565b608051615f9562000103600039600081816107540152613d220152615f956000f3fe6080604052600436106103d25760003560e01c80639010d07c116101fd578063c82b1bb111610118578063e016e6f7116100ab578063efcdcc0e1161007a578063efcdcc0e14610c4a578063f07ff28a14610c7a578063f2aebb6514610c9a578063f8bb6d4214610cbc578063fa5093eb14610cdc57600080fd5b8063e016e6f714610bc8578063e1b92a5c14610bea578063e24ce9f114610c0a578063e97ee8cc14610c2a57600080fd5b8063d0a2b1b8116100e7578063d0a2b1b814610b53578063d547741f14610b73578063d861c58414610b93578063db3c7ba714610bb357600080fd5b8063c82b1bb114610ac5578063c8ac498014610af3578063ca15c87314610b13578063cb589b9a14610b3357600080fd5b8063a7357c8c11610190578063af1240971161015f578063af12409714610a30578063ba21ccae14610a50578063bc1bb19014610a76578063c445ea7514610aa357600080fd5b8063a7357c8c1461099d578063aa0b7db7146109d0578063aa5a1b9d146109e3578063abd44a2414610a1057600080fd5b80639fbb7bae116101cc5780639fbb7bae146108e55780639fc5a6ed1461090d578063a217fddf1461093a578063a734329c1461094f57600080fd5b80639010d07c1461087057806391d148541461089057806396b5d81c146108b05780639b75b4ef146108d057600080fd5b806356396715116102ed5780636b96736b116102805780638525e3a11161024f5780638525e3a1146107e75780638801da79146108075780638aa104351461083b5780638dc70c571461085057600080fd5b80636b96736b146107425780637443f523146107765780637a74884d146107965780637c8da51c146107ca57600080fd5b80636183214d116102bc5780636183214d146106b35780636608b11b146106d55780636a516b47146106f55780636ada55b91461072257600080fd5b8063563967151461063c57806357993b85146106515780635bf55e40146106735780636133f9851461069357600080fd5b8063271662ec116103655780633e54ee5b116103345780633e54ee5b146105d2578063473e0433146105f25780634a7583b6146106125780634b3a1cb71461062757600080fd5b8063271662ec1461054f5780632f2ff15d146105655780633240a3221461058557806336568abe146105b257600080fd5b80631565d2f2116103a15780631565d2f2146104a757806319c64b79146104db5780631d1b9d3c146104fb578063248a9ca31461052f57600080fd5b806301ffc9a7146103f55780630519fbbf1461042a578063072859c71461045857806307e203ac1461047a57600080fd5b366103f0576040516309fb455960e41b815260040160405180910390fd5b600080fd5b34801561040157600080fd5b50610415610410366004614e4f565b610d17565b60405190151581526020015b60405180910390f35b34801561043657600080fd5b5061044a610445366004614e79565b610d42565b604051908152602001610421565b34801561046457600080fd5b50610478610473366004614f0e565b610dbd565b005b34801561048657600080fd5b5061049a610495366004614e79565b610fcc565b6040516104219190614fa3565b3480156104b357600080fd5b5061044a7f55180e25fcacf9af017d35d497765476319b23896daa1f9bc2b38fa80b36a16381565b3480156104e757600080fd5b5061044a6104f6366004614fc4565b61108b565b34801561050757600080fd5b5061044a7f779e5c23cb7a5bcb9bfe1e9a5165a00057f12bcdfd13e374540fdf1a1cd9113781565b34801561053b57600080fd5b5061044a61054a366004614e79565b611108565b34801561055b57600080fd5b5061044a61271081565b34801561057157600080fd5b50610478610580366004615002565b61112a565b34801561059157600080fd5b506105a56105a0366004614e79565b61114c565b604051610421919061507e565b3480156105be57600080fd5b506104786105cd366004615002565b6111e4565b3480156105de57600080fd5b506104786105ed36600461512c565b611262565b3480156105fe57600080fd5b5061044a61060d366004614e79565b611685565b34801561061e57600080fd5b5061044a61169c565b34801561063357600080fd5b5061044a602081565b34801561064857600080fd5b5061044a6116cb565b34801561065d57600080fd5b506106666116f5565b60405161042191906152c6565b34801561067f57600080fd5b5061047861068e366004614e79565b611702565b34801561069f57600080fd5b506104786106ae36600461536b565b611792565b3480156106bf57600080fd5b506106c86118b6565b60405161042191906153a7565b3480156106e157600080fd5b506104156106f0366004614e79565b611a85565b34801561070157600080fd5b5061070a611aaa565b6040516001600160a01b039091168152602001610421565b34801561072e57600080fd5b5061041561073d366004614e79565b611ad4565b34801561074e57600080fd5b5061070a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561078257600080fd5b50610478610791366004615409565b611add565b3480156107a257600080fd5b5061044a7fe7c742a54cd11fc9749a47ab34bdcd7327820908e8d0d48b4a5c7f17b029409881565b3480156107d657600080fd5b5061044a68056bc75e2d6310000081565b3480156107f357600080fd5b506106666108023660046154cb565b611b7d565b34801561081357600080fd5b5061044a7f9a2f67efb89489040f2c48c3b2c38f719fba1276678d2ced3bd9049fb5edc6b281565b34801561084757600080fd5b5061044a611d67565b34801561085c57600080fd5b5061047861086b3660046154ff565b611d91565b34801561087c57600080fd5b5061070a61088b366004614fc4565b611f22565b34801561089c57600080fd5b506104156108ab366004615002565b611f4e565b3480156108bc57600080fd5b5061044a6108cb366004614e79565b611f86565b3480156108dc57600080fd5b5061044a601f81565b3480156108f157600080fd5b506108fa612045565b60405161ffff9091168152602001610421565b34801561091957600080fd5b5061092d610928366004614e79565b612073565b6040516104219190615569565b34801561094657600080fd5b5061044a600081565b34801561095b57600080fd5b5061041561096a366004614e79565b60009081527f9b48f5b32acb95b982effe269feac267eead113c4b5af14ffeb9aadac18a6e9c6020526040902054151590565b3480156109a957600080fd5b5061044a7eb1e70095ba5bacc3202c3db9faf1f7873186f0ed7b6c84e80c0018dcc6e38e81565b6104786109de366004615577565b61209a565b3480156109ef57600080fd5b50610a036109fe366004614fc4565b612300565b60405161042191906155c9565b348015610a1c57600080fd5b5061044a610a2b36600461561c565b61241f565b348015610a3c57600080fd5b50610478610a4b36600461561c565b612679565b348015610a5c57600080fd5b50610a6561284f565b6040516104219594939291906156b6565b348015610a8257600080fd5b50610a96610a91366004614e79565b612bca565b6040516104219190615775565b348015610aaf57600080fd5b5061044a600080516020615f2083398151915281565b348015610ad157600080fd5b50610ae5610ae0366004614e79565b612d0e565b604051610421929190615788565b348015610aff57600080fd5b50610478610b0e3660046157a1565b612d26565b348015610b1f57600080fd5b5061044a610b2e366004614e79565b612dc9565b348015610b3f57600080fd5b50610478610b4e3660046157a1565b612ded565b348015610b5f57600080fd5b50610478610b6e36600461581a565b612e61565b348015610b7f57600080fd5b50610478610b8e366004615002565b612ef6565b348015610b9f57600080fd5b50610478610bae366004614e79565b612f13565b348015610bbf57600080fd5b50610478612fa4565b348015610bd457600080fd5b5061044a600080516020615f4083398151915281565b348015610bf657600080fd5b50610478610c0536600461584e565b613171565b348015610c1657600080fd5b50610415610c25366004614e79565b6131fd565b348015610c3657600080fd5b50610478610c45366004614e79565b613206565b348015610c5657600080fd5b50610c5f6133c5565b6040805161ffff938416815292909116602083015201610421565b348015610c8657600080fd5b506105a5610c9536600461587a565b61340c565b348015610ca657600080fd5b50610caf6135a0565b60405161042191906158c0565b348015610cc857600080fd5b506105a5610cd736600461584e565b613636565b348015610ce857600080fd5b50610cf16136d8565b604080516001600160601b03948516815293909216602084015290820152606001610421565b60006001600160e01b03198216635a05180f60e01b1480610d3c5750610d3c8261374e565b92915050565b6000610d4d82613783565b6001600160a01b031663d087d2886040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8557600080fd5b505afa158015610d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c91906158d3565b7f55180e25fcacf9af017d35d497765476319b23896daa1f9bc2b38fa80b36a163610de881336137a5565b6000610df386613809565b8054604051632cc1db0f60e21b815260048101889052919250630100000090046001600160a01b0316906000908190839063b3076c3c906024016101006040518083038186803b158015610e4657600080fd5b505afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e91906158ec565b5050955050509350505083600401548660000151141580610ea3575080866020015114155b80610eb2575081866040015114155b15610ee95760048481015460405163e882688560e01b81529182015260248101829052604481018390526064015b60405180910390fd5b6060860151600480860191909155608087015160a088015160405163f2e2ca6360e01b81529283018b9052602483019190915260448201526001600160a01b0384169063f2e2ca6390606401600060405180830381600087803b158015610f4f57600080fd5b505af1158015610f63573d6000803e3d6000fd5b505050508615610fc157826001600160a01b031663e864299e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fa857600080fd5b505af1158015610fbc573d6000803e3d6000fd5b505050505b505050505050505050565b610ff060405180606001604052806000815260200160008152602001600081525090565b6000610ffb83612bca565b9050600081602001519050806001600160a01b0316639abddf096040518163ffffffff1660e01b815260040160606040518083038186803b15801561103f57600080fd5b505afa158015611053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110779190615956565b604086015260208501528352509092915050565b600080806110aa6110a56801bc16d674ec800000866159b0565b61381c565b925092505060006110ba866139e1565b90508181815181106110ce576110ce6159c4565b602002602001015160c001518382815181106110ec576110ec6159c4565b60200260200101516110fe91906159da565b9695505050505050565b6000908152600080516020615f00833981519152602052604090206001015490565b61113382611108565b61113d81336137a5565b6111478383613a3a565b505050565b6060600061115983613783565b90506000816001600160a01b031663a70c70e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561119657600080fd5b505afa1580156111aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ce91906158d3565b90506111dc84600083613636565b949350505050565b6001600160a01b03811633146112545760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ee0565b61125e8282613a69565b5050565b600080516020615f4083398151915261127b81336137a5565b6127108411156112bd57604051630cb4392560e31b815260206004820152600c60248201526b5f746172676574536861726560a01b6044820152606401610ee0565b6127106112ca83856159f1565b111561131957604051630cb4392560e31b815260206004820181905260248201527f5f7374616b696e674d6f64756c65466565202b205f74726561737572794665656044820152606401610ee0565b6001600160a01b0385166113685760405163eac0d38960e01b81526020600482015260156024820152745f7374616b696e674d6f64756c654164647265737360581b6044820152606401610ee0565b8515806113755750601f86115b156113935760405163ac18716960e01b815260040160405180910390fd5b600061139d61169c565b9050602081106113c05760405163309eed9960e01b815260040160405180910390fd5b60005b81811015611410576113d481613a98565b546001600160a01b0388811663010000009092041614156114085760405163050f969d60e41b815260040160405180910390fd5b6001016113c3565b50600061141c82613a98565b905060006114487ff9a85ae945d8134f58bd2ee028636634dcb9e812798acb5c806bf1951232a2255490565b611453906001615a09565b825462ffffff191662ffffff82161783559050611474600183018b8b614c69565b508154630100000065ffff0000000160b81b03191663010000006001600160a01b038a160261ffff60d81b191617600160d81b61ffff898116919091029190911763ffffffff60b81b1916600160b81b8883160261ffff60c81b191617600160c81b918716919091021760ff60e81b1916825560028201805467ffffffffffffffff1916426001600160401b03161790554360038301556040805160008152905162ffffff8316917f9151b7f88aca05d432bb395647ef52b2ffc454e3c6afb69c95345af6b5a778c0919081900360200190a26115568162ffffff1684613ac8565b62ffffff81167ff9a85ae945d8134f58bd2ee028636634dcb9e812798acb5c806bf1951232a225556115b061158c8460016159f1565b7f1b3ef9db2d6f0727a31622833b45264c21051726d23ddb6f73b3b65628cafcc355565b8062ffffff167f43b5213f0e1666cd0b8692a73686164c94deb955a59c65e10dee8bb958e7ce3e898c8c336040516115eb9493929190615a59565b60405180910390a26040805188815233602082015262ffffff8316917f065e5bd8e4145dd99cf69bad5871ad52d094aee07a67fcf2f418c89e49d5f20c910160405180910390a260408051878152602081018790523381830152905162ffffff8316917f303c8ac43d1b1f9b898ddd2915a294efa01e9b07c322d7deeb7db332b66f0410919081900360600190a250505050505050505050565b60008061169183613809565b600301549392505050565b60006116c67f1b3ef9db2d6f0727a31622833b45264c21051726d23ddb6f73b3b65628cafcc35490565b905090565b60006116c67fabeb05279af36da5d476d7f950157cd2ea98a4166fa68a6bc97ce3a22fbb93c05490565b60606116c66108026135a0565b7eb1e70095ba5bacc3202c3db9faf1f7873186f0ed7b6c84e80c0018dcc6e38e61172c81336137a5565b600061173783613809565b905060008154600160e81b900460ff16600281111561175857611758615531565b600281111561176957611769615531565b146117875760405163322e64fb60e11b815260040160405180910390fd5b611147816001613b0b565b6001600160a01b0383166117d25760405163eac0d38960e01b81526020600482015260066024820152652fb0b236b4b760d11b6044820152606401610ee0565b6001600160a01b0382166118115760405163eac0d38960e01b81526020600482015260056024820152645f6c69646f60d81b6044820152606401610ee0565b61181b6001613bce565b611826600084613c00565b61184f7f706b9ed9846c161ad535be9b6345c3a7b2cb929e8d4a7254dee9ba6e6f8e5531839055565b6118787fabeb05279af36da5d476d7f950157cd2ea98a4166fa68a6bc97ce3a22fbb93c0829055565b604080518281523360208201527f82e72df77173eab89b00556d791a407a78f4605c5c2f0694967c8c429dd43c7c91015b60405180910390a1505050565b606060006118c261169c565b9050806001600160401b038111156118dc576118dc614ea0565b60405190808252806020026020018201604052801561191557816020015b611902614ced565b8152602001906001900390816118fa5790505b50915060005b81811015611a805761192c81613a98565b6040805161014081018252825462ffffff81168252630100000081046001600160a01b03166020830152600160b81b810461ffff90811693830193909352600160c81b810483166060830152600160d81b81049092166080820152600160e81b90910460ff1660a082015260018201805491929160c0840191906119af90615a90565b80601f01602080910402602001604051908101604052809291908181526020018280546119db90615a90565b8015611a285780601f106119fd57610100808354040283529160200191611a28565b820191906000526020600020905b815481529060010190602001808311611a0b57829003601f168201915b505050918352505060028201546001600160401b03166020820152600382015460408201526004909101546060909101528351849083908110611a6d57611a6d6159c4565b602090810291909101015260010161191b565b505090565b6000805b611a9283612073565b6002811115611aa357611aa3615531565b1492915050565b60006116c67f706b9ed9846c161ad535be9b6345c3a7b2cb929e8d4a7254dee9ba6e6f8e55315490565b60006002611a89565b600080516020615f40833981519152611af681336137a5565b6000611b0186613809565b546040516354f3d42360e11b81526004810187905285151560248201526044810185905263010000009091046001600160a01b03169150819063a9e7a84690606401600060405180830381600087803b158015611b5d57600080fd5b505af1158015611b71573d6000803e3d6000fd5b50505050505050505050565b606081516001600160401b03811115611b9857611b98614ea0565b604051908082528060200260200182016040528015611bd157816020015b611bbe614d40565b815260200190600190039081611bb65790505b50905060005b8251811015611d61576000611c04848381518110611bf757611bf76159c4565b6020026020010151612bca565b90506000816020015190506040518060800160405280826001600160a01b031663a70c70e46040518163ffffffff1660e01b815260040160206040518083038186803b158015611c5357600080fd5b505afa158015611c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8b91906158d3565b8152602001826001600160a01b0316638469cbd36040518163ffffffff1660e01b815260040160206040518083038186803b158015611cc957600080fd5b505afa158015611cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0191906158d3565b8152602001838152602001611d2e878681518110611d2157611d216159c4565b6020026020010151610fcc565b815250848481518110611d4357611d436159c4565b6020026020010181905250505080611d5a90615ac5565b9050611bd7565b50919050565b60006116c67f4dd0f6662ba1d6b081f08b350f5e9a6a7b15cf586926ba66f753594928fa64a65490565b600080516020615f40833981519152611daa81336137a5565b612710841115611dec57604051630cb4392560e31b815260206004820152600c60248201526b5f746172676574536861726560a01b6044820152606401610ee0565b612710611df983856159f1565b1115611e4857604051630cb4392560e31b815260206004820181905260248201527f5f7374616b696e674d6f64756c65466565202b205f74726561737572794665656044820152606401610ee0565b6000611e5386613809565b805463ffffffff60c81b1916600160d81b61ffff8881169190910261ffff60c81b191691909117600160c81b868316021761ffff60b81b1916600160b81b918716919091021781556040805187815233602082015291925087917f065e5bd8e4145dd99cf69bad5871ad52d094aee07a67fcf2f418c89e49d5f20c910160405180910390a260408051858152602081018590523381830152905187917f303c8ac43d1b1f9b898ddd2915a294efa01e9b07c322d7deeb7db332b66f0410919081900360600190a2505050505050565b6000828152600080516020615ee083398151915260205260408120611f479083613c0a565b9392505050565b6000918252600080516020615f00833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080611f9283613809565b90506000808260000160039054906101000a90046001600160a01b03166001600160a01b0316639abddf096040518163ffffffff1660e01b815260040160606040518083038186803b158015611fe757600080fd5b505afa158015611ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201f9190615956565b5091509150612032836004015483613c16565b61203c90826159da565b95945050505050565b600080600061205261284f565b9450945050505061206c826001600160601b031682613c2c565b9250505090565b600061207e82613809565b54600160e81b900460ff166002811115610d3c57610d3c615531565b7f706b9ed9846c161ad535be9b6345c3a7b2cb929e8d4a7254dee9ba6e6f8e5531546001600160a01b0316336001600160a01b0316146120ed57604051637e71782360e01b815260040160405180910390fd5b60006120f76116cb565b9050806121175760405163180a97cd60e21b815260040160405180910390fd5b600061212285613809565b905060008154600160e81b900460ff16600281111561214357612143615531565b600281111561215457612154615531565b146121725760405163322e64fb60e11b815260040160405180910390fd5b60028101805467ffffffffffffffff1916426001600160401b0316179055436003820155604051348082529086907f9151b7f88aca05d432bb395647ef52b2ffc454e3c6afb69c95345af6b5a778c09060200160405180910390a26121e06801bc16d674ec80000088615ae0565b81146122095760405163023db95b60e21b81526004810182905260248101889052604401610ee0565b86156122f75781546040516317dc836b60e31b8152600091829163010000009091046001600160a01b03169063bee41b589061224d908c908b908b90600401615aff565b600060405180830381600087803b15801561226757600080fd5b505af115801561227b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122a39190810190615b7c565b9150915060004790506122d98a876040516020016122c391815260200190565b6040516020818303038152906040528585613c45565b47846122e582846159da565b146122f2576122f2615bd5565b505050505b50505050505050565b612308614d8f565b600061231384612bca565b9050600081602001519050600080600080600080600080886001600160a01b031663b3076c3c8d6040518263ffffffff1660e01b815260040161235891815260200190565b6101006040518083038186803b15801561237157600080fd5b505afa158015612385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a991906158ec565b97509750975097509750975097509750878b6000019015159081151581525050868b6020018181525050858b6040018181525050848b6060018181525050838b6080018181525050828b60a0018181525050818b60c0018181525050808b60e00181815250505050505050505050505092915050565b6000600080516020615f2083398151915261243a81336137a5565b8483146124645760405163098b37e560e31b81526004810186905260248101849052604401610ee0565b6000805b8681101561266e576000888883818110612484576124846159c4565b905060200201359050600061249882613809565b6004810154909150808989868181106124b3576124b36159c4565b9050602002013510156124d957604051632f789f4960e21b815260040160405180910390fd5b6000808360000160039054906101000a90046001600160a01b03166001600160a01b0316639abddf096040518163ffffffff1660e01b815260040160606040518083038186803b15801561252c57600080fd5b505afa158015612540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125649190615956565b5091509150808b8b8881811061257c5761257c6159c4565b9050602002013511156125c7578a8a8781811061259b5761259b6159c4565b9050602002013581604051630b72c59d60e21b8152600401610ee0929190918252602082015260400190565b828b8b888181106125da576125da6159c4565b905060200201356125eb91906159da565b6125f590886159f1565b96508282101561263d57847fdd2523ca96a639ba7e17420698937f71eddd8af012ccb36ff5c8fe96141acae961262b84866159da565b60405190815260200160405180910390a25b8a8a8781811061264f5761264f6159c4565b9050602002013584600401819055508560010195505050505050612468565b509695505050505050565b7f779e5c23cb7a5bcb9bfe1e9a5165a00057f12bcdfd13e374540fdf1a1cd911376126a481336137a5565b8382146126ce5760405163098b37e560e31b81526004810185905260248101839052604401610ee0565b60005b848110156128475760008484838181106126ed576126ed6159c4565b90506020020135111561283f57600061271d878784818110612711576127116159c4565b90506020020135613809565b54630100000090046001600160a01b0316905080638d7e4017868685818110612748576127486159c4565b905060200201356040518263ffffffff1660e01b815260040161276d91815260200190565b600060405180830381600087803b15801561278757600080fd5b505af1925050508015612798575060015b61283d573d8080156127c6576040519150601f19603f3d011682016040523d82523d6000602084013e6127cb565b606091505b5080516127eb57604051638fd297d960e01b815260040160405180910390fd5b8787848181106127fd576127fd6159c4565b905060200201357ff74208fedac7280fd11f8de0be14e00423dc5076da8e8ec8ca90e09257fff1b3826040516128339190615beb565b60405180910390a2505b505b6001016126d1565b505050505050565b6060806060600080600080612862613dc3565b80519193509150801580612874575082155b156128b65750506040805160008082526020820181815282840182815260608401909452919850909650909450925068056bc75e2d631000009150612bc39050565b68056bc75e2d631000009350806001600160401b038111156128da576128da614ea0565b604051908082528060200260200182016040528015612903578160200160208202803683370190505b509650806001600160401b0381111561291e5761291e614ea0565b604051908082528060200260200182016040528015612947578160200160208202803683370190505b509750806001600160401b0381111561296257612962614ea0565b60405190808252806020026020018201604052801561298b578160200160208202803683370190505b5095506000808060005b84811015612b905760008682815181106129b1576129b16159c4565b602002602001015160c001511115612b88578581815181106129d5576129d56159c4565b60200260200101516020015162ffffff168b85815181106129f8576129f86159c4565b6020026020010181815250508688878381518110612a1857612a186159c4565b602002602001015160c00151612a2e9190615ae0565b612a3891906159b0565b9250858181518110612a4c57612a4c6159c4565b6020026020010151600001518c8581518110612a6a57612a6a6159c4565b60200260200101906001600160a01b031690816001600160a01b031681525050612710868281518110612a9f57612a9f6159c4565b60200260200101516040015161ffff1684612aba9190615ae0565b612ac491906159b0565b91506002868281518110612ada57612ada6159c4565b602002602001015160a001516002811115612af757612af7615531565b14612b3057818a8581518110612b0f57612b0f6159c4565b60200260200101906001600160601b031690816001600160601b0316815250505b81612710878381518110612b4657612b466159c4565b60200260200101516060015161ffff1685612b619190615ae0565b612b6b91906159b0565b612b759190615bfe565b612b7f908a615bfe565b98506001909301925b600101612995565b5086886001600160601b03161115612baa57612baa615bd5565b83831015612bbc57828a52828b528289525b5050505050505b9091929394565b612bd2614ced565b612bdb82613809565b6040805161014081018252825462ffffff81168252630100000081046001600160a01b03166020830152600160b81b810461ffff90811693830193909352600160c81b810483166060830152600160d81b81049092166080820152600160e81b90910460ff1660a082015260018201805491929160c084019190612c5e90615a90565b80601f0160208091040260200160405190810160405280929190818152602001828054612c8a90615a90565b8015612cd75780601f10612cac57610100808354040283529160200191612cd7565b820191906000526020600020905b815481529060010190602001808311612cba57829003601f168201915b505050918352505060028201546001600160401b031660208201526003820154604082015260049091015460609091015292915050565b60006060612d1b8361381c565b509094909350915050565b600080516020615f20833981519152612d3f81336137a5565b6000612d4a87613809565b54630100000090046001600160a01b03169050612d6986868686613e91565b604051634d8060a360e11b81526001600160a01b03821690639b00c14690612d9b908990899089908990600401615c20565b600060405180830381600087803b158015612db557600080fd5b505af11580156122f2573d6000803e3d6000fd5b6000818152600080516020615ee083398151915260205260408120610d3c90613f37565b600080516020615f20833981519152612e0681336137a5565b6000612e1187613809565b54630100000090046001600160a01b03169050612e3086868686613e91565b604051629b3d1960e81b81526001600160a01b03821690639b3d190090612d9b908990899089908990600401615c20565b600080516020615f40833981519152612e7a81336137a5565b6000612e8584613809565b9050826002811115612e9957612e99615531565b8154600160e81b900460ff166002811115612eb657612eb6615531565b6002811115612ec757612ec7615531565b1415612ee657604051635ca16fa760e11b815260040160405180910390fd5b612ef08184613b0b565b50505050565b612eff82611108565b612f0981336137a5565b6111478383613a69565b7f9a2f67efb89489040f2c48c3b2c38f719fba1276678d2ced3bd9049fb5edc6b2612f3e81336137a5565b6000612f4983613809565b905060018154600160e81b900460ff166002811115612f6a57612f6a615531565b6002811115612f7b57612f7b615531565b14612f99576040516316c1da1560e21b815260040160405180910390fd5b611147816000613b0b565b600080516020615f20833981519152612fbd81336137a5565b6000612fc761169c565b905060005b81811015611147576000612fdf82613a98565b905060008160000160039054906101000a90046001600160a01b031690506000816001600160a01b0316639abddf096040518163ffffffff1660e01b815260040160606040518083038186803b15801561303857600080fd5b505afa15801561304c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130709190615956565b50509050826004015481141561316357816001600160a01b031663e864299e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156130bb57600080fd5b505af19250505080156130cc575060015b613163573d8080156130fa576040519150601f19603f3d011682016040523d82523d6000602084013e6130ff565b606091505b50805161311f57604051638fd297d960e01b815260040160405180910390fd5b835460405162ffffff909116907fe74bf895f0c3a2d6c74c40cbb362fdd9640035fc4226c72e3843809ad2a9d2b590613159908490615beb565b60405180910390a2505b836001019350505050612fcc565b600080516020615f4083398151915261318a81336137a5565b600061319585613809565b5460405163a2e080f160e01b8152600481018690526024810185905263010000009091046001600160a01b03169150819063a2e080f190604401600060405180830381600087803b1580156131e957600080fd5b505af1158015610fc1573d6000803e3d6000fd5b60006001611a89565b7fe7c742a54cd11fc9749a47ab34bdcd7327820908e8d0d48b4a5c7f17b029409861323181336137a5565b61325a7fabeb05279af36da5d476d7f950157cd2ea98a4166fa68a6bc97ce3a22fbb93c0839055565b600061326461169c565b905060005b8181101561338f57600061327c82613a98565b90508160010191508060000160039054906101000a90046001600160a01b03166001600160a01b03166390c09bdb6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132d657600080fd5b505af19250505080156132e7575060015b613389573d808015613315576040519150601f19603f3d011682016040523d82523d6000602084013e61331a565b606091505b50805161333a57604051638fd297d960e01b815260040160405180910390fd5b613345826001613b0b565b815460405162ffffff909116907f0d64b11929aa111ca874dd00b5b0cc2d82b741be924ec9e3691e67c71552f6239061337f908490615beb565b60405180910390a2505b50613269565b50604080518481523360208201527f82e72df77173eab89b00556d791a407a78f4605c5c2f0694967c8c429dd43c7c91016118a9565b60008060008060006133d56136d8565b92506001600160601b031692506001600160601b031692506133f78382613c2c565b94506134038282613c2c565b93505050509091565b6060600061341984613783565b905082516001600160401b0381111561343457613434614ea0565b60405190808252806020026020018201604052801561346d57816020015b61345a614dd6565b8152602001906001900390816134525790505b50915060005b8351811015613598576040518060600160405280858381518110613499576134996159c4565b60200260200101518152602001836001600160a01b0316635e2fb9088785815181106134c7576134c76159c4565b60200260200101516040518263ffffffff1660e01b81526004016134ed91815260200190565b60206040518083038186803b15801561350557600080fd5b505afa158015613519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353d9190615c52565b151581526020016135678787858151811061355a5761355a6159c4565b6020026020010151612300565b81525083828151811061357c5761357c6159c4565b60200260200101819052508061359190615ac5565b9050613473565b505092915050565b606060006135ac61169c565b9050806001600160401b038111156135c6576135c6614ea0565b6040519080825280602002602001820160405280156135ef578160200160208202803683370190505b50915060005b81811015611a805761360681613a98565b54835162ffffff90911690849083908110613623576136236159c4565b60209081029190910101526001016135f5565b6060600061364385613783565b604051634febc81b60e01b815260048101869052602481018590529091506000906001600160a01b03831690634febc81b9060440160006040518083038186803b15801561369057600080fd5b505afa1580156136a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136cc9190810190615c6f565b90506110fe868261340c565b6000806000606060006136e961284f565b9650909450925060009150505b825181101561373657828181518110613711576137116159c4565b6020026020010151866137249190615bfe565b955061372f81615ac5565b90506136f6565b506137418582615cf4565b93505050909192565b9055565b60006001600160e01b03198216637965db0b60e01b1480610d3c57506301ffc9a760e01b6001600160e01b0319831614610d3c565b600061378e82613809565b54630100000090046001600160a01b031692915050565b6137af8282611f4e565b61125e576137c7816001600160a01b03166014613f41565b6137d2836020613f41565b6040516020016137e3929190615d1c565b60408051601f198184030181529082905262461bcd60e51b8252610ee091600401615beb565b6000610d3c613817836139e1565b613a98565b6000606080600061382b613dc3565b8051909350909150806001600160401b0381111561384b5761384b614ea0565b604051908082528060200260200182016040528015613874578160200160208202803683370190505b50935080156139d85761388786836159f1565b91506000816001600160401b038111156138a3576138a3614ea0565b6040519080825280602002602001820160405280156138cc578160200160208202803683370190505b5090506000805b838110156139c7578581815181106138ed576138ed6159c4565b602002602001015160c0015187828151811061390b5761390b6159c4565b6020026020010181815250506127108587838151811061392d5761392d6159c4565b60200260200101516080015161ffff166139479190615ae0565b61395191906159b0565b91506139a282878381518110613969576139696159c4565b602002602001015160e00151888481518110613987576139876159c4565b602002602001015160c0015161399d91906159f1565b6140dc565b8382815181106139b4576139b46159c4565b60209081029190910101526001016138d3565b506139d386838a6140eb565b965050505b50509193909250565b60008181527f9b48f5b32acb95b982effe269feac267eead113c4b5af14ffeb9aadac18a6e9c6020819052604082205480613a2f57604051636a0eb14160e11b815260040160405180910390fd5b6111dc6001826159da565b613a448282614130565b6000828152600080516020615ee08339815191526020526040902061114790826141a6565b613a7382826141bb565b6000828152600080516020615ee083398151915260205260409020611147908261422f565b60009081527f1d2f69fc9b5fe89d7414bf039e8d897c4c487c7603d80de6bcdd2868466f94766020526040902090565b7f9b48f5b32acb95b982effe269feac267eead113c4b5af14ffeb9aadac18a6e9c613af48260016159f1565b600093845260209190915260409092209190915550565b8154600090600160e81b900460ff166002811115613b2b57613b2b615531565b9050816002811115613b3f57613b3f615531565b816002811115613b5157613b51615531565b1461114757816002811115613b6857613b68615531565b835460ff91909116600160e81b0260ff60e81b1982168117855560405162ffffff9182169190921617907ffd6f15fb2b48a21a60fe3d44d3c3a0433ca01e121b5124a63ec45c30ad925a1790613bc19085903390615d91565b60405180910390a2505050565b613bd6611d67565b15613bf45760405163184e52a160e21b815260040160405180910390fd5b613bfd81614244565b50565b61125e8282613a3a565b6000611f4783836142a3565b6000818311613c255781611f47565b5090919050565b600081613c3b61271085615ae0565b611f4791906159b0565b613c50846030615ae0565b825114613c86578151613c64856030615ae0565b6040516346b38e7960e11b815260048101929092526024820152604401610ee0565b613c91846060615ae0565b815114613cc7578051613ca5856060615ae0565b604051633c11c1f760e21b815260048101929092526024820152604401610ee0565b6000613cd360306142cd565b90506000613ce160606142cd565b905060005b868110156122f757613d078584613cfe603085615ae0565b600060306142e6565b613d208483613d17606085615ae0565b600060606142e6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec800000858986613d678c8a8a61436d565b6040518663ffffffff1660e01b8152600401613d869493929190615db7565b6000604051808303818588803b158015613d9f57600080fd5b505af1158015613db3573d6000803e3d6000fd5b5050505050806001019050613ce6565b600060606000613dd161169c565b9050806001600160401b03811115613deb57613deb614ea0565b604051908082528060200260200182016040528015613e2457816020015b613e11614df5565b815260200190600190039081613e095790505b50915060005b81811015613e8b57613e3b816146e8565b838281518110613e4d57613e4d6159c4565b6020026020010181905250828181518110613e6a57613e6a6159c4565b602002602001015160c0015184613e8191906159f1565b9350600101613e2a565b50509091565b613e9c600884615e02565b151580613eb25750613eaf601082615e02565b15155b15613ed3576040516363209a7d60e11b815260036004820152602401610ee0565b6000613ee06008856159b0565b905080613eee6010846159b0565b14613f0f576040516363209a7d60e11b815260026004820152602401610ee0565b80613f30576040516363209a7d60e11b815260016004820152602401610ee0565b5050505050565b6000610d3c825490565b60606000613f50836002615ae0565b613f5b9060026159f1565b6001600160401b03811115613f7257613f72614ea0565b6040519080825280601f01601f191660200182016040528015613f9c576020820181803683370190505b509050600360fc1b81600081518110613fb757613fb76159c4565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613fe657613fe66159c4565b60200101906001600160f81b031916908160001a905350600061400a846002615ae0565b6140159060016159f1565b90505b600181111561408d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614049576140496159c4565b1a60f81b82828151811061405f5761405f6159c4565b60200101906001600160f81b031916908160001a90535060049490941c9361408681615e16565b9050614018565b508315611f475760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ee0565b6000818310613c255781611f47565b6000805b828210156141285761410b858561410685876159da565b614867565b90508061411757614128565b61412181836159f1565b91506140ef565b509392505050565b61413a8282611f4e565b61125e576000828152600080516020615f00833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611f47836001600160a01b038416614aa5565b6141c58282611f4e565b1561125e576000828152600080516020615f00833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611f47836001600160a01b038416614af4565b61426d7f4dd0f6662ba1d6b081f08b350f5e9a6a7b15cf586926ba66f753594928fa64a6829055565b6040518181527ffddcded6b4f4730c226821172046b48372d3cd963c159701ae1b7c3bcac541bb9060200160405180910390a150565b60008260000182815481106142ba576142ba6159c4565b9060005260206000200154905092915050565b60408051828152603f92810192909201601f1916905290565b84516142f282856159f1565b1115801561430a5750835161430782846159f1565b11155b6143565760405162461bcd60e51b815260206004820152601960248201527f42595445535f41525241595f4f55545f4f465f424f554e4453000000000000006044820152606401610ee0565b6020838601810190838601016122f7828285614be7565b60008061437a60406142cd565b9050600061439261438d604060606159da565b6142cd565b90506143a3848360008060406142e6565b6143bc8482604060006143b78260606159da565b6142e6565b6000600286600060801b6040516020016143d7929190615e2d565b60408051601f19818403018152908290526143f191615e65565b602060405180830381855afa15801561440e573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061443191906158d3565b90506000600280856040516020016144499190615e65565b60408051601f198184030181529082905261446391615e65565b602060405180830381855afa158015614480573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906144a391906158d3565b6040516002906144ba908790600090602001615e81565b60408051601f19818403018152908290526144d491615e65565b602060405180830381855afa1580156144f1573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061451491906158d3565b60408051602081019390935282015260600160408051601f198184030181529082905261454091615e65565b602060405180830381855afa15801561455d573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061458091906158d3565b9050600280838a604051602001614598929190615ea3565b60408051601f19818403018152908290526145b291615e65565b602060405180830381855afa1580156145cf573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906145f291906158d3565b60408051634059730760d81b60208201526000602882015290810184905260029060600160408051601f198184030181529082905261463091615e65565b602060405180830381855afa15801561464d573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061467091906158d3565b60408051602081019390935282015260600160408051601f198184030181529082905261469c91615e65565b602060405180830381855afa1580156146b9573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146dc91906158d3565b98975050505050505050565b6146f0614df5565b60006146fb83613a98565b80546001600160a01b036301000000820416845262ffffff8116602085015261ffff600160b81b820481166040860152600160c81b820481166060860152600160d81b820416608085015290915060ff600160e81b90910416600281111561476557614765615531565b8260a00190600281111561477b5761477b615531565b9081600281111561478e5761478e615531565b81525050600080600084600001516001600160a01b0316639abddf096040518163ffffffff1660e01b815260040160606040518083038186803b1580156147d457600080fd5b505afa1580156147e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061480c9190615956565b9194509250905060008560a00151600281111561482b5761482b615531565b14614837576000614839565b805b60e0860152600484015461484e908490613c16565b61485890836159da565b60c08601525092949350505050565b825160009060001982846148815760009350505050611f47565b60005b87518110156149535786818151811061489f5761489f6159c4565b60200260200101518882815181106148b9576148b96159c4565b6020026020010151106148cb57614943565b8781815181106148dd576148dd6159c4565b60200260200101518311156149145780935060019150878181518110614905576149056159c4565b60200260200101519250614943565b878181518110614926576149266159c4565b6020026020010151831415614943576149406001836159f1565b91505b61494c81615ac5565b9050614884565b50806149655760009350505050611f47565b60001960005b8851811015614a2457878181518110614986576149866159c4565b60200260200101518982815181106149a0576149a06159c4565b6020026020010151106149b257614a14565b838982815181106149c5576149c56159c4565b60200260200101511180156149f25750818982815181106149e8576149e86159c4565b6020026020010151105b15614a1457888181518110614a0957614a096159c4565b602002602001015191505b614a1d81615ac5565b905061496b565b50614a6e60018311614a365786614a40565b614a408784614c32565b84614a64848b8981518110614a5757614a576159c4565b60200260200101516140dc565b61399d91906159da565b945084888581518110614a8357614a836159c4565b60200260200101818151614a9791906159f1565b905250505050509392505050565b6000818152600183016020526040812054614aec57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d3c565b506000610d3c565b60008181526001830160205260408120548015614bdd576000614b186001836159da565b8554909150600090614b2c906001906159da565b9050818114614b91576000866000018281548110614b4c57614b4c6159c4565b9060005260206000200154905080876000018481548110614b6f57614b6f6159c4565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ba257614ba2615ec9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d3c565b6000915050610d3c565b5b601f811115614c08578251825260209283019290910190601f1901614be8565b80156111475782518251600019600160086020869003021b01908116901991909116178252505050565b60008215614c605781614c466001856159da565b614c5091906159b0565b614c5b9060016159f1565b611f47565b50600092915050565b828054614c7590615a90565b90600052602060002090601f016020900481019282614c975760008555614cdd565b82601f10614cb05782800160ff19823516178555614cdd565b82800160010185558215614cdd579182015b82811115614cdd578235825591602001919060010190614cc2565b50614ce9929150614e3a565b5090565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e08101829052610100810182905261012081019190915290565b60405180608001604052806000815260200160008152602001614d61614ced565b8152602001614d8a60405180606001604052806000815260200160008152602001600081525090565b905290565b604051806101000160405280600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160608101825260008082526020820152908101614d8a614d8f565b604080516101008101825260008082526020820181905291810182905260608101829052608081018290529060a0820190815260200160008152602001600081525090565b5b80821115614ce95760008155600101614e3b565b600060208284031215614e6157600080fd5b81356001600160e01b031981168114611f4757600080fd5b600060208284031215614e8b57600080fd5b5035919050565b8015158114613bfd57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715614ed857614ed8614ea0565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614f0657614f06614ea0565b604052919050565b600080600080848603610120811215614f2657600080fd5b85359450602086013593506040860135614f3f81614e92565b925060c0605f1982011215614f5357600080fd5b50614f5c614eb6565b606086013581526080860135602082015260a0860135604082015260c0860135606082015260e0860135608082015261010086013560a08201528091505092959194509250565b81518152602080830151908201526040808301519082015260608101610d3c565b60008060408385031215614fd757600080fd5b50508035926020909101359150565b80356001600160a01b0381168114614ffd57600080fd5b919050565b6000806040838503121561501557600080fd5b8235915061502560208401614fe6565b90509250929050565b8051151582526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b602080825282518282018190526000919060409081850190868401855b828110156150d757815180518552868101511515878601528501516150c28686018261502e565b5061014093909301929085019060010161509b565b5091979650505050505050565b60008083601f8401126150f657600080fd5b5081356001600160401b0381111561510d57600080fd5b60208301915083602082850101111561512557600080fd5b9250929050565b60008060008060008060a0878903121561514557600080fd5b86356001600160401b0381111561515b57600080fd5b61516789828a016150e4565b909750955061517a905060208801614fe6565b93506040870135925060608701359150608087013590509295509295509295565b60005b838110156151b657818101518382015260200161519e565b83811115612ef05750506000910152565b600081518084526151df81602086016020860161519b565b601f01601f19169290920160200192915050565b805162ffffff1682526000610140602083015161521b60208601826001600160a01b03169052565b506040830151615231604086018261ffff169052565b506060830151615247606086018261ffff169052565b50608083015161525d608086018261ffff169052565b5060a083015161527260a086018260ff169052565b5060c08301518160c086015261528a828601826151c7565b91505060e08301516152a760e08601826001600160401b03169052565b5061010083810151908501526101209283015192909301919091525090565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561535d57603f19898403018552815160c0815185528882015189860152878201518189870152615323828701826151f3565b60609384015180518886015260208101516080890152604081015160a08901529390925090505095880195935050908601906001016152ed565b509098975050505050505050565b60008060006060848603121561538057600080fd5b61538984614fe6565b925061539760208501614fe6565b9150604084013590509250925092565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156153fc57603f198886030184526153ea8583516151f3565b945092850192908501906001016153ce565b5092979650505050505050565b6000806000806080858703121561541f57600080fd5b8435935060208501359250604085013561543881614e92565b9396929550929360600135925050565b60006001600160401b0382111561546157615461614ea0565b5060051b60200190565b600082601f83011261547c57600080fd5b8135602061549161548c83615448565b614ede565b82815260059290921b840181019181810190868411156154b057600080fd5b8286015b8481101561266e57803583529183019183016154b4565b6000602082840312156154dd57600080fd5b81356001600160401b038111156154f357600080fd5b6111dc8482850161546b565b6000806000806080858703121561551557600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052602160045260246000fd5b6003811061556557634e487b7160e01b600052602160045260246000fd5b9052565b60208101610d3c8284615547565b6000806000806060858703121561558d57600080fd5b843593506020850135925060408501356001600160401b038111156155b157600080fd5b6155bd878288016150e4565b95989497509550505050565b6101008101610d3c828461502e565b60008083601f8401126155ea57600080fd5b5081356001600160401b0381111561560157600080fd5b6020830191508360208260051b850101111561512557600080fd5b6000806000806040858703121561563257600080fd5b84356001600160401b038082111561564957600080fd5b615655888389016155d8565b9096509450602087013591508082111561566e57600080fd5b506155bd878288016155d8565b600081518084526020808501945080840160005b838110156156ab5781518752958201959082019060010161568f565b509495945050505050565b60a0808252865190820181905260009060209060c0840190828a01845b828110156156f85781516001600160a01b0316845292840192908401906001016156d3565b5050508381038285015261570c818961567b565b8481036040860152875180825283890192509083019060005b8181101561574a5783516001600160601b031683529284019291840191600101615725565b50506001600160601b03871660608601529250615765915050565b8260808301529695505050505050565b602081526000611f4760208301846151f3565b8281526040602082015260006111dc604083018461567b565b6000806000806000606086880312156157b957600080fd5b8535945060208601356001600160401b03808211156157d757600080fd5b6157e389838a016150e4565b909650945060408801359150808211156157fc57600080fd5b50615809888289016150e4565b969995985093965092949392505050565b6000806040838503121561582d57600080fd5b8235915060208301356003811061584357600080fd5b809150509250929050565b60008060006060848603121561586357600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561588d57600080fd5b8235915060208301356001600160401b038111156158aa57600080fd5b6158b68582860161546b565b9150509250929050565b602081526000611f47602083018461567b565b6000602082840312156158e557600080fd5b5051919050565b600080600080600080600080610100898b03121561590957600080fd5b885161591481614e92565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b60008060006060848603121561596b57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826159bf576159bf615984565b500490565b634e487b7160e01b600052603260045260246000fd5b6000828210156159ec576159ec61599a565b500390565b60008219821115615a0457615a0461599a565b500190565b600062ffffff808316818516808303821115615a2757615a2761599a565b01949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600060018060a01b03808716835260606020840152615a7c606084018688615a30565b915080841660408401525095945050505050565b600181811c90821680615aa457607f821691505b60208210811415611d6157634e487b7160e01b600052602260045260246000fd5b6000600019821415615ad957615ad961599a565b5060010190565b6000816000190483118215151615615afa57615afa61599a565b500290565b83815260406020820152600061203c604083018486615a30565b600082601f830112615b2a57600080fd5b81516001600160401b03811115615b4357615b43614ea0565b615b56601f8201601f1916602001614ede565b818152846020838601011115615b6b57600080fd5b6111dc82602083016020870161519b565b60008060408385031215615b8f57600080fd5b82516001600160401b0380821115615ba657600080fd5b615bb286838701615b19565b93506020850151915080821115615bc857600080fd5b506158b685828601615b19565b634e487b7160e01b600052600160045260246000fd5b602081526000611f4760208301846151c7565b60006001600160601b03808316818516808303821115615a2757615a2761599a565b604081526000615c34604083018688615a30565b8281036020840152615c47818587615a30565b979650505050505050565b600060208284031215615c6457600080fd5b8151611f4781614e92565b60006020808385031215615c8257600080fd5b82516001600160401b03811115615c9857600080fd5b8301601f81018513615ca957600080fd5b8051615cb761548c82615448565b81815260059190911b82018301908381019087831115615cd657600080fd5b928401925b82841015615c4757835182529284019290840190615cdb565b60006001600160601b0383811690831681811015615d1457615d1461599a565b039392505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351615d5481601785016020880161519b565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615d8581602884016020880161519b565b01602801949350505050565b60408101615d9f8285615547565b6001600160a01b039290921660209190910152919050565b608081526000615dca60808301876151c7565b8281036020840152615ddc81876151c7565b90508281036040840152615df081866151c7565b91505082606083015295945050505050565b600082615e1157615e11615984565b500690565b600081615e2557615e2561599a565b506000190190565b60008351615e3f81846020880161519b565b6fffffffffffffffffffffffffffffffff19939093169190920190815260100192915050565b60008251615e7781846020870161519b565b9190910192915050565b60008351615e9381846020880161519b565b9190910191825250602001919050565b82815260008251615ebb81602085016020870161519b565b919091016020019392505050565b634e487b7160e01b600052603160045260246000fdfe8f8c450dae5029cd48cd91dd9db65da48fb742893edfc7941250f6721d93cbbe9a627a5d4aa7c17f87ff26e3fe9a42c2b6c559e8b41a42282d0ecebb17c0e4d3c23292b191d95d2a7dd94fc6436eb44338fda9e1307d9394fd27c28157c1b33c3105bcbf19d4417b73ae0e58d508a65ecf75665e46c2622d8521732de6080c48a264697066735822122093f74b570f38204664e512a5339a76eebcc26abe3394e4e21b014b1dd0eedf8964736f6c63430008090033", -} - -// ApiABI is the input ABI used to generate the binding from. -// Deprecated: Use ApiMetaData.ABI instead. -var ApiABI = ApiMetaData.ABI - -// ApiBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ApiMetaData.Bin instead. -var ApiBin = ApiMetaData.Bin - -// DeployApi deploys a new Ethereum contract, binding an instance of Api to it. -func DeployApi(auth *bind.TransactOpts, backend bind.ContractBackend, _depositContract common.Address) (common.Address, *types.Transaction, *Api, error) { - parsed, err := ApiMetaData.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(ApiBin), backend, _depositContract) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &Api{ApiCaller: ApiCaller{contract: contract}, ApiTransactor: ApiTransactor{contract: contract}, ApiFilterer: ApiFilterer{contract: contract}}, nil -} - -// Api is an auto generated Go binding around an Ethereum contract. -type Api struct { - ApiCaller // Read-only binding to the contract - ApiTransactor // Write-only binding to the contract - ApiFilterer // Log filterer for contract events -} - -// ApiCaller is an auto generated read-only Go binding around an Ethereum contract. -type ApiCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ApiTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ApiTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ApiFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ApiFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ApiSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ApiSession struct { - Contract *Api // 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 -} - -// ApiCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ApiCallerSession struct { - Contract *ApiCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ApiTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ApiTransactorSession struct { - Contract *ApiTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ApiRaw is an auto generated low-level Go binding around an Ethereum contract. -type ApiRaw struct { - Contract *Api // Generic contract binding to access the raw methods on -} - -// ApiCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ApiCallerRaw struct { - Contract *ApiCaller // Generic read-only contract binding to access the raw methods on -} - -// ApiTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ApiTransactorRaw struct { - Contract *ApiTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewApi creates a new instance of Api, bound to a specific deployed contract. -func NewApi(address common.Address, backend bind.ContractBackend) (*Api, error) { - contract, err := bindApi(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &Api{ApiCaller: ApiCaller{contract: contract}, ApiTransactor: ApiTransactor{contract: contract}, ApiFilterer: ApiFilterer{contract: contract}}, nil -} - -// NewApiCaller creates a new read-only instance of Api, bound to a specific deployed contract. -func NewApiCaller(address common.Address, caller bind.ContractCaller) (*ApiCaller, error) { - contract, err := bindApi(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ApiCaller{contract: contract}, nil -} - -// NewApiTransactor creates a new write-only instance of Api, bound to a specific deployed contract. -func NewApiTransactor(address common.Address, transactor bind.ContractTransactor) (*ApiTransactor, error) { - contract, err := bindApi(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ApiTransactor{contract: contract}, nil -} - -// NewApiFilterer creates a new log filterer instance of Api, bound to a specific deployed contract. -func NewApiFilterer(address common.Address, filterer bind.ContractFilterer) (*ApiFilterer, error) { - contract, err := bindApi(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ApiFilterer{contract: contract}, nil -} - -// bindApi binds a generic wrapper to an already deployed contract. -func bindApi(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ApiMetaData.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 (_Api *ApiRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Api.Contract.ApiCaller.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 (_Api *ApiRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Api.Contract.ApiTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Api *ApiRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Api.Contract.ApiTransactor.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 (_Api *ApiCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Api.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 (_Api *ApiTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Api.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Api *ApiTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Api.Contract.contract.Transact(opts, method, params...) -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_Api *ApiCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_Api *ApiSession) DEFAULTADMINROLE() ([32]byte, error) { - return _Api.Contract.DEFAULTADMINROLE(&_Api.CallOpts) -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_Api *ApiCallerSession) DEFAULTADMINROLE() ([32]byte, error) { - return _Api.Contract.DEFAULTADMINROLE(&_Api.CallOpts) -} - -// DEPOSITCONTRACT is a free data retrieval call binding the contract method 0x6b96736b. -// -// Solidity: function DEPOSIT_CONTRACT() view returns(address) -func (_Api *ApiCaller) DEPOSITCONTRACT(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "DEPOSIT_CONTRACT") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// DEPOSITCONTRACT is a free data retrieval call binding the contract method 0x6b96736b. -// -// Solidity: function DEPOSIT_CONTRACT() view returns(address) -func (_Api *ApiSession) DEPOSITCONTRACT() (common.Address, error) { - return _Api.Contract.DEPOSITCONTRACT(&_Api.CallOpts) -} - -// DEPOSITCONTRACT is a free data retrieval call binding the contract method 0x6b96736b. -// -// Solidity: function DEPOSIT_CONTRACT() view returns(address) -func (_Api *ApiCallerSession) DEPOSITCONTRACT() (common.Address, error) { - return _Api.Contract.DEPOSITCONTRACT(&_Api.CallOpts) -} - -// FEEPRECISIONPOINTS is a free data retrieval call binding the contract method 0x7c8da51c. -// -// Solidity: function FEE_PRECISION_POINTS() view returns(uint256) -func (_Api *ApiCaller) FEEPRECISIONPOINTS(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "FEE_PRECISION_POINTS") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// FEEPRECISIONPOINTS is a free data retrieval call binding the contract method 0x7c8da51c. -// -// Solidity: function FEE_PRECISION_POINTS() view returns(uint256) -func (_Api *ApiSession) FEEPRECISIONPOINTS() (*big.Int, error) { - return _Api.Contract.FEEPRECISIONPOINTS(&_Api.CallOpts) -} - -// FEEPRECISIONPOINTS is a free data retrieval call binding the contract method 0x7c8da51c. -// -// Solidity: function FEE_PRECISION_POINTS() view returns(uint256) -func (_Api *ApiCallerSession) FEEPRECISIONPOINTS() (*big.Int, error) { - return _Api.Contract.FEEPRECISIONPOINTS(&_Api.CallOpts) -} - -// MANAGEWITHDRAWALCREDENTIALSROLE is a free data retrieval call binding the contract method 0x7a74884d. -// -// Solidity: function MANAGE_WITHDRAWAL_CREDENTIALS_ROLE() view returns(bytes32) -func (_Api *ApiCaller) MANAGEWITHDRAWALCREDENTIALSROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "MANAGE_WITHDRAWAL_CREDENTIALS_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MANAGEWITHDRAWALCREDENTIALSROLE is a free data retrieval call binding the contract method 0x7a74884d. -// -// Solidity: function MANAGE_WITHDRAWAL_CREDENTIALS_ROLE() view returns(bytes32) -func (_Api *ApiSession) MANAGEWITHDRAWALCREDENTIALSROLE() ([32]byte, error) { - return _Api.Contract.MANAGEWITHDRAWALCREDENTIALSROLE(&_Api.CallOpts) -} - -// MANAGEWITHDRAWALCREDENTIALSROLE is a free data retrieval call binding the contract method 0x7a74884d. -// -// Solidity: function MANAGE_WITHDRAWAL_CREDENTIALS_ROLE() view returns(bytes32) -func (_Api *ApiCallerSession) MANAGEWITHDRAWALCREDENTIALSROLE() ([32]byte, error) { - return _Api.Contract.MANAGEWITHDRAWALCREDENTIALSROLE(&_Api.CallOpts) -} - -// MAXSTAKINGMODULESCOUNT is a free data retrieval call binding the contract method 0x4b3a1cb7. -// -// Solidity: function MAX_STAKING_MODULES_COUNT() view returns(uint256) -func (_Api *ApiCaller) MAXSTAKINGMODULESCOUNT(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "MAX_STAKING_MODULES_COUNT") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MAXSTAKINGMODULESCOUNT is a free data retrieval call binding the contract method 0x4b3a1cb7. -// -// Solidity: function MAX_STAKING_MODULES_COUNT() view returns(uint256) -func (_Api *ApiSession) MAXSTAKINGMODULESCOUNT() (*big.Int, error) { - return _Api.Contract.MAXSTAKINGMODULESCOUNT(&_Api.CallOpts) -} - -// MAXSTAKINGMODULESCOUNT is a free data retrieval call binding the contract method 0x4b3a1cb7. -// -// Solidity: function MAX_STAKING_MODULES_COUNT() view returns(uint256) -func (_Api *ApiCallerSession) MAXSTAKINGMODULESCOUNT() (*big.Int, error) { - return _Api.Contract.MAXSTAKINGMODULESCOUNT(&_Api.CallOpts) -} - -// MAXSTAKINGMODULENAMELENGTH is a free data retrieval call binding the contract method 0x9b75b4ef. -// -// Solidity: function MAX_STAKING_MODULE_NAME_LENGTH() view returns(uint256) -func (_Api *ApiCaller) MAXSTAKINGMODULENAMELENGTH(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "MAX_STAKING_MODULE_NAME_LENGTH") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MAXSTAKINGMODULENAMELENGTH is a free data retrieval call binding the contract method 0x9b75b4ef. -// -// Solidity: function MAX_STAKING_MODULE_NAME_LENGTH() view returns(uint256) -func (_Api *ApiSession) MAXSTAKINGMODULENAMELENGTH() (*big.Int, error) { - return _Api.Contract.MAXSTAKINGMODULENAMELENGTH(&_Api.CallOpts) -} - -// MAXSTAKINGMODULENAMELENGTH is a free data retrieval call binding the contract method 0x9b75b4ef. -// -// Solidity: function MAX_STAKING_MODULE_NAME_LENGTH() view returns(uint256) -func (_Api *ApiCallerSession) MAXSTAKINGMODULENAMELENGTH() (*big.Int, error) { - return _Api.Contract.MAXSTAKINGMODULENAMELENGTH(&_Api.CallOpts) -} - -// REPORTEXITEDVALIDATORSROLE is a free data retrieval call binding the contract method 0xc445ea75. -// -// Solidity: function REPORT_EXITED_VALIDATORS_ROLE() view returns(bytes32) -func (_Api *ApiCaller) REPORTEXITEDVALIDATORSROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "REPORT_EXITED_VALIDATORS_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// REPORTEXITEDVALIDATORSROLE is a free data retrieval call binding the contract method 0xc445ea75. -// -// Solidity: function REPORT_EXITED_VALIDATORS_ROLE() view returns(bytes32) -func (_Api *ApiSession) REPORTEXITEDVALIDATORSROLE() ([32]byte, error) { - return _Api.Contract.REPORTEXITEDVALIDATORSROLE(&_Api.CallOpts) -} - -// REPORTEXITEDVALIDATORSROLE is a free data retrieval call binding the contract method 0xc445ea75. -// -// Solidity: function REPORT_EXITED_VALIDATORS_ROLE() view returns(bytes32) -func (_Api *ApiCallerSession) REPORTEXITEDVALIDATORSROLE() ([32]byte, error) { - return _Api.Contract.REPORTEXITEDVALIDATORSROLE(&_Api.CallOpts) -} - -// REPORTREWARDSMINTEDROLE is a free data retrieval call binding the contract method 0x1d1b9d3c. -// -// Solidity: function REPORT_REWARDS_MINTED_ROLE() view returns(bytes32) -func (_Api *ApiCaller) REPORTREWARDSMINTEDROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "REPORT_REWARDS_MINTED_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// REPORTREWARDSMINTEDROLE is a free data retrieval call binding the contract method 0x1d1b9d3c. -// -// Solidity: function REPORT_REWARDS_MINTED_ROLE() view returns(bytes32) -func (_Api *ApiSession) REPORTREWARDSMINTEDROLE() ([32]byte, error) { - return _Api.Contract.REPORTREWARDSMINTEDROLE(&_Api.CallOpts) -} - -// REPORTREWARDSMINTEDROLE is a free data retrieval call binding the contract method 0x1d1b9d3c. -// -// Solidity: function REPORT_REWARDS_MINTED_ROLE() view returns(bytes32) -func (_Api *ApiCallerSession) REPORTREWARDSMINTEDROLE() ([32]byte, error) { - return _Api.Contract.REPORTREWARDSMINTEDROLE(&_Api.CallOpts) -} - -// STAKINGMODULEMANAGEROLE is a free data retrieval call binding the contract method 0xe016e6f7. -// -// Solidity: function STAKING_MODULE_MANAGE_ROLE() view returns(bytes32) -func (_Api *ApiCaller) STAKINGMODULEMANAGEROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "STAKING_MODULE_MANAGE_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGMODULEMANAGEROLE is a free data retrieval call binding the contract method 0xe016e6f7. -// -// Solidity: function STAKING_MODULE_MANAGE_ROLE() view returns(bytes32) -func (_Api *ApiSession) STAKINGMODULEMANAGEROLE() ([32]byte, error) { - return _Api.Contract.STAKINGMODULEMANAGEROLE(&_Api.CallOpts) -} - -// STAKINGMODULEMANAGEROLE is a free data retrieval call binding the contract method 0xe016e6f7. -// -// Solidity: function STAKING_MODULE_MANAGE_ROLE() view returns(bytes32) -func (_Api *ApiCallerSession) STAKINGMODULEMANAGEROLE() ([32]byte, error) { - return _Api.Contract.STAKINGMODULEMANAGEROLE(&_Api.CallOpts) -} - -// STAKINGMODULEPAUSEROLE is a free data retrieval call binding the contract method 0xa7357c8c. -// -// Solidity: function STAKING_MODULE_PAUSE_ROLE() view returns(bytes32) -func (_Api *ApiCaller) STAKINGMODULEPAUSEROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "STAKING_MODULE_PAUSE_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGMODULEPAUSEROLE is a free data retrieval call binding the contract method 0xa7357c8c. -// -// Solidity: function STAKING_MODULE_PAUSE_ROLE() view returns(bytes32) -func (_Api *ApiSession) STAKINGMODULEPAUSEROLE() ([32]byte, error) { - return _Api.Contract.STAKINGMODULEPAUSEROLE(&_Api.CallOpts) -} - -// STAKINGMODULEPAUSEROLE is a free data retrieval call binding the contract method 0xa7357c8c. -// -// Solidity: function STAKING_MODULE_PAUSE_ROLE() view returns(bytes32) -func (_Api *ApiCallerSession) STAKINGMODULEPAUSEROLE() ([32]byte, error) { - return _Api.Contract.STAKINGMODULEPAUSEROLE(&_Api.CallOpts) -} - -// STAKINGMODULERESUMEROLE is a free data retrieval call binding the contract method 0x8801da79. -// -// Solidity: function STAKING_MODULE_RESUME_ROLE() view returns(bytes32) -func (_Api *ApiCaller) STAKINGMODULERESUMEROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "STAKING_MODULE_RESUME_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGMODULERESUMEROLE is a free data retrieval call binding the contract method 0x8801da79. -// -// Solidity: function STAKING_MODULE_RESUME_ROLE() view returns(bytes32) -func (_Api *ApiSession) STAKINGMODULERESUMEROLE() ([32]byte, error) { - return _Api.Contract.STAKINGMODULERESUMEROLE(&_Api.CallOpts) -} - -// STAKINGMODULERESUMEROLE is a free data retrieval call binding the contract method 0x8801da79. -// -// Solidity: function STAKING_MODULE_RESUME_ROLE() view returns(bytes32) -func (_Api *ApiCallerSession) STAKINGMODULERESUMEROLE() ([32]byte, error) { - return _Api.Contract.STAKINGMODULERESUMEROLE(&_Api.CallOpts) -} - -// TOTALBASISPOINTS is a free data retrieval call binding the contract method 0x271662ec. -// -// Solidity: function TOTAL_BASIS_POINTS() view returns(uint256) -func (_Api *ApiCaller) TOTALBASISPOINTS(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "TOTAL_BASIS_POINTS") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// TOTALBASISPOINTS is a free data retrieval call binding the contract method 0x271662ec. -// -// Solidity: function TOTAL_BASIS_POINTS() view returns(uint256) -func (_Api *ApiSession) TOTALBASISPOINTS() (*big.Int, error) { - return _Api.Contract.TOTALBASISPOINTS(&_Api.CallOpts) -} - -// TOTALBASISPOINTS is a free data retrieval call binding the contract method 0x271662ec. -// -// Solidity: function TOTAL_BASIS_POINTS() view returns(uint256) -func (_Api *ApiCallerSession) TOTALBASISPOINTS() (*big.Int, error) { - return _Api.Contract.TOTALBASISPOINTS(&_Api.CallOpts) -} - -// UNSAFESETEXITEDVALIDATORSROLE is a free data retrieval call binding the contract method 0x1565d2f2. -// -// Solidity: function UNSAFE_SET_EXITED_VALIDATORS_ROLE() view returns(bytes32) -func (_Api *ApiCaller) UNSAFESETEXITEDVALIDATORSROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "UNSAFE_SET_EXITED_VALIDATORS_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// UNSAFESETEXITEDVALIDATORSROLE is a free data retrieval call binding the contract method 0x1565d2f2. -// -// Solidity: function UNSAFE_SET_EXITED_VALIDATORS_ROLE() view returns(bytes32) -func (_Api *ApiSession) UNSAFESETEXITEDVALIDATORSROLE() ([32]byte, error) { - return _Api.Contract.UNSAFESETEXITEDVALIDATORSROLE(&_Api.CallOpts) -} - -// UNSAFESETEXITEDVALIDATORSROLE is a free data retrieval call binding the contract method 0x1565d2f2. -// -// Solidity: function UNSAFE_SET_EXITED_VALIDATORS_ROLE() view returns(bytes32) -func (_Api *ApiCallerSession) UNSAFESETEXITEDVALIDATORSROLE() ([32]byte, error) { - return _Api.Contract.UNSAFESETEXITEDVALIDATORSROLE(&_Api.CallOpts) -} - -// GetAllNodeOperatorDigests is a free data retrieval call binding the contract method 0x3240a322. -// -// Solidity: function getAllNodeOperatorDigests(uint256 _stakingModuleId) view returns((uint256,bool,(bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256))[]) -func (_Api *ApiCaller) GetAllNodeOperatorDigests(opts *bind.CallOpts, _stakingModuleId *big.Int) ([]StakingRouterNodeOperatorDigest, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getAllNodeOperatorDigests", _stakingModuleId) - - if err != nil { - return *new([]StakingRouterNodeOperatorDigest), err - } - - out0 := *abi.ConvertType(out[0], new([]StakingRouterNodeOperatorDigest)).(*[]StakingRouterNodeOperatorDigest) - - return out0, err - -} - -// GetAllNodeOperatorDigests is a free data retrieval call binding the contract method 0x3240a322. -// -// Solidity: function getAllNodeOperatorDigests(uint256 _stakingModuleId) view returns((uint256,bool,(bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256))[]) -func (_Api *ApiSession) GetAllNodeOperatorDigests(_stakingModuleId *big.Int) ([]StakingRouterNodeOperatorDigest, error) { - return _Api.Contract.GetAllNodeOperatorDigests(&_Api.CallOpts, _stakingModuleId) -} - -// GetAllNodeOperatorDigests is a free data retrieval call binding the contract method 0x3240a322. -// -// Solidity: function getAllNodeOperatorDigests(uint256 _stakingModuleId) view returns((uint256,bool,(bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256))[]) -func (_Api *ApiCallerSession) GetAllNodeOperatorDigests(_stakingModuleId *big.Int) ([]StakingRouterNodeOperatorDigest, error) { - return _Api.Contract.GetAllNodeOperatorDigests(&_Api.CallOpts, _stakingModuleId) -} - -// GetAllStakingModuleDigests is a free data retrieval call binding the contract method 0x57993b85. -// -// Solidity: function getAllStakingModuleDigests() view returns((uint256,uint256,(uint24,address,uint16,uint16,uint16,uint8,string,uint64,uint256,uint256),(uint256,uint256,uint256))[]) -func (_Api *ApiCaller) GetAllStakingModuleDigests(opts *bind.CallOpts) ([]StakingRouterStakingModuleDigest, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getAllStakingModuleDigests") - - if err != nil { - return *new([]StakingRouterStakingModuleDigest), err - } - - out0 := *abi.ConvertType(out[0], new([]StakingRouterStakingModuleDigest)).(*[]StakingRouterStakingModuleDigest) - - return out0, err - -} - -// GetAllStakingModuleDigests is a free data retrieval call binding the contract method 0x57993b85. -// -// Solidity: function getAllStakingModuleDigests() view returns((uint256,uint256,(uint24,address,uint16,uint16,uint16,uint8,string,uint64,uint256,uint256),(uint256,uint256,uint256))[]) -func (_Api *ApiSession) GetAllStakingModuleDigests() ([]StakingRouterStakingModuleDigest, error) { - return _Api.Contract.GetAllStakingModuleDigests(&_Api.CallOpts) -} - -// GetAllStakingModuleDigests is a free data retrieval call binding the contract method 0x57993b85. -// -// Solidity: function getAllStakingModuleDigests() view returns((uint256,uint256,(uint24,address,uint16,uint16,uint16,uint8,string,uint64,uint256,uint256),(uint256,uint256,uint256))[]) -func (_Api *ApiCallerSession) GetAllStakingModuleDigests() ([]StakingRouterStakingModuleDigest, error) { - return _Api.Contract.GetAllStakingModuleDigests(&_Api.CallOpts) -} - -// GetContractVersion is a free data retrieval call binding the contract method 0x8aa10435. -// -// Solidity: function getContractVersion() view returns(uint256) -func (_Api *ApiCaller) GetContractVersion(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getContractVersion") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetContractVersion is a free data retrieval call binding the contract method 0x8aa10435. -// -// Solidity: function getContractVersion() view returns(uint256) -func (_Api *ApiSession) GetContractVersion() (*big.Int, error) { - return _Api.Contract.GetContractVersion(&_Api.CallOpts) -} - -// GetContractVersion is a free data retrieval call binding the contract method 0x8aa10435. -// -// Solidity: function getContractVersion() view returns(uint256) -func (_Api *ApiCallerSession) GetContractVersion() (*big.Int, error) { - return _Api.Contract.GetContractVersion(&_Api.CallOpts) -} - -// GetDepositsAllocation is a free data retrieval call binding the contract method 0xc82b1bb1. -// -// Solidity: function getDepositsAllocation(uint256 _depositsCount) view returns(uint256 allocated, uint256[] allocations) -func (_Api *ApiCaller) GetDepositsAllocation(opts *bind.CallOpts, _depositsCount *big.Int) (struct { - Allocated *big.Int - Allocations []*big.Int -}, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getDepositsAllocation", _depositsCount) - - outstruct := new(struct { - Allocated *big.Int - Allocations []*big.Int - }) - if err != nil { - return *outstruct, err - } - - outstruct.Allocated = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.Allocations = *abi.ConvertType(out[1], new([]*big.Int)).(*[]*big.Int) - - return *outstruct, err - -} - -// GetDepositsAllocation is a free data retrieval call binding the contract method 0xc82b1bb1. -// -// Solidity: function getDepositsAllocation(uint256 _depositsCount) view returns(uint256 allocated, uint256[] allocations) -func (_Api *ApiSession) GetDepositsAllocation(_depositsCount *big.Int) (struct { - Allocated *big.Int - Allocations []*big.Int -}, error) { - return _Api.Contract.GetDepositsAllocation(&_Api.CallOpts, _depositsCount) -} - -// GetDepositsAllocation is a free data retrieval call binding the contract method 0xc82b1bb1. -// -// Solidity: function getDepositsAllocation(uint256 _depositsCount) view returns(uint256 allocated, uint256[] allocations) -func (_Api *ApiCallerSession) GetDepositsAllocation(_depositsCount *big.Int) (struct { - Allocated *big.Int - Allocations []*big.Int -}, error) { - return _Api.Contract.GetDepositsAllocation(&_Api.CallOpts, _depositsCount) -} - -// GetLido is a free data retrieval call binding the contract method 0x6a516b47. -// -// Solidity: function getLido() view returns(address) -func (_Api *ApiCaller) GetLido(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getLido") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetLido is a free data retrieval call binding the contract method 0x6a516b47. -// -// Solidity: function getLido() view returns(address) -func (_Api *ApiSession) GetLido() (common.Address, error) { - return _Api.Contract.GetLido(&_Api.CallOpts) -} - -// GetLido is a free data retrieval call binding the contract method 0x6a516b47. -// -// Solidity: function getLido() view returns(address) -func (_Api *ApiCallerSession) GetLido() (common.Address, error) { - return _Api.Contract.GetLido(&_Api.CallOpts) -} - -// GetNodeOperatorDigests is a free data retrieval call binding the contract method 0xf07ff28a. -// -// Solidity: function getNodeOperatorDigests(uint256 _stakingModuleId, uint256[] _nodeOperatorIds) view returns((uint256,bool,(bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256))[] digests) -func (_Api *ApiCaller) GetNodeOperatorDigests(opts *bind.CallOpts, _stakingModuleId *big.Int, _nodeOperatorIds []*big.Int) ([]StakingRouterNodeOperatorDigest, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getNodeOperatorDigests", _stakingModuleId, _nodeOperatorIds) - - if err != nil { - return *new([]StakingRouterNodeOperatorDigest), err - } - - out0 := *abi.ConvertType(out[0], new([]StakingRouterNodeOperatorDigest)).(*[]StakingRouterNodeOperatorDigest) - - return out0, err - -} - -// GetNodeOperatorDigests is a free data retrieval call binding the contract method 0xf07ff28a. -// -// Solidity: function getNodeOperatorDigests(uint256 _stakingModuleId, uint256[] _nodeOperatorIds) view returns((uint256,bool,(bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256))[] digests) -func (_Api *ApiSession) GetNodeOperatorDigests(_stakingModuleId *big.Int, _nodeOperatorIds []*big.Int) ([]StakingRouterNodeOperatorDigest, error) { - return _Api.Contract.GetNodeOperatorDigests(&_Api.CallOpts, _stakingModuleId, _nodeOperatorIds) -} - -// GetNodeOperatorDigests is a free data retrieval call binding the contract method 0xf07ff28a. -// -// Solidity: function getNodeOperatorDigests(uint256 _stakingModuleId, uint256[] _nodeOperatorIds) view returns((uint256,bool,(bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256))[] digests) -func (_Api *ApiCallerSession) GetNodeOperatorDigests(_stakingModuleId *big.Int, _nodeOperatorIds []*big.Int) ([]StakingRouterNodeOperatorDigest, error) { - return _Api.Contract.GetNodeOperatorDigests(&_Api.CallOpts, _stakingModuleId, _nodeOperatorIds) -} - -// GetNodeOperatorDigests0 is a free data retrieval call binding the contract method 0xf8bb6d42. -// -// Solidity: function getNodeOperatorDigests(uint256 _stakingModuleId, uint256 _offset, uint256 _limit) view returns((uint256,bool,(bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256))[]) -func (_Api *ApiCaller) GetNodeOperatorDigests0(opts *bind.CallOpts, _stakingModuleId *big.Int, _offset *big.Int, _limit *big.Int) ([]StakingRouterNodeOperatorDigest, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getNodeOperatorDigests0", _stakingModuleId, _offset, _limit) - - if err != nil { - return *new([]StakingRouterNodeOperatorDigest), err - } - - out0 := *abi.ConvertType(out[0], new([]StakingRouterNodeOperatorDigest)).(*[]StakingRouterNodeOperatorDigest) - - return out0, err - -} - -// GetNodeOperatorDigests0 is a free data retrieval call binding the contract method 0xf8bb6d42. -// -// Solidity: function getNodeOperatorDigests(uint256 _stakingModuleId, uint256 _offset, uint256 _limit) view returns((uint256,bool,(bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256))[]) -func (_Api *ApiSession) GetNodeOperatorDigests0(_stakingModuleId *big.Int, _offset *big.Int, _limit *big.Int) ([]StakingRouterNodeOperatorDigest, error) { - return _Api.Contract.GetNodeOperatorDigests0(&_Api.CallOpts, _stakingModuleId, _offset, _limit) -} - -// GetNodeOperatorDigests0 is a free data retrieval call binding the contract method 0xf8bb6d42. -// -// Solidity: function getNodeOperatorDigests(uint256 _stakingModuleId, uint256 _offset, uint256 _limit) view returns((uint256,bool,(bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256))[]) -func (_Api *ApiCallerSession) GetNodeOperatorDigests0(_stakingModuleId *big.Int, _offset *big.Int, _limit *big.Int) ([]StakingRouterNodeOperatorDigest, error) { - return _Api.Contract.GetNodeOperatorDigests0(&_Api.CallOpts, _stakingModuleId, _offset, _limit) -} - -// GetNodeOperatorSummary is a free data retrieval call binding the contract method 0xaa5a1b9d. -// -// Solidity: function getNodeOperatorSummary(uint256 _stakingModuleId, uint256 _nodeOperatorId) view returns((bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256) summary) -func (_Api *ApiCaller) GetNodeOperatorSummary(opts *bind.CallOpts, _stakingModuleId *big.Int, _nodeOperatorId *big.Int) (StakingRouterNodeOperatorSummary, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getNodeOperatorSummary", _stakingModuleId, _nodeOperatorId) - - if err != nil { - return *new(StakingRouterNodeOperatorSummary), err - } - - out0 := *abi.ConvertType(out[0], new(StakingRouterNodeOperatorSummary)).(*StakingRouterNodeOperatorSummary) - - return out0, err - -} - -// GetNodeOperatorSummary is a free data retrieval call binding the contract method 0xaa5a1b9d. -// -// Solidity: function getNodeOperatorSummary(uint256 _stakingModuleId, uint256 _nodeOperatorId) view returns((bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256) summary) -func (_Api *ApiSession) GetNodeOperatorSummary(_stakingModuleId *big.Int, _nodeOperatorId *big.Int) (StakingRouterNodeOperatorSummary, error) { - return _Api.Contract.GetNodeOperatorSummary(&_Api.CallOpts, _stakingModuleId, _nodeOperatorId) -} - -// GetNodeOperatorSummary is a free data retrieval call binding the contract method 0xaa5a1b9d. -// -// Solidity: function getNodeOperatorSummary(uint256 _stakingModuleId, uint256 _nodeOperatorId) view returns((bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256) summary) -func (_Api *ApiCallerSession) GetNodeOperatorSummary(_stakingModuleId *big.Int, _nodeOperatorId *big.Int) (StakingRouterNodeOperatorSummary, error) { - return _Api.Contract.GetNodeOperatorSummary(&_Api.CallOpts, _stakingModuleId, _nodeOperatorId) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_Api *ApiCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getRoleAdmin", role) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_Api *ApiSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _Api.Contract.GetRoleAdmin(&_Api.CallOpts, role) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_Api *ApiCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _Api.Contract.GetRoleAdmin(&_Api.CallOpts, role) -} - -// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. -// -// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) -func (_Api *ApiCaller) GetRoleMember(opts *bind.CallOpts, role [32]byte, index *big.Int) (common.Address, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getRoleMember", role, index) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. -// -// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) -func (_Api *ApiSession) GetRoleMember(role [32]byte, index *big.Int) (common.Address, error) { - return _Api.Contract.GetRoleMember(&_Api.CallOpts, role, index) -} - -// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. -// -// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) -func (_Api *ApiCallerSession) GetRoleMember(role [32]byte, index *big.Int) (common.Address, error) { - return _Api.Contract.GetRoleMember(&_Api.CallOpts, role, index) -} - -// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. -// -// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) -func (_Api *ApiCaller) GetRoleMemberCount(opts *bind.CallOpts, role [32]byte) (*big.Int, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getRoleMemberCount", role) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. -// -// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) -func (_Api *ApiSession) GetRoleMemberCount(role [32]byte) (*big.Int, error) { - return _Api.Contract.GetRoleMemberCount(&_Api.CallOpts, role) -} - -// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. -// -// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) -func (_Api *ApiCallerSession) GetRoleMemberCount(role [32]byte) (*big.Int, error) { - return _Api.Contract.GetRoleMemberCount(&_Api.CallOpts, role) -} - -// GetStakingFeeAggregateDistribution is a free data retrieval call binding the contract method 0xfa5093eb. -// -// Solidity: function getStakingFeeAggregateDistribution() view returns(uint96 modulesFee, uint96 treasuryFee, uint256 basePrecision) -func (_Api *ApiCaller) GetStakingFeeAggregateDistribution(opts *bind.CallOpts) (struct { - ModulesFee *big.Int - TreasuryFee *big.Int - BasePrecision *big.Int -}, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingFeeAggregateDistribution") - - outstruct := new(struct { - ModulesFee *big.Int - TreasuryFee *big.Int - BasePrecision *big.Int - }) - if err != nil { - return *outstruct, err - } - - outstruct.ModulesFee = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.TreasuryFee = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - outstruct.BasePrecision = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) - - return *outstruct, err - -} - -// GetStakingFeeAggregateDistribution is a free data retrieval call binding the contract method 0xfa5093eb. -// -// Solidity: function getStakingFeeAggregateDistribution() view returns(uint96 modulesFee, uint96 treasuryFee, uint256 basePrecision) -func (_Api *ApiSession) GetStakingFeeAggregateDistribution() (struct { - ModulesFee *big.Int - TreasuryFee *big.Int - BasePrecision *big.Int -}, error) { - return _Api.Contract.GetStakingFeeAggregateDistribution(&_Api.CallOpts) -} - -// GetStakingFeeAggregateDistribution is a free data retrieval call binding the contract method 0xfa5093eb. -// -// Solidity: function getStakingFeeAggregateDistribution() view returns(uint96 modulesFee, uint96 treasuryFee, uint256 basePrecision) -func (_Api *ApiCallerSession) GetStakingFeeAggregateDistribution() (struct { - ModulesFee *big.Int - TreasuryFee *big.Int - BasePrecision *big.Int -}, error) { - return _Api.Contract.GetStakingFeeAggregateDistribution(&_Api.CallOpts) -} - -// GetStakingFeeAggregateDistributionE4Precision is a free data retrieval call binding the contract method 0xefcdcc0e. -// -// Solidity: function getStakingFeeAggregateDistributionE4Precision() view returns(uint16 modulesFee, uint16 treasuryFee) -func (_Api *ApiCaller) GetStakingFeeAggregateDistributionE4Precision(opts *bind.CallOpts) (struct { - ModulesFee uint16 - TreasuryFee uint16 -}, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingFeeAggregateDistributionE4Precision") - - outstruct := new(struct { - ModulesFee uint16 - TreasuryFee uint16 - }) - if err != nil { - return *outstruct, err - } - - outstruct.ModulesFee = *abi.ConvertType(out[0], new(uint16)).(*uint16) - outstruct.TreasuryFee = *abi.ConvertType(out[1], new(uint16)).(*uint16) - - return *outstruct, err - -} - -// GetStakingFeeAggregateDistributionE4Precision is a free data retrieval call binding the contract method 0xefcdcc0e. -// -// Solidity: function getStakingFeeAggregateDistributionE4Precision() view returns(uint16 modulesFee, uint16 treasuryFee) -func (_Api *ApiSession) GetStakingFeeAggregateDistributionE4Precision() (struct { - ModulesFee uint16 - TreasuryFee uint16 -}, error) { - return _Api.Contract.GetStakingFeeAggregateDistributionE4Precision(&_Api.CallOpts) -} - -// GetStakingFeeAggregateDistributionE4Precision is a free data retrieval call binding the contract method 0xefcdcc0e. -// -// Solidity: function getStakingFeeAggregateDistributionE4Precision() view returns(uint16 modulesFee, uint16 treasuryFee) -func (_Api *ApiCallerSession) GetStakingFeeAggregateDistributionE4Precision() (struct { - ModulesFee uint16 - TreasuryFee uint16 -}, error) { - return _Api.Contract.GetStakingFeeAggregateDistributionE4Precision(&_Api.CallOpts) -} - -// GetStakingModule is a free data retrieval call binding the contract method 0xbc1bb190. -// -// Solidity: function getStakingModule(uint256 _stakingModuleId) view returns((uint24,address,uint16,uint16,uint16,uint8,string,uint64,uint256,uint256)) -func (_Api *ApiCaller) GetStakingModule(opts *bind.CallOpts, _stakingModuleId *big.Int) (StakingRouterStakingModule, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingModule", _stakingModuleId) - - if err != nil { - return *new(StakingRouterStakingModule), err - } - - out0 := *abi.ConvertType(out[0], new(StakingRouterStakingModule)).(*StakingRouterStakingModule) - - return out0, err - -} - -// GetStakingModule is a free data retrieval call binding the contract method 0xbc1bb190. -// -// Solidity: function getStakingModule(uint256 _stakingModuleId) view returns((uint24,address,uint16,uint16,uint16,uint8,string,uint64,uint256,uint256)) -func (_Api *ApiSession) GetStakingModule(_stakingModuleId *big.Int) (StakingRouterStakingModule, error) { - return _Api.Contract.GetStakingModule(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModule is a free data retrieval call binding the contract method 0xbc1bb190. -// -// Solidity: function getStakingModule(uint256 _stakingModuleId) view returns((uint24,address,uint16,uint16,uint16,uint8,string,uint64,uint256,uint256)) -func (_Api *ApiCallerSession) GetStakingModule(_stakingModuleId *big.Int) (StakingRouterStakingModule, error) { - return _Api.Contract.GetStakingModule(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleActiveValidatorsCount is a free data retrieval call binding the contract method 0x96b5d81c. -// -// Solidity: function getStakingModuleActiveValidatorsCount(uint256 _stakingModuleId) view returns(uint256 activeValidatorsCount) -func (_Api *ApiCaller) GetStakingModuleActiveValidatorsCount(opts *bind.CallOpts, _stakingModuleId *big.Int) (*big.Int, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingModuleActiveValidatorsCount", _stakingModuleId) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetStakingModuleActiveValidatorsCount is a free data retrieval call binding the contract method 0x96b5d81c. -// -// Solidity: function getStakingModuleActiveValidatorsCount(uint256 _stakingModuleId) view returns(uint256 activeValidatorsCount) -func (_Api *ApiSession) GetStakingModuleActiveValidatorsCount(_stakingModuleId *big.Int) (*big.Int, error) { - return _Api.Contract.GetStakingModuleActiveValidatorsCount(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleActiveValidatorsCount is a free data retrieval call binding the contract method 0x96b5d81c. -// -// Solidity: function getStakingModuleActiveValidatorsCount(uint256 _stakingModuleId) view returns(uint256 activeValidatorsCount) -func (_Api *ApiCallerSession) GetStakingModuleActiveValidatorsCount(_stakingModuleId *big.Int) (*big.Int, error) { - return _Api.Contract.GetStakingModuleActiveValidatorsCount(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleDigests is a free data retrieval call binding the contract method 0x8525e3a1. -// -// Solidity: function getStakingModuleDigests(uint256[] _stakingModuleIds) view returns((uint256,uint256,(uint24,address,uint16,uint16,uint16,uint8,string,uint64,uint256,uint256),(uint256,uint256,uint256))[] digests) -func (_Api *ApiCaller) GetStakingModuleDigests(opts *bind.CallOpts, _stakingModuleIds []*big.Int) ([]StakingRouterStakingModuleDigest, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingModuleDigests", _stakingModuleIds) - - if err != nil { - return *new([]StakingRouterStakingModuleDigest), err - } - - out0 := *abi.ConvertType(out[0], new([]StakingRouterStakingModuleDigest)).(*[]StakingRouterStakingModuleDigest) - - return out0, err - -} - -// GetStakingModuleDigests is a free data retrieval call binding the contract method 0x8525e3a1. -// -// Solidity: function getStakingModuleDigests(uint256[] _stakingModuleIds) view returns((uint256,uint256,(uint24,address,uint16,uint16,uint16,uint8,string,uint64,uint256,uint256),(uint256,uint256,uint256))[] digests) -func (_Api *ApiSession) GetStakingModuleDigests(_stakingModuleIds []*big.Int) ([]StakingRouterStakingModuleDigest, error) { - return _Api.Contract.GetStakingModuleDigests(&_Api.CallOpts, _stakingModuleIds) -} - -// GetStakingModuleDigests is a free data retrieval call binding the contract method 0x8525e3a1. -// -// Solidity: function getStakingModuleDigests(uint256[] _stakingModuleIds) view returns((uint256,uint256,(uint24,address,uint16,uint16,uint16,uint8,string,uint64,uint256,uint256),(uint256,uint256,uint256))[] digests) -func (_Api *ApiCallerSession) GetStakingModuleDigests(_stakingModuleIds []*big.Int) ([]StakingRouterStakingModuleDigest, error) { - return _Api.Contract.GetStakingModuleDigests(&_Api.CallOpts, _stakingModuleIds) -} - -// GetStakingModuleIds is a free data retrieval call binding the contract method 0xf2aebb65. -// -// Solidity: function getStakingModuleIds() view returns(uint256[] stakingModuleIds) -func (_Api *ApiCaller) GetStakingModuleIds(opts *bind.CallOpts) ([]*big.Int, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingModuleIds") - - if err != nil { - return *new([]*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int) - - return out0, err - -} - -// GetStakingModuleIds is a free data retrieval call binding the contract method 0xf2aebb65. -// -// Solidity: function getStakingModuleIds() view returns(uint256[] stakingModuleIds) -func (_Api *ApiSession) GetStakingModuleIds() ([]*big.Int, error) { - return _Api.Contract.GetStakingModuleIds(&_Api.CallOpts) -} - -// GetStakingModuleIds is a free data retrieval call binding the contract method 0xf2aebb65. -// -// Solidity: function getStakingModuleIds() view returns(uint256[] stakingModuleIds) -func (_Api *ApiCallerSession) GetStakingModuleIds() ([]*big.Int, error) { - return _Api.Contract.GetStakingModuleIds(&_Api.CallOpts) -} - -// GetStakingModuleIsActive is a free data retrieval call binding the contract method 0x6608b11b. -// -// Solidity: function getStakingModuleIsActive(uint256 _stakingModuleId) view returns(bool) -func (_Api *ApiCaller) GetStakingModuleIsActive(opts *bind.CallOpts, _stakingModuleId *big.Int) (bool, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingModuleIsActive", _stakingModuleId) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// GetStakingModuleIsActive is a free data retrieval call binding the contract method 0x6608b11b. -// -// Solidity: function getStakingModuleIsActive(uint256 _stakingModuleId) view returns(bool) -func (_Api *ApiSession) GetStakingModuleIsActive(_stakingModuleId *big.Int) (bool, error) { - return _Api.Contract.GetStakingModuleIsActive(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleIsActive is a free data retrieval call binding the contract method 0x6608b11b. -// -// Solidity: function getStakingModuleIsActive(uint256 _stakingModuleId) view returns(bool) -func (_Api *ApiCallerSession) GetStakingModuleIsActive(_stakingModuleId *big.Int) (bool, error) { - return _Api.Contract.GetStakingModuleIsActive(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleIsDepositsPaused is a free data retrieval call binding the contract method 0xe24ce9f1. -// -// Solidity: function getStakingModuleIsDepositsPaused(uint256 _stakingModuleId) view returns(bool) -func (_Api *ApiCaller) GetStakingModuleIsDepositsPaused(opts *bind.CallOpts, _stakingModuleId *big.Int) (bool, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingModuleIsDepositsPaused", _stakingModuleId) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// GetStakingModuleIsDepositsPaused is a free data retrieval call binding the contract method 0xe24ce9f1. -// -// Solidity: function getStakingModuleIsDepositsPaused(uint256 _stakingModuleId) view returns(bool) -func (_Api *ApiSession) GetStakingModuleIsDepositsPaused(_stakingModuleId *big.Int) (bool, error) { - return _Api.Contract.GetStakingModuleIsDepositsPaused(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleIsDepositsPaused is a free data retrieval call binding the contract method 0xe24ce9f1. -// -// Solidity: function getStakingModuleIsDepositsPaused(uint256 _stakingModuleId) view returns(bool) -func (_Api *ApiCallerSession) GetStakingModuleIsDepositsPaused(_stakingModuleId *big.Int) (bool, error) { - return _Api.Contract.GetStakingModuleIsDepositsPaused(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleIsStopped is a free data retrieval call binding the contract method 0x6ada55b9. -// -// Solidity: function getStakingModuleIsStopped(uint256 _stakingModuleId) view returns(bool) -func (_Api *ApiCaller) GetStakingModuleIsStopped(opts *bind.CallOpts, _stakingModuleId *big.Int) (bool, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingModuleIsStopped", _stakingModuleId) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// GetStakingModuleIsStopped is a free data retrieval call binding the contract method 0x6ada55b9. -// -// Solidity: function getStakingModuleIsStopped(uint256 _stakingModuleId) view returns(bool) -func (_Api *ApiSession) GetStakingModuleIsStopped(_stakingModuleId *big.Int) (bool, error) { - return _Api.Contract.GetStakingModuleIsStopped(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleIsStopped is a free data retrieval call binding the contract method 0x6ada55b9. -// -// Solidity: function getStakingModuleIsStopped(uint256 _stakingModuleId) view returns(bool) -func (_Api *ApiCallerSession) GetStakingModuleIsStopped(_stakingModuleId *big.Int) (bool, error) { - return _Api.Contract.GetStakingModuleIsStopped(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleLastDepositBlock is a free data retrieval call binding the contract method 0x473e0433. -// -// Solidity: function getStakingModuleLastDepositBlock(uint256 _stakingModuleId) view returns(uint256) -func (_Api *ApiCaller) GetStakingModuleLastDepositBlock(opts *bind.CallOpts, _stakingModuleId *big.Int) (*big.Int, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingModuleLastDepositBlock", _stakingModuleId) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetStakingModuleLastDepositBlock is a free data retrieval call binding the contract method 0x473e0433. -// -// Solidity: function getStakingModuleLastDepositBlock(uint256 _stakingModuleId) view returns(uint256) -func (_Api *ApiSession) GetStakingModuleLastDepositBlock(_stakingModuleId *big.Int) (*big.Int, error) { - return _Api.Contract.GetStakingModuleLastDepositBlock(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleLastDepositBlock is a free data retrieval call binding the contract method 0x473e0433. -// -// Solidity: function getStakingModuleLastDepositBlock(uint256 _stakingModuleId) view returns(uint256) -func (_Api *ApiCallerSession) GetStakingModuleLastDepositBlock(_stakingModuleId *big.Int) (*big.Int, error) { - return _Api.Contract.GetStakingModuleLastDepositBlock(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleMaxDepositsCount is a free data retrieval call binding the contract method 0x19c64b79. -// -// Solidity: function getStakingModuleMaxDepositsCount(uint256 _stakingModuleId, uint256 _maxDepositsValue) view returns(uint256) -func (_Api *ApiCaller) GetStakingModuleMaxDepositsCount(opts *bind.CallOpts, _stakingModuleId *big.Int, _maxDepositsValue *big.Int) (*big.Int, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingModuleMaxDepositsCount", _stakingModuleId, _maxDepositsValue) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetStakingModuleMaxDepositsCount is a free data retrieval call binding the contract method 0x19c64b79. -// -// Solidity: function getStakingModuleMaxDepositsCount(uint256 _stakingModuleId, uint256 _maxDepositsValue) view returns(uint256) -func (_Api *ApiSession) GetStakingModuleMaxDepositsCount(_stakingModuleId *big.Int, _maxDepositsValue *big.Int) (*big.Int, error) { - return _Api.Contract.GetStakingModuleMaxDepositsCount(&_Api.CallOpts, _stakingModuleId, _maxDepositsValue) -} - -// GetStakingModuleMaxDepositsCount is a free data retrieval call binding the contract method 0x19c64b79. -// -// Solidity: function getStakingModuleMaxDepositsCount(uint256 _stakingModuleId, uint256 _maxDepositsValue) view returns(uint256) -func (_Api *ApiCallerSession) GetStakingModuleMaxDepositsCount(_stakingModuleId *big.Int, _maxDepositsValue *big.Int) (*big.Int, error) { - return _Api.Contract.GetStakingModuleMaxDepositsCount(&_Api.CallOpts, _stakingModuleId, _maxDepositsValue) -} - -// GetStakingModuleNonce is a free data retrieval call binding the contract method 0x0519fbbf. -// -// Solidity: function getStakingModuleNonce(uint256 _stakingModuleId) view returns(uint256) -func (_Api *ApiCaller) GetStakingModuleNonce(opts *bind.CallOpts, _stakingModuleId *big.Int) (*big.Int, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingModuleNonce", _stakingModuleId) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetStakingModuleNonce is a free data retrieval call binding the contract method 0x0519fbbf. -// -// Solidity: function getStakingModuleNonce(uint256 _stakingModuleId) view returns(uint256) -func (_Api *ApiSession) GetStakingModuleNonce(_stakingModuleId *big.Int) (*big.Int, error) { - return _Api.Contract.GetStakingModuleNonce(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleNonce is a free data retrieval call binding the contract method 0x0519fbbf. -// -// Solidity: function getStakingModuleNonce(uint256 _stakingModuleId) view returns(uint256) -func (_Api *ApiCallerSession) GetStakingModuleNonce(_stakingModuleId *big.Int) (*big.Int, error) { - return _Api.Contract.GetStakingModuleNonce(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleStatus is a free data retrieval call binding the contract method 0x9fc5a6ed. -// -// Solidity: function getStakingModuleStatus(uint256 _stakingModuleId) view returns(uint8) -func (_Api *ApiCaller) GetStakingModuleStatus(opts *bind.CallOpts, _stakingModuleId *big.Int) (uint8, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingModuleStatus", _stakingModuleId) - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// GetStakingModuleStatus is a free data retrieval call binding the contract method 0x9fc5a6ed. -// -// Solidity: function getStakingModuleStatus(uint256 _stakingModuleId) view returns(uint8) -func (_Api *ApiSession) GetStakingModuleStatus(_stakingModuleId *big.Int) (uint8, error) { - return _Api.Contract.GetStakingModuleStatus(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleStatus is a free data retrieval call binding the contract method 0x9fc5a6ed. -// -// Solidity: function getStakingModuleStatus(uint256 _stakingModuleId) view returns(uint8) -func (_Api *ApiCallerSession) GetStakingModuleStatus(_stakingModuleId *big.Int) (uint8, error) { - return _Api.Contract.GetStakingModuleStatus(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleSummary is a free data retrieval call binding the contract method 0x07e203ac. -// -// Solidity: function getStakingModuleSummary(uint256 _stakingModuleId) view returns((uint256,uint256,uint256) summary) -func (_Api *ApiCaller) GetStakingModuleSummary(opts *bind.CallOpts, _stakingModuleId *big.Int) (StakingRouterStakingModuleSummary, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingModuleSummary", _stakingModuleId) - - if err != nil { - return *new(StakingRouterStakingModuleSummary), err - } - - out0 := *abi.ConvertType(out[0], new(StakingRouterStakingModuleSummary)).(*StakingRouterStakingModuleSummary) - - return out0, err - -} - -// GetStakingModuleSummary is a free data retrieval call binding the contract method 0x07e203ac. -// -// Solidity: function getStakingModuleSummary(uint256 _stakingModuleId) view returns((uint256,uint256,uint256) summary) -func (_Api *ApiSession) GetStakingModuleSummary(_stakingModuleId *big.Int) (StakingRouterStakingModuleSummary, error) { - return _Api.Contract.GetStakingModuleSummary(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModuleSummary is a free data retrieval call binding the contract method 0x07e203ac. -// -// Solidity: function getStakingModuleSummary(uint256 _stakingModuleId) view returns((uint256,uint256,uint256) summary) -func (_Api *ApiCallerSession) GetStakingModuleSummary(_stakingModuleId *big.Int) (StakingRouterStakingModuleSummary, error) { - return _Api.Contract.GetStakingModuleSummary(&_Api.CallOpts, _stakingModuleId) -} - -// GetStakingModules is a free data retrieval call binding the contract method 0x6183214d. -// -// Solidity: function getStakingModules() view returns((uint24,address,uint16,uint16,uint16,uint8,string,uint64,uint256,uint256)[] res) -func (_Api *ApiCaller) GetStakingModules(opts *bind.CallOpts) ([]StakingRouterStakingModule, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingModules") - - if err != nil { - return *new([]StakingRouterStakingModule), err - } - - out0 := *abi.ConvertType(out[0], new([]StakingRouterStakingModule)).(*[]StakingRouterStakingModule) - - return out0, err - -} - -// GetStakingModules is a free data retrieval call binding the contract method 0x6183214d. -// -// Solidity: function getStakingModules() view returns((uint24,address,uint16,uint16,uint16,uint8,string,uint64,uint256,uint256)[] res) -func (_Api *ApiSession) GetStakingModules() ([]StakingRouterStakingModule, error) { - return _Api.Contract.GetStakingModules(&_Api.CallOpts) -} - -// GetStakingModules is a free data retrieval call binding the contract method 0x6183214d. -// -// Solidity: function getStakingModules() view returns((uint24,address,uint16,uint16,uint16,uint8,string,uint64,uint256,uint256)[] res) -func (_Api *ApiCallerSession) GetStakingModules() ([]StakingRouterStakingModule, error) { - return _Api.Contract.GetStakingModules(&_Api.CallOpts) -} - -// GetStakingModulesCount is a free data retrieval call binding the contract method 0x4a7583b6. -// -// Solidity: function getStakingModulesCount() view returns(uint256) -func (_Api *ApiCaller) GetStakingModulesCount(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingModulesCount") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetStakingModulesCount is a free data retrieval call binding the contract method 0x4a7583b6. -// -// Solidity: function getStakingModulesCount() view returns(uint256) -func (_Api *ApiSession) GetStakingModulesCount() (*big.Int, error) { - return _Api.Contract.GetStakingModulesCount(&_Api.CallOpts) -} - -// GetStakingModulesCount is a free data retrieval call binding the contract method 0x4a7583b6. -// -// Solidity: function getStakingModulesCount() view returns(uint256) -func (_Api *ApiCallerSession) GetStakingModulesCount() (*big.Int, error) { - return _Api.Contract.GetStakingModulesCount(&_Api.CallOpts) -} - -// GetStakingRewardsDistribution is a free data retrieval call binding the contract method 0xba21ccae. -// -// Solidity: function getStakingRewardsDistribution() view returns(address[] recipients, uint256[] stakingModuleIds, uint96[] stakingModuleFees, uint96 totalFee, uint256 precisionPoints) -func (_Api *ApiCaller) GetStakingRewardsDistribution(opts *bind.CallOpts) (struct { - Recipients []common.Address - StakingModuleIds []*big.Int - StakingModuleFees []*big.Int - TotalFee *big.Int - PrecisionPoints *big.Int -}, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getStakingRewardsDistribution") - - outstruct := new(struct { - Recipients []common.Address - StakingModuleIds []*big.Int - StakingModuleFees []*big.Int - TotalFee *big.Int - PrecisionPoints *big.Int - }) - if err != nil { - return *outstruct, err - } - - outstruct.Recipients = *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) - outstruct.StakingModuleIds = *abi.ConvertType(out[1], new([]*big.Int)).(*[]*big.Int) - outstruct.StakingModuleFees = *abi.ConvertType(out[2], new([]*big.Int)).(*[]*big.Int) - outstruct.TotalFee = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) - outstruct.PrecisionPoints = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) - - return *outstruct, err - -} - -// GetStakingRewardsDistribution is a free data retrieval call binding the contract method 0xba21ccae. -// -// Solidity: function getStakingRewardsDistribution() view returns(address[] recipients, uint256[] stakingModuleIds, uint96[] stakingModuleFees, uint96 totalFee, uint256 precisionPoints) -func (_Api *ApiSession) GetStakingRewardsDistribution() (struct { - Recipients []common.Address - StakingModuleIds []*big.Int - StakingModuleFees []*big.Int - TotalFee *big.Int - PrecisionPoints *big.Int -}, error) { - return _Api.Contract.GetStakingRewardsDistribution(&_Api.CallOpts) -} - -// GetStakingRewardsDistribution is a free data retrieval call binding the contract method 0xba21ccae. -// -// Solidity: function getStakingRewardsDistribution() view returns(address[] recipients, uint256[] stakingModuleIds, uint96[] stakingModuleFees, uint96 totalFee, uint256 precisionPoints) -func (_Api *ApiCallerSession) GetStakingRewardsDistribution() (struct { - Recipients []common.Address - StakingModuleIds []*big.Int - StakingModuleFees []*big.Int - TotalFee *big.Int - PrecisionPoints *big.Int -}, error) { - return _Api.Contract.GetStakingRewardsDistribution(&_Api.CallOpts) -} - -// GetTotalFeeE4Precision is a free data retrieval call binding the contract method 0x9fbb7bae. -// -// Solidity: function getTotalFeeE4Precision() view returns(uint16 totalFee) -func (_Api *ApiCaller) GetTotalFeeE4Precision(opts *bind.CallOpts) (uint16, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getTotalFeeE4Precision") - - if err != nil { - return *new(uint16), err - } - - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) - - return out0, err - -} - -// GetTotalFeeE4Precision is a free data retrieval call binding the contract method 0x9fbb7bae. -// -// Solidity: function getTotalFeeE4Precision() view returns(uint16 totalFee) -func (_Api *ApiSession) GetTotalFeeE4Precision() (uint16, error) { - return _Api.Contract.GetTotalFeeE4Precision(&_Api.CallOpts) -} - -// GetTotalFeeE4Precision is a free data retrieval call binding the contract method 0x9fbb7bae. -// -// Solidity: function getTotalFeeE4Precision() view returns(uint16 totalFee) -func (_Api *ApiCallerSession) GetTotalFeeE4Precision() (uint16, error) { - return _Api.Contract.GetTotalFeeE4Precision(&_Api.CallOpts) -} - -// GetWithdrawalCredentials is a free data retrieval call binding the contract method 0x56396715. -// -// Solidity: function getWithdrawalCredentials() view returns(bytes32) -func (_Api *ApiCaller) GetWithdrawalCredentials(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "getWithdrawalCredentials") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GetWithdrawalCredentials is a free data retrieval call binding the contract method 0x56396715. -// -// Solidity: function getWithdrawalCredentials() view returns(bytes32) -func (_Api *ApiSession) GetWithdrawalCredentials() ([32]byte, error) { - return _Api.Contract.GetWithdrawalCredentials(&_Api.CallOpts) -} - -// GetWithdrawalCredentials is a free data retrieval call binding the contract method 0x56396715. -// -// Solidity: function getWithdrawalCredentials() view returns(bytes32) -func (_Api *ApiCallerSession) GetWithdrawalCredentials() ([32]byte, error) { - return _Api.Contract.GetWithdrawalCredentials(&_Api.CallOpts) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_Api *ApiCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "hasRole", role, account) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_Api *ApiSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _Api.Contract.HasRole(&_Api.CallOpts, role, account) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_Api *ApiCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _Api.Contract.HasRole(&_Api.CallOpts, role, account) -} - -// HasStakingModule is a free data retrieval call binding the contract method 0xa734329c. -// -// Solidity: function hasStakingModule(uint256 _stakingModuleId) view returns(bool) -func (_Api *ApiCaller) HasStakingModule(opts *bind.CallOpts, _stakingModuleId *big.Int) (bool, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "hasStakingModule", _stakingModuleId) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// HasStakingModule is a free data retrieval call binding the contract method 0xa734329c. -// -// Solidity: function hasStakingModule(uint256 _stakingModuleId) view returns(bool) -func (_Api *ApiSession) HasStakingModule(_stakingModuleId *big.Int) (bool, error) { - return _Api.Contract.HasStakingModule(&_Api.CallOpts, _stakingModuleId) -} - -// HasStakingModule is a free data retrieval call binding the contract method 0xa734329c. -// -// Solidity: function hasStakingModule(uint256 _stakingModuleId) view returns(bool) -func (_Api *ApiCallerSession) HasStakingModule(_stakingModuleId *big.Int) (bool, error) { - return _Api.Contract.HasStakingModule(&_Api.CallOpts, _stakingModuleId) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_Api *ApiCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { - var out []interface{} - err := _Api.contract.Call(opts, &out, "supportsInterface", interfaceId) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_Api *ApiSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _Api.Contract.SupportsInterface(&_Api.CallOpts, interfaceId) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_Api *ApiCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _Api.Contract.SupportsInterface(&_Api.CallOpts, interfaceId) -} - -// AddStakingModule is a paid mutator transaction binding the contract method 0x3e54ee5b. -// -// Solidity: function addStakingModule(string _name, address _stakingModuleAddress, uint256 _targetShare, uint256 _stakingModuleFee, uint256 _treasuryFee) returns() -func (_Api *ApiTransactor) AddStakingModule(opts *bind.TransactOpts, _name string, _stakingModuleAddress common.Address, _targetShare *big.Int, _stakingModuleFee *big.Int, _treasuryFee *big.Int) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "addStakingModule", _name, _stakingModuleAddress, _targetShare, _stakingModuleFee, _treasuryFee) -} - -// AddStakingModule is a paid mutator transaction binding the contract method 0x3e54ee5b. -// -// Solidity: function addStakingModule(string _name, address _stakingModuleAddress, uint256 _targetShare, uint256 _stakingModuleFee, uint256 _treasuryFee) returns() -func (_Api *ApiSession) AddStakingModule(_name string, _stakingModuleAddress common.Address, _targetShare *big.Int, _stakingModuleFee *big.Int, _treasuryFee *big.Int) (*types.Transaction, error) { - return _Api.Contract.AddStakingModule(&_Api.TransactOpts, _name, _stakingModuleAddress, _targetShare, _stakingModuleFee, _treasuryFee) -} - -// AddStakingModule is a paid mutator transaction binding the contract method 0x3e54ee5b. -// -// Solidity: function addStakingModule(string _name, address _stakingModuleAddress, uint256 _targetShare, uint256 _stakingModuleFee, uint256 _treasuryFee) returns() -func (_Api *ApiTransactorSession) AddStakingModule(_name string, _stakingModuleAddress common.Address, _targetShare *big.Int, _stakingModuleFee *big.Int, _treasuryFee *big.Int) (*types.Transaction, error) { - return _Api.Contract.AddStakingModule(&_Api.TransactOpts, _name, _stakingModuleAddress, _targetShare, _stakingModuleFee, _treasuryFee) -} - -// Deposit is a paid mutator transaction binding the contract method 0xaa0b7db7. -// -// Solidity: function deposit(uint256 _depositsCount, uint256 _stakingModuleId, bytes _depositCalldata) payable returns() -func (_Api *ApiTransactor) Deposit(opts *bind.TransactOpts, _depositsCount *big.Int, _stakingModuleId *big.Int, _depositCalldata []byte) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "deposit", _depositsCount, _stakingModuleId, _depositCalldata) -} - -// Deposit is a paid mutator transaction binding the contract method 0xaa0b7db7. -// -// Solidity: function deposit(uint256 _depositsCount, uint256 _stakingModuleId, bytes _depositCalldata) payable returns() -func (_Api *ApiSession) Deposit(_depositsCount *big.Int, _stakingModuleId *big.Int, _depositCalldata []byte) (*types.Transaction, error) { - return _Api.Contract.Deposit(&_Api.TransactOpts, _depositsCount, _stakingModuleId, _depositCalldata) -} - -// Deposit is a paid mutator transaction binding the contract method 0xaa0b7db7. -// -// Solidity: function deposit(uint256 _depositsCount, uint256 _stakingModuleId, bytes _depositCalldata) payable returns() -func (_Api *ApiTransactorSession) Deposit(_depositsCount *big.Int, _stakingModuleId *big.Int, _depositCalldata []byte) (*types.Transaction, error) { - return _Api.Contract.Deposit(&_Api.TransactOpts, _depositsCount, _stakingModuleId, _depositCalldata) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_Api *ApiTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "grantRole", role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_Api *ApiSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _Api.Contract.GrantRole(&_Api.TransactOpts, role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_Api *ApiTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _Api.Contract.GrantRole(&_Api.TransactOpts, role, account) -} - -// Initialize is a paid mutator transaction binding the contract method 0x6133f985. -// -// Solidity: function initialize(address _admin, address _lido, bytes32 _withdrawalCredentials) returns() -func (_Api *ApiTransactor) Initialize(opts *bind.TransactOpts, _admin common.Address, _lido common.Address, _withdrawalCredentials [32]byte) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "initialize", _admin, _lido, _withdrawalCredentials) -} - -// Initialize is a paid mutator transaction binding the contract method 0x6133f985. -// -// Solidity: function initialize(address _admin, address _lido, bytes32 _withdrawalCredentials) returns() -func (_Api *ApiSession) Initialize(_admin common.Address, _lido common.Address, _withdrawalCredentials [32]byte) (*types.Transaction, error) { - return _Api.Contract.Initialize(&_Api.TransactOpts, _admin, _lido, _withdrawalCredentials) -} - -// Initialize is a paid mutator transaction binding the contract method 0x6133f985. -// -// Solidity: function initialize(address _admin, address _lido, bytes32 _withdrawalCredentials) returns() -func (_Api *ApiTransactorSession) Initialize(_admin common.Address, _lido common.Address, _withdrawalCredentials [32]byte) (*types.Transaction, error) { - return _Api.Contract.Initialize(&_Api.TransactOpts, _admin, _lido, _withdrawalCredentials) -} - -// OnValidatorsCountsByNodeOperatorReportingFinished is a paid mutator transaction binding the contract method 0xdb3c7ba7. -// -// Solidity: function onValidatorsCountsByNodeOperatorReportingFinished() returns() -func (_Api *ApiTransactor) OnValidatorsCountsByNodeOperatorReportingFinished(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "onValidatorsCountsByNodeOperatorReportingFinished") -} - -// OnValidatorsCountsByNodeOperatorReportingFinished is a paid mutator transaction binding the contract method 0xdb3c7ba7. -// -// Solidity: function onValidatorsCountsByNodeOperatorReportingFinished() returns() -func (_Api *ApiSession) OnValidatorsCountsByNodeOperatorReportingFinished() (*types.Transaction, error) { - return _Api.Contract.OnValidatorsCountsByNodeOperatorReportingFinished(&_Api.TransactOpts) -} - -// OnValidatorsCountsByNodeOperatorReportingFinished is a paid mutator transaction binding the contract method 0xdb3c7ba7. -// -// Solidity: function onValidatorsCountsByNodeOperatorReportingFinished() returns() -func (_Api *ApiTransactorSession) OnValidatorsCountsByNodeOperatorReportingFinished() (*types.Transaction, error) { - return _Api.Contract.OnValidatorsCountsByNodeOperatorReportingFinished(&_Api.TransactOpts) -} - -// PauseStakingModule is a paid mutator transaction binding the contract method 0x5bf55e40. -// -// Solidity: function pauseStakingModule(uint256 _stakingModuleId) returns() -func (_Api *ApiTransactor) PauseStakingModule(opts *bind.TransactOpts, _stakingModuleId *big.Int) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "pauseStakingModule", _stakingModuleId) -} - -// PauseStakingModule is a paid mutator transaction binding the contract method 0x5bf55e40. -// -// Solidity: function pauseStakingModule(uint256 _stakingModuleId) returns() -func (_Api *ApiSession) PauseStakingModule(_stakingModuleId *big.Int) (*types.Transaction, error) { - return _Api.Contract.PauseStakingModule(&_Api.TransactOpts, _stakingModuleId) -} - -// PauseStakingModule is a paid mutator transaction binding the contract method 0x5bf55e40. -// -// Solidity: function pauseStakingModule(uint256 _stakingModuleId) returns() -func (_Api *ApiTransactorSession) PauseStakingModule(_stakingModuleId *big.Int) (*types.Transaction, error) { - return _Api.Contract.PauseStakingModule(&_Api.TransactOpts, _stakingModuleId) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address account) returns() -func (_Api *ApiTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "renounceRole", role, account) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address account) returns() -func (_Api *ApiSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _Api.Contract.RenounceRole(&_Api.TransactOpts, role, account) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address account) returns() -func (_Api *ApiTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _Api.Contract.RenounceRole(&_Api.TransactOpts, role, account) -} - -// ReportRewardsMinted is a paid mutator transaction binding the contract method 0xaf124097. -// -// Solidity: function reportRewardsMinted(uint256[] _stakingModuleIds, uint256[] _totalShares) returns() -func (_Api *ApiTransactor) ReportRewardsMinted(opts *bind.TransactOpts, _stakingModuleIds []*big.Int, _totalShares []*big.Int) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "reportRewardsMinted", _stakingModuleIds, _totalShares) -} - -// ReportRewardsMinted is a paid mutator transaction binding the contract method 0xaf124097. -// -// Solidity: function reportRewardsMinted(uint256[] _stakingModuleIds, uint256[] _totalShares) returns() -func (_Api *ApiSession) ReportRewardsMinted(_stakingModuleIds []*big.Int, _totalShares []*big.Int) (*types.Transaction, error) { - return _Api.Contract.ReportRewardsMinted(&_Api.TransactOpts, _stakingModuleIds, _totalShares) -} - -// ReportRewardsMinted is a paid mutator transaction binding the contract method 0xaf124097. -// -// Solidity: function reportRewardsMinted(uint256[] _stakingModuleIds, uint256[] _totalShares) returns() -func (_Api *ApiTransactorSession) ReportRewardsMinted(_stakingModuleIds []*big.Int, _totalShares []*big.Int) (*types.Transaction, error) { - return _Api.Contract.ReportRewardsMinted(&_Api.TransactOpts, _stakingModuleIds, _totalShares) -} - -// ReportStakingModuleExitedValidatorsCountByNodeOperator is a paid mutator transaction binding the contract method 0xc8ac4980. -// -// Solidity: function reportStakingModuleExitedValidatorsCountByNodeOperator(uint256 _stakingModuleId, bytes _nodeOperatorIds, bytes _exitedValidatorsCounts) returns() -func (_Api *ApiTransactor) ReportStakingModuleExitedValidatorsCountByNodeOperator(opts *bind.TransactOpts, _stakingModuleId *big.Int, _nodeOperatorIds []byte, _exitedValidatorsCounts []byte) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "reportStakingModuleExitedValidatorsCountByNodeOperator", _stakingModuleId, _nodeOperatorIds, _exitedValidatorsCounts) -} - -// ReportStakingModuleExitedValidatorsCountByNodeOperator is a paid mutator transaction binding the contract method 0xc8ac4980. -// -// Solidity: function reportStakingModuleExitedValidatorsCountByNodeOperator(uint256 _stakingModuleId, bytes _nodeOperatorIds, bytes _exitedValidatorsCounts) returns() -func (_Api *ApiSession) ReportStakingModuleExitedValidatorsCountByNodeOperator(_stakingModuleId *big.Int, _nodeOperatorIds []byte, _exitedValidatorsCounts []byte) (*types.Transaction, error) { - return _Api.Contract.ReportStakingModuleExitedValidatorsCountByNodeOperator(&_Api.TransactOpts, _stakingModuleId, _nodeOperatorIds, _exitedValidatorsCounts) -} - -// ReportStakingModuleExitedValidatorsCountByNodeOperator is a paid mutator transaction binding the contract method 0xc8ac4980. -// -// Solidity: function reportStakingModuleExitedValidatorsCountByNodeOperator(uint256 _stakingModuleId, bytes _nodeOperatorIds, bytes _exitedValidatorsCounts) returns() -func (_Api *ApiTransactorSession) ReportStakingModuleExitedValidatorsCountByNodeOperator(_stakingModuleId *big.Int, _nodeOperatorIds []byte, _exitedValidatorsCounts []byte) (*types.Transaction, error) { - return _Api.Contract.ReportStakingModuleExitedValidatorsCountByNodeOperator(&_Api.TransactOpts, _stakingModuleId, _nodeOperatorIds, _exitedValidatorsCounts) -} - -// ReportStakingModuleStuckValidatorsCountByNodeOperator is a paid mutator transaction binding the contract method 0xcb589b9a. -// -// Solidity: function reportStakingModuleStuckValidatorsCountByNodeOperator(uint256 _stakingModuleId, bytes _nodeOperatorIds, bytes _stuckValidatorsCounts) returns() -func (_Api *ApiTransactor) ReportStakingModuleStuckValidatorsCountByNodeOperator(opts *bind.TransactOpts, _stakingModuleId *big.Int, _nodeOperatorIds []byte, _stuckValidatorsCounts []byte) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "reportStakingModuleStuckValidatorsCountByNodeOperator", _stakingModuleId, _nodeOperatorIds, _stuckValidatorsCounts) -} - -// ReportStakingModuleStuckValidatorsCountByNodeOperator is a paid mutator transaction binding the contract method 0xcb589b9a. -// -// Solidity: function reportStakingModuleStuckValidatorsCountByNodeOperator(uint256 _stakingModuleId, bytes _nodeOperatorIds, bytes _stuckValidatorsCounts) returns() -func (_Api *ApiSession) ReportStakingModuleStuckValidatorsCountByNodeOperator(_stakingModuleId *big.Int, _nodeOperatorIds []byte, _stuckValidatorsCounts []byte) (*types.Transaction, error) { - return _Api.Contract.ReportStakingModuleStuckValidatorsCountByNodeOperator(&_Api.TransactOpts, _stakingModuleId, _nodeOperatorIds, _stuckValidatorsCounts) -} - -// ReportStakingModuleStuckValidatorsCountByNodeOperator is a paid mutator transaction binding the contract method 0xcb589b9a. -// -// Solidity: function reportStakingModuleStuckValidatorsCountByNodeOperator(uint256 _stakingModuleId, bytes _nodeOperatorIds, bytes _stuckValidatorsCounts) returns() -func (_Api *ApiTransactorSession) ReportStakingModuleStuckValidatorsCountByNodeOperator(_stakingModuleId *big.Int, _nodeOperatorIds []byte, _stuckValidatorsCounts []byte) (*types.Transaction, error) { - return _Api.Contract.ReportStakingModuleStuckValidatorsCountByNodeOperator(&_Api.TransactOpts, _stakingModuleId, _nodeOperatorIds, _stuckValidatorsCounts) -} - -// ResumeStakingModule is a paid mutator transaction binding the contract method 0xd861c584. -// -// Solidity: function resumeStakingModule(uint256 _stakingModuleId) returns() -func (_Api *ApiTransactor) ResumeStakingModule(opts *bind.TransactOpts, _stakingModuleId *big.Int) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "resumeStakingModule", _stakingModuleId) -} - -// ResumeStakingModule is a paid mutator transaction binding the contract method 0xd861c584. -// -// Solidity: function resumeStakingModule(uint256 _stakingModuleId) returns() -func (_Api *ApiSession) ResumeStakingModule(_stakingModuleId *big.Int) (*types.Transaction, error) { - return _Api.Contract.ResumeStakingModule(&_Api.TransactOpts, _stakingModuleId) -} - -// ResumeStakingModule is a paid mutator transaction binding the contract method 0xd861c584. -// -// Solidity: function resumeStakingModule(uint256 _stakingModuleId) returns() -func (_Api *ApiTransactorSession) ResumeStakingModule(_stakingModuleId *big.Int) (*types.Transaction, error) { - return _Api.Contract.ResumeStakingModule(&_Api.TransactOpts, _stakingModuleId) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_Api *ApiTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "revokeRole", role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_Api *ApiSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _Api.Contract.RevokeRole(&_Api.TransactOpts, role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_Api *ApiTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _Api.Contract.RevokeRole(&_Api.TransactOpts, role, account) -} - -// SetStakingModuleStatus is a paid mutator transaction binding the contract method 0xd0a2b1b8. -// -// Solidity: function setStakingModuleStatus(uint256 _stakingModuleId, uint8 _status) returns() -func (_Api *ApiTransactor) SetStakingModuleStatus(opts *bind.TransactOpts, _stakingModuleId *big.Int, _status uint8) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "setStakingModuleStatus", _stakingModuleId, _status) -} - -// SetStakingModuleStatus is a paid mutator transaction binding the contract method 0xd0a2b1b8. -// -// Solidity: function setStakingModuleStatus(uint256 _stakingModuleId, uint8 _status) returns() -func (_Api *ApiSession) SetStakingModuleStatus(_stakingModuleId *big.Int, _status uint8) (*types.Transaction, error) { - return _Api.Contract.SetStakingModuleStatus(&_Api.TransactOpts, _stakingModuleId, _status) -} - -// SetStakingModuleStatus is a paid mutator transaction binding the contract method 0xd0a2b1b8. -// -// Solidity: function setStakingModuleStatus(uint256 _stakingModuleId, uint8 _status) returns() -func (_Api *ApiTransactorSession) SetStakingModuleStatus(_stakingModuleId *big.Int, _status uint8) (*types.Transaction, error) { - return _Api.Contract.SetStakingModuleStatus(&_Api.TransactOpts, _stakingModuleId, _status) -} - -// SetWithdrawalCredentials is a paid mutator transaction binding the contract method 0xe97ee8cc. -// -// Solidity: function setWithdrawalCredentials(bytes32 _withdrawalCredentials) returns() -func (_Api *ApiTransactor) SetWithdrawalCredentials(opts *bind.TransactOpts, _withdrawalCredentials [32]byte) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "setWithdrawalCredentials", _withdrawalCredentials) -} - -// SetWithdrawalCredentials is a paid mutator transaction binding the contract method 0xe97ee8cc. -// -// Solidity: function setWithdrawalCredentials(bytes32 _withdrawalCredentials) returns() -func (_Api *ApiSession) SetWithdrawalCredentials(_withdrawalCredentials [32]byte) (*types.Transaction, error) { - return _Api.Contract.SetWithdrawalCredentials(&_Api.TransactOpts, _withdrawalCredentials) -} - -// SetWithdrawalCredentials is a paid mutator transaction binding the contract method 0xe97ee8cc. -// -// Solidity: function setWithdrawalCredentials(bytes32 _withdrawalCredentials) returns() -func (_Api *ApiTransactorSession) SetWithdrawalCredentials(_withdrawalCredentials [32]byte) (*types.Transaction, error) { - return _Api.Contract.SetWithdrawalCredentials(&_Api.TransactOpts, _withdrawalCredentials) -} - -// UnsafeSetExitedValidatorsCount is a paid mutator transaction binding the contract method 0x072859c7. -// -// Solidity: function unsafeSetExitedValidatorsCount(uint256 _stakingModuleId, uint256 _nodeOperatorId, bool _triggerUpdateFinish, (uint256,uint256,uint256,uint256,uint256,uint256) _correction) returns() -func (_Api *ApiTransactor) UnsafeSetExitedValidatorsCount(opts *bind.TransactOpts, _stakingModuleId *big.Int, _nodeOperatorId *big.Int, _triggerUpdateFinish bool, _correction StakingRouterValidatorsCountsCorrection) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "unsafeSetExitedValidatorsCount", _stakingModuleId, _nodeOperatorId, _triggerUpdateFinish, _correction) -} - -// UnsafeSetExitedValidatorsCount is a paid mutator transaction binding the contract method 0x072859c7. -// -// Solidity: function unsafeSetExitedValidatorsCount(uint256 _stakingModuleId, uint256 _nodeOperatorId, bool _triggerUpdateFinish, (uint256,uint256,uint256,uint256,uint256,uint256) _correction) returns() -func (_Api *ApiSession) UnsafeSetExitedValidatorsCount(_stakingModuleId *big.Int, _nodeOperatorId *big.Int, _triggerUpdateFinish bool, _correction StakingRouterValidatorsCountsCorrection) (*types.Transaction, error) { - return _Api.Contract.UnsafeSetExitedValidatorsCount(&_Api.TransactOpts, _stakingModuleId, _nodeOperatorId, _triggerUpdateFinish, _correction) -} - -// UnsafeSetExitedValidatorsCount is a paid mutator transaction binding the contract method 0x072859c7. -// -// Solidity: function unsafeSetExitedValidatorsCount(uint256 _stakingModuleId, uint256 _nodeOperatorId, bool _triggerUpdateFinish, (uint256,uint256,uint256,uint256,uint256,uint256) _correction) returns() -func (_Api *ApiTransactorSession) UnsafeSetExitedValidatorsCount(_stakingModuleId *big.Int, _nodeOperatorId *big.Int, _triggerUpdateFinish bool, _correction StakingRouterValidatorsCountsCorrection) (*types.Transaction, error) { - return _Api.Contract.UnsafeSetExitedValidatorsCount(&_Api.TransactOpts, _stakingModuleId, _nodeOperatorId, _triggerUpdateFinish, _correction) -} - -// UpdateExitedValidatorsCountByStakingModule is a paid mutator transaction binding the contract method 0xabd44a24. -// -// Solidity: function updateExitedValidatorsCountByStakingModule(uint256[] _stakingModuleIds, uint256[] _exitedValidatorsCounts) returns(uint256) -func (_Api *ApiTransactor) UpdateExitedValidatorsCountByStakingModule(opts *bind.TransactOpts, _stakingModuleIds []*big.Int, _exitedValidatorsCounts []*big.Int) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "updateExitedValidatorsCountByStakingModule", _stakingModuleIds, _exitedValidatorsCounts) -} - -// UpdateExitedValidatorsCountByStakingModule is a paid mutator transaction binding the contract method 0xabd44a24. -// -// Solidity: function updateExitedValidatorsCountByStakingModule(uint256[] _stakingModuleIds, uint256[] _exitedValidatorsCounts) returns(uint256) -func (_Api *ApiSession) UpdateExitedValidatorsCountByStakingModule(_stakingModuleIds []*big.Int, _exitedValidatorsCounts []*big.Int) (*types.Transaction, error) { - return _Api.Contract.UpdateExitedValidatorsCountByStakingModule(&_Api.TransactOpts, _stakingModuleIds, _exitedValidatorsCounts) -} - -// UpdateExitedValidatorsCountByStakingModule is a paid mutator transaction binding the contract method 0xabd44a24. -// -// Solidity: function updateExitedValidatorsCountByStakingModule(uint256[] _stakingModuleIds, uint256[] _exitedValidatorsCounts) returns(uint256) -func (_Api *ApiTransactorSession) UpdateExitedValidatorsCountByStakingModule(_stakingModuleIds []*big.Int, _exitedValidatorsCounts []*big.Int) (*types.Transaction, error) { - return _Api.Contract.UpdateExitedValidatorsCountByStakingModule(&_Api.TransactOpts, _stakingModuleIds, _exitedValidatorsCounts) -} - -// UpdateRefundedValidatorsCount is a paid mutator transaction binding the contract method 0xe1b92a5c. -// -// Solidity: function updateRefundedValidatorsCount(uint256 _stakingModuleId, uint256 _nodeOperatorId, uint256 _refundedValidatorsCount) returns() -func (_Api *ApiTransactor) UpdateRefundedValidatorsCount(opts *bind.TransactOpts, _stakingModuleId *big.Int, _nodeOperatorId *big.Int, _refundedValidatorsCount *big.Int) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "updateRefundedValidatorsCount", _stakingModuleId, _nodeOperatorId, _refundedValidatorsCount) -} - -// UpdateRefundedValidatorsCount is a paid mutator transaction binding the contract method 0xe1b92a5c. -// -// Solidity: function updateRefundedValidatorsCount(uint256 _stakingModuleId, uint256 _nodeOperatorId, uint256 _refundedValidatorsCount) returns() -func (_Api *ApiSession) UpdateRefundedValidatorsCount(_stakingModuleId *big.Int, _nodeOperatorId *big.Int, _refundedValidatorsCount *big.Int) (*types.Transaction, error) { - return _Api.Contract.UpdateRefundedValidatorsCount(&_Api.TransactOpts, _stakingModuleId, _nodeOperatorId, _refundedValidatorsCount) -} - -// UpdateRefundedValidatorsCount is a paid mutator transaction binding the contract method 0xe1b92a5c. -// -// Solidity: function updateRefundedValidatorsCount(uint256 _stakingModuleId, uint256 _nodeOperatorId, uint256 _refundedValidatorsCount) returns() -func (_Api *ApiTransactorSession) UpdateRefundedValidatorsCount(_stakingModuleId *big.Int, _nodeOperatorId *big.Int, _refundedValidatorsCount *big.Int) (*types.Transaction, error) { - return _Api.Contract.UpdateRefundedValidatorsCount(&_Api.TransactOpts, _stakingModuleId, _nodeOperatorId, _refundedValidatorsCount) -} - -// UpdateStakingModule is a paid mutator transaction binding the contract method 0x8dc70c57. -// -// Solidity: function updateStakingModule(uint256 _stakingModuleId, uint256 _targetShare, uint256 _stakingModuleFee, uint256 _treasuryFee) returns() -func (_Api *ApiTransactor) UpdateStakingModule(opts *bind.TransactOpts, _stakingModuleId *big.Int, _targetShare *big.Int, _stakingModuleFee *big.Int, _treasuryFee *big.Int) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "updateStakingModule", _stakingModuleId, _targetShare, _stakingModuleFee, _treasuryFee) -} - -// UpdateStakingModule is a paid mutator transaction binding the contract method 0x8dc70c57. -// -// Solidity: function updateStakingModule(uint256 _stakingModuleId, uint256 _targetShare, uint256 _stakingModuleFee, uint256 _treasuryFee) returns() -func (_Api *ApiSession) UpdateStakingModule(_stakingModuleId *big.Int, _targetShare *big.Int, _stakingModuleFee *big.Int, _treasuryFee *big.Int) (*types.Transaction, error) { - return _Api.Contract.UpdateStakingModule(&_Api.TransactOpts, _stakingModuleId, _targetShare, _stakingModuleFee, _treasuryFee) -} - -// UpdateStakingModule is a paid mutator transaction binding the contract method 0x8dc70c57. -// -// Solidity: function updateStakingModule(uint256 _stakingModuleId, uint256 _targetShare, uint256 _stakingModuleFee, uint256 _treasuryFee) returns() -func (_Api *ApiTransactorSession) UpdateStakingModule(_stakingModuleId *big.Int, _targetShare *big.Int, _stakingModuleFee *big.Int, _treasuryFee *big.Int) (*types.Transaction, error) { - return _Api.Contract.UpdateStakingModule(&_Api.TransactOpts, _stakingModuleId, _targetShare, _stakingModuleFee, _treasuryFee) -} - -// UpdateTargetValidatorsLimits is a paid mutator transaction binding the contract method 0x7443f523. -// -// Solidity: function updateTargetValidatorsLimits(uint256 _stakingModuleId, uint256 _nodeOperatorId, bool _isTargetLimitActive, uint256 _targetLimit) returns() -func (_Api *ApiTransactor) UpdateTargetValidatorsLimits(opts *bind.TransactOpts, _stakingModuleId *big.Int, _nodeOperatorId *big.Int, _isTargetLimitActive bool, _targetLimit *big.Int) (*types.Transaction, error) { - return _Api.contract.Transact(opts, "updateTargetValidatorsLimits", _stakingModuleId, _nodeOperatorId, _isTargetLimitActive, _targetLimit) -} - -// UpdateTargetValidatorsLimits is a paid mutator transaction binding the contract method 0x7443f523. -// -// Solidity: function updateTargetValidatorsLimits(uint256 _stakingModuleId, uint256 _nodeOperatorId, bool _isTargetLimitActive, uint256 _targetLimit) returns() -func (_Api *ApiSession) UpdateTargetValidatorsLimits(_stakingModuleId *big.Int, _nodeOperatorId *big.Int, _isTargetLimitActive bool, _targetLimit *big.Int) (*types.Transaction, error) { - return _Api.Contract.UpdateTargetValidatorsLimits(&_Api.TransactOpts, _stakingModuleId, _nodeOperatorId, _isTargetLimitActive, _targetLimit) -} - -// UpdateTargetValidatorsLimits is a paid mutator transaction binding the contract method 0x7443f523. -// -// Solidity: function updateTargetValidatorsLimits(uint256 _stakingModuleId, uint256 _nodeOperatorId, bool _isTargetLimitActive, uint256 _targetLimit) returns() -func (_Api *ApiTransactorSession) UpdateTargetValidatorsLimits(_stakingModuleId *big.Int, _nodeOperatorId *big.Int, _isTargetLimitActive bool, _targetLimit *big.Int) (*types.Transaction, error) { - return _Api.Contract.UpdateTargetValidatorsLimits(&_Api.TransactOpts, _stakingModuleId, _nodeOperatorId, _isTargetLimitActive, _targetLimit) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_Api *ApiTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Api.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 (_Api *ApiSession) Receive() (*types.Transaction, error) { - return _Api.Contract.Receive(&_Api.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_Api *ApiTransactorSession) Receive() (*types.Transaction, error) { - return _Api.Contract.Receive(&_Api.TransactOpts) -} - -// ApiContractVersionSetIterator is returned from FilterContractVersionSet and is used to iterate over the raw logs and unpacked data for ContractVersionSet events raised by the Api contract. -type ApiContractVersionSetIterator struct { - Event *ApiContractVersionSet // 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 *ApiContractVersionSetIterator) 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(ApiContractVersionSet) - 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(ApiContractVersionSet) - 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 *ApiContractVersionSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiContractVersionSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiContractVersionSet represents a ContractVersionSet event raised by the Api contract. -type ApiContractVersionSet struct { - Version *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterContractVersionSet is a free log retrieval operation binding the contract event 0xfddcded6b4f4730c226821172046b48372d3cd963c159701ae1b7c3bcac541bb. -// -// Solidity: event ContractVersionSet(uint256 version) -func (_Api *ApiFilterer) FilterContractVersionSet(opts *bind.FilterOpts) (*ApiContractVersionSetIterator, error) { - - logs, sub, err := _Api.contract.FilterLogs(opts, "ContractVersionSet") - if err != nil { - return nil, err - } - return &ApiContractVersionSetIterator{contract: _Api.contract, event: "ContractVersionSet", logs: logs, sub: sub}, nil -} - -// WatchContractVersionSet is a free log subscription operation binding the contract event 0xfddcded6b4f4730c226821172046b48372d3cd963c159701ae1b7c3bcac541bb. -// -// Solidity: event ContractVersionSet(uint256 version) -func (_Api *ApiFilterer) WatchContractVersionSet(opts *bind.WatchOpts, sink chan<- *ApiContractVersionSet) (event.Subscription, error) { - - logs, sub, err := _Api.contract.WatchLogs(opts, "ContractVersionSet") - 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(ApiContractVersionSet) - if err := _Api.contract.UnpackLog(event, "ContractVersionSet", 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 -} - -// ParseContractVersionSet is a log parse operation binding the contract event 0xfddcded6b4f4730c226821172046b48372d3cd963c159701ae1b7c3bcac541bb. -// -// Solidity: event ContractVersionSet(uint256 version) -func (_Api *ApiFilterer) ParseContractVersionSet(log types.Log) (*ApiContractVersionSet, error) { - event := new(ApiContractVersionSet) - if err := _Api.contract.UnpackLog(event, "ContractVersionSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiExitedAndStuckValidatorsCountsUpdateFailedIterator is returned from FilterExitedAndStuckValidatorsCountsUpdateFailed and is used to iterate over the raw logs and unpacked data for ExitedAndStuckValidatorsCountsUpdateFailed events raised by the Api contract. -type ApiExitedAndStuckValidatorsCountsUpdateFailedIterator struct { - Event *ApiExitedAndStuckValidatorsCountsUpdateFailed // 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 *ApiExitedAndStuckValidatorsCountsUpdateFailedIterator) 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(ApiExitedAndStuckValidatorsCountsUpdateFailed) - 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(ApiExitedAndStuckValidatorsCountsUpdateFailed) - 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 *ApiExitedAndStuckValidatorsCountsUpdateFailedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiExitedAndStuckValidatorsCountsUpdateFailedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiExitedAndStuckValidatorsCountsUpdateFailed represents a ExitedAndStuckValidatorsCountsUpdateFailed event raised by the Api contract. -type ApiExitedAndStuckValidatorsCountsUpdateFailed struct { - StakingModuleId *big.Int - LowLevelRevertData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterExitedAndStuckValidatorsCountsUpdateFailed is a free log retrieval operation binding the contract event 0xe74bf895f0c3a2d6c74c40cbb362fdd9640035fc4226c72e3843809ad2a9d2b5. -// -// Solidity: event ExitedAndStuckValidatorsCountsUpdateFailed(uint256 indexed stakingModuleId, bytes lowLevelRevertData) -func (_Api *ApiFilterer) FilterExitedAndStuckValidatorsCountsUpdateFailed(opts *bind.FilterOpts, stakingModuleId []*big.Int) (*ApiExitedAndStuckValidatorsCountsUpdateFailedIterator, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "ExitedAndStuckValidatorsCountsUpdateFailed", stakingModuleIdRule) - if err != nil { - return nil, err - } - return &ApiExitedAndStuckValidatorsCountsUpdateFailedIterator{contract: _Api.contract, event: "ExitedAndStuckValidatorsCountsUpdateFailed", logs: logs, sub: sub}, nil -} - -// WatchExitedAndStuckValidatorsCountsUpdateFailed is a free log subscription operation binding the contract event 0xe74bf895f0c3a2d6c74c40cbb362fdd9640035fc4226c72e3843809ad2a9d2b5. -// -// Solidity: event ExitedAndStuckValidatorsCountsUpdateFailed(uint256 indexed stakingModuleId, bytes lowLevelRevertData) -func (_Api *ApiFilterer) WatchExitedAndStuckValidatorsCountsUpdateFailed(opts *bind.WatchOpts, sink chan<- *ApiExitedAndStuckValidatorsCountsUpdateFailed, stakingModuleId []*big.Int) (event.Subscription, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "ExitedAndStuckValidatorsCountsUpdateFailed", stakingModuleIdRule) - 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(ApiExitedAndStuckValidatorsCountsUpdateFailed) - if err := _Api.contract.UnpackLog(event, "ExitedAndStuckValidatorsCountsUpdateFailed", 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 -} - -// ParseExitedAndStuckValidatorsCountsUpdateFailed is a log parse operation binding the contract event 0xe74bf895f0c3a2d6c74c40cbb362fdd9640035fc4226c72e3843809ad2a9d2b5. -// -// Solidity: event ExitedAndStuckValidatorsCountsUpdateFailed(uint256 indexed stakingModuleId, bytes lowLevelRevertData) -func (_Api *ApiFilterer) ParseExitedAndStuckValidatorsCountsUpdateFailed(log types.Log) (*ApiExitedAndStuckValidatorsCountsUpdateFailed, error) { - event := new(ApiExitedAndStuckValidatorsCountsUpdateFailed) - if err := _Api.contract.UnpackLog(event, "ExitedAndStuckValidatorsCountsUpdateFailed", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiRewardsMintedReportFailedIterator is returned from FilterRewardsMintedReportFailed and is used to iterate over the raw logs and unpacked data for RewardsMintedReportFailed events raised by the Api contract. -type ApiRewardsMintedReportFailedIterator struct { - Event *ApiRewardsMintedReportFailed // 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 *ApiRewardsMintedReportFailedIterator) 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(ApiRewardsMintedReportFailed) - 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(ApiRewardsMintedReportFailed) - 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 *ApiRewardsMintedReportFailedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiRewardsMintedReportFailedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiRewardsMintedReportFailed represents a RewardsMintedReportFailed event raised by the Api contract. -type ApiRewardsMintedReportFailed struct { - StakingModuleId *big.Int - LowLevelRevertData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRewardsMintedReportFailed is a free log retrieval operation binding the contract event 0xf74208fedac7280fd11f8de0be14e00423dc5076da8e8ec8ca90e09257fff1b3. -// -// Solidity: event RewardsMintedReportFailed(uint256 indexed stakingModuleId, bytes lowLevelRevertData) -func (_Api *ApiFilterer) FilterRewardsMintedReportFailed(opts *bind.FilterOpts, stakingModuleId []*big.Int) (*ApiRewardsMintedReportFailedIterator, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "RewardsMintedReportFailed", stakingModuleIdRule) - if err != nil { - return nil, err - } - return &ApiRewardsMintedReportFailedIterator{contract: _Api.contract, event: "RewardsMintedReportFailed", logs: logs, sub: sub}, nil -} - -// WatchRewardsMintedReportFailed is a free log subscription operation binding the contract event 0xf74208fedac7280fd11f8de0be14e00423dc5076da8e8ec8ca90e09257fff1b3. -// -// Solidity: event RewardsMintedReportFailed(uint256 indexed stakingModuleId, bytes lowLevelRevertData) -func (_Api *ApiFilterer) WatchRewardsMintedReportFailed(opts *bind.WatchOpts, sink chan<- *ApiRewardsMintedReportFailed, stakingModuleId []*big.Int) (event.Subscription, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "RewardsMintedReportFailed", stakingModuleIdRule) - 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(ApiRewardsMintedReportFailed) - if err := _Api.contract.UnpackLog(event, "RewardsMintedReportFailed", 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 -} - -// ParseRewardsMintedReportFailed is a log parse operation binding the contract event 0xf74208fedac7280fd11f8de0be14e00423dc5076da8e8ec8ca90e09257fff1b3. -// -// Solidity: event RewardsMintedReportFailed(uint256 indexed stakingModuleId, bytes lowLevelRevertData) -func (_Api *ApiFilterer) ParseRewardsMintedReportFailed(log types.Log) (*ApiRewardsMintedReportFailed, error) { - event := new(ApiRewardsMintedReportFailed) - if err := _Api.contract.UnpackLog(event, "RewardsMintedReportFailed", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the Api contract. -type ApiRoleAdminChangedIterator struct { - Event *ApiRoleAdminChanged // 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 *ApiRoleAdminChangedIterator) 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(ApiRoleAdminChanged) - 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(ApiRoleAdminChanged) - 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 *ApiRoleAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiRoleAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiRoleAdminChanged represents a RoleAdminChanged event raised by the Api contract. -type ApiRoleAdminChanged struct { - Role [32]byte - PreviousAdminRole [32]byte - NewAdminRole [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_Api *ApiFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*ApiRoleAdminChangedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) - if err != nil { - return nil, err - } - return &ApiRoleAdminChangedIterator{contract: _Api.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil -} - -// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_Api *ApiFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *ApiRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) - 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(ApiRoleAdminChanged) - if err := _Api.contract.UnpackLog(event, "RoleAdminChanged", 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 -} - -// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_Api *ApiFilterer) ParseRoleAdminChanged(log types.Log) (*ApiRoleAdminChanged, error) { - event := new(ApiRoleAdminChanged) - if err := _Api.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the Api contract. -type ApiRoleGrantedIterator struct { - Event *ApiRoleGranted // 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 *ApiRoleGrantedIterator) 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(ApiRoleGranted) - 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(ApiRoleGranted) - 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 *ApiRoleGrantedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiRoleGrantedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiRoleGranted represents a RoleGranted event raised by the Api contract. -type ApiRoleGranted struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_Api *ApiFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ApiRoleGrantedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return &ApiRoleGrantedIterator{contract: _Api.contract, event: "RoleGranted", logs: logs, sub: sub}, nil -} - -// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_Api *ApiFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *ApiRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) - 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(ApiRoleGranted) - if err := _Api.contract.UnpackLog(event, "RoleGranted", 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 -} - -// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_Api *ApiFilterer) ParseRoleGranted(log types.Log) (*ApiRoleGranted, error) { - event := new(ApiRoleGranted) - if err := _Api.contract.UnpackLog(event, "RoleGranted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the Api contract. -type ApiRoleRevokedIterator struct { - Event *ApiRoleRevoked // 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 *ApiRoleRevokedIterator) 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(ApiRoleRevoked) - 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(ApiRoleRevoked) - 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 *ApiRoleRevokedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiRoleRevokedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiRoleRevoked represents a RoleRevoked event raised by the Api contract. -type ApiRoleRevoked struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_Api *ApiFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ApiRoleRevokedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return &ApiRoleRevokedIterator{contract: _Api.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil -} - -// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_Api *ApiFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *ApiRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) - 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(ApiRoleRevoked) - if err := _Api.contract.UnpackLog(event, "RoleRevoked", 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 -} - -// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_Api *ApiFilterer) ParseRoleRevoked(log types.Log) (*ApiRoleRevoked, error) { - event := new(ApiRoleRevoked) - if err := _Api.contract.UnpackLog(event, "RoleRevoked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiStakingModuleAddedIterator is returned from FilterStakingModuleAdded and is used to iterate over the raw logs and unpacked data for StakingModuleAdded events raised by the Api contract. -type ApiStakingModuleAddedIterator struct { - Event *ApiStakingModuleAdded // 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 *ApiStakingModuleAddedIterator) 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(ApiStakingModuleAdded) - 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(ApiStakingModuleAdded) - 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 *ApiStakingModuleAddedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiStakingModuleAddedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiStakingModuleAdded represents a StakingModuleAdded event raised by the Api contract. -type ApiStakingModuleAdded struct { - StakingModuleId *big.Int - StakingModule common.Address - Name string - CreatedBy common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStakingModuleAdded is a free log retrieval operation binding the contract event 0x43b5213f0e1666cd0b8692a73686164c94deb955a59c65e10dee8bb958e7ce3e. -// -// Solidity: event StakingModuleAdded(uint256 indexed stakingModuleId, address stakingModule, string name, address createdBy) -func (_Api *ApiFilterer) FilterStakingModuleAdded(opts *bind.FilterOpts, stakingModuleId []*big.Int) (*ApiStakingModuleAddedIterator, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "StakingModuleAdded", stakingModuleIdRule) - if err != nil { - return nil, err - } - return &ApiStakingModuleAddedIterator{contract: _Api.contract, event: "StakingModuleAdded", logs: logs, sub: sub}, nil -} - -// WatchStakingModuleAdded is a free log subscription operation binding the contract event 0x43b5213f0e1666cd0b8692a73686164c94deb955a59c65e10dee8bb958e7ce3e. -// -// Solidity: event StakingModuleAdded(uint256 indexed stakingModuleId, address stakingModule, string name, address createdBy) -func (_Api *ApiFilterer) WatchStakingModuleAdded(opts *bind.WatchOpts, sink chan<- *ApiStakingModuleAdded, stakingModuleId []*big.Int) (event.Subscription, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "StakingModuleAdded", stakingModuleIdRule) - 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(ApiStakingModuleAdded) - if err := _Api.contract.UnpackLog(event, "StakingModuleAdded", 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 -} - -// ParseStakingModuleAdded is a log parse operation binding the contract event 0x43b5213f0e1666cd0b8692a73686164c94deb955a59c65e10dee8bb958e7ce3e. -// -// Solidity: event StakingModuleAdded(uint256 indexed stakingModuleId, address stakingModule, string name, address createdBy) -func (_Api *ApiFilterer) ParseStakingModuleAdded(log types.Log) (*ApiStakingModuleAdded, error) { - event := new(ApiStakingModuleAdded) - if err := _Api.contract.UnpackLog(event, "StakingModuleAdded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiStakingModuleExitedValidatorsIncompleteReportingIterator is returned from FilterStakingModuleExitedValidatorsIncompleteReporting and is used to iterate over the raw logs and unpacked data for StakingModuleExitedValidatorsIncompleteReporting events raised by the Api contract. -type ApiStakingModuleExitedValidatorsIncompleteReportingIterator struct { - Event *ApiStakingModuleExitedValidatorsIncompleteReporting // 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 *ApiStakingModuleExitedValidatorsIncompleteReportingIterator) 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(ApiStakingModuleExitedValidatorsIncompleteReporting) - 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(ApiStakingModuleExitedValidatorsIncompleteReporting) - 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 *ApiStakingModuleExitedValidatorsIncompleteReportingIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiStakingModuleExitedValidatorsIncompleteReportingIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiStakingModuleExitedValidatorsIncompleteReporting represents a StakingModuleExitedValidatorsIncompleteReporting event raised by the Api contract. -type ApiStakingModuleExitedValidatorsIncompleteReporting struct { - StakingModuleId *big.Int - UnreportedExitedValidatorsCount *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStakingModuleExitedValidatorsIncompleteReporting is a free log retrieval operation binding the contract event 0xdd2523ca96a639ba7e17420698937f71eddd8af012ccb36ff5c8fe96141acae9. -// -// Solidity: event StakingModuleExitedValidatorsIncompleteReporting(uint256 indexed stakingModuleId, uint256 unreportedExitedValidatorsCount) -func (_Api *ApiFilterer) FilterStakingModuleExitedValidatorsIncompleteReporting(opts *bind.FilterOpts, stakingModuleId []*big.Int) (*ApiStakingModuleExitedValidatorsIncompleteReportingIterator, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "StakingModuleExitedValidatorsIncompleteReporting", stakingModuleIdRule) - if err != nil { - return nil, err - } - return &ApiStakingModuleExitedValidatorsIncompleteReportingIterator{contract: _Api.contract, event: "StakingModuleExitedValidatorsIncompleteReporting", logs: logs, sub: sub}, nil -} - -// WatchStakingModuleExitedValidatorsIncompleteReporting is a free log subscription operation binding the contract event 0xdd2523ca96a639ba7e17420698937f71eddd8af012ccb36ff5c8fe96141acae9. -// -// Solidity: event StakingModuleExitedValidatorsIncompleteReporting(uint256 indexed stakingModuleId, uint256 unreportedExitedValidatorsCount) -func (_Api *ApiFilterer) WatchStakingModuleExitedValidatorsIncompleteReporting(opts *bind.WatchOpts, sink chan<- *ApiStakingModuleExitedValidatorsIncompleteReporting, stakingModuleId []*big.Int) (event.Subscription, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "StakingModuleExitedValidatorsIncompleteReporting", stakingModuleIdRule) - 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(ApiStakingModuleExitedValidatorsIncompleteReporting) - if err := _Api.contract.UnpackLog(event, "StakingModuleExitedValidatorsIncompleteReporting", 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 -} - -// ParseStakingModuleExitedValidatorsIncompleteReporting is a log parse operation binding the contract event 0xdd2523ca96a639ba7e17420698937f71eddd8af012ccb36ff5c8fe96141acae9. -// -// Solidity: event StakingModuleExitedValidatorsIncompleteReporting(uint256 indexed stakingModuleId, uint256 unreportedExitedValidatorsCount) -func (_Api *ApiFilterer) ParseStakingModuleExitedValidatorsIncompleteReporting(log types.Log) (*ApiStakingModuleExitedValidatorsIncompleteReporting, error) { - event := new(ApiStakingModuleExitedValidatorsIncompleteReporting) - if err := _Api.contract.UnpackLog(event, "StakingModuleExitedValidatorsIncompleteReporting", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiStakingModuleFeesSetIterator is returned from FilterStakingModuleFeesSet and is used to iterate over the raw logs and unpacked data for StakingModuleFeesSet events raised by the Api contract. -type ApiStakingModuleFeesSetIterator struct { - Event *ApiStakingModuleFeesSet // 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 *ApiStakingModuleFeesSetIterator) 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(ApiStakingModuleFeesSet) - 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(ApiStakingModuleFeesSet) - 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 *ApiStakingModuleFeesSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiStakingModuleFeesSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiStakingModuleFeesSet represents a StakingModuleFeesSet event raised by the Api contract. -type ApiStakingModuleFeesSet struct { - StakingModuleId *big.Int - StakingModuleFee *big.Int - TreasuryFee *big.Int - SetBy common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStakingModuleFeesSet is a free log retrieval operation binding the contract event 0x303c8ac43d1b1f9b898ddd2915a294efa01e9b07c322d7deeb7db332b66f0410. -// -// Solidity: event StakingModuleFeesSet(uint256 indexed stakingModuleId, uint256 stakingModuleFee, uint256 treasuryFee, address setBy) -func (_Api *ApiFilterer) FilterStakingModuleFeesSet(opts *bind.FilterOpts, stakingModuleId []*big.Int) (*ApiStakingModuleFeesSetIterator, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "StakingModuleFeesSet", stakingModuleIdRule) - if err != nil { - return nil, err - } - return &ApiStakingModuleFeesSetIterator{contract: _Api.contract, event: "StakingModuleFeesSet", logs: logs, sub: sub}, nil -} - -// WatchStakingModuleFeesSet is a free log subscription operation binding the contract event 0x303c8ac43d1b1f9b898ddd2915a294efa01e9b07c322d7deeb7db332b66f0410. -// -// Solidity: event StakingModuleFeesSet(uint256 indexed stakingModuleId, uint256 stakingModuleFee, uint256 treasuryFee, address setBy) -func (_Api *ApiFilterer) WatchStakingModuleFeesSet(opts *bind.WatchOpts, sink chan<- *ApiStakingModuleFeesSet, stakingModuleId []*big.Int) (event.Subscription, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "StakingModuleFeesSet", stakingModuleIdRule) - 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(ApiStakingModuleFeesSet) - if err := _Api.contract.UnpackLog(event, "StakingModuleFeesSet", 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 -} - -// ParseStakingModuleFeesSet is a log parse operation binding the contract event 0x303c8ac43d1b1f9b898ddd2915a294efa01e9b07c322d7deeb7db332b66f0410. -// -// Solidity: event StakingModuleFeesSet(uint256 indexed stakingModuleId, uint256 stakingModuleFee, uint256 treasuryFee, address setBy) -func (_Api *ApiFilterer) ParseStakingModuleFeesSet(log types.Log) (*ApiStakingModuleFeesSet, error) { - event := new(ApiStakingModuleFeesSet) - if err := _Api.contract.UnpackLog(event, "StakingModuleFeesSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiStakingModuleStatusSetIterator is returned from FilterStakingModuleStatusSet and is used to iterate over the raw logs and unpacked data for StakingModuleStatusSet events raised by the Api contract. -type ApiStakingModuleStatusSetIterator struct { - Event *ApiStakingModuleStatusSet // 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 *ApiStakingModuleStatusSetIterator) 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(ApiStakingModuleStatusSet) - 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(ApiStakingModuleStatusSet) - 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 *ApiStakingModuleStatusSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiStakingModuleStatusSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiStakingModuleStatusSet represents a StakingModuleStatusSet event raised by the Api contract. -type ApiStakingModuleStatusSet struct { - StakingModuleId *big.Int - Status uint8 - SetBy common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStakingModuleStatusSet is a free log retrieval operation binding the contract event 0xfd6f15fb2b48a21a60fe3d44d3c3a0433ca01e121b5124a63ec45c30ad925a17. -// -// Solidity: event StakingModuleStatusSet(uint256 indexed stakingModuleId, uint8 status, address setBy) -func (_Api *ApiFilterer) FilterStakingModuleStatusSet(opts *bind.FilterOpts, stakingModuleId []*big.Int) (*ApiStakingModuleStatusSetIterator, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "StakingModuleStatusSet", stakingModuleIdRule) - if err != nil { - return nil, err - } - return &ApiStakingModuleStatusSetIterator{contract: _Api.contract, event: "StakingModuleStatusSet", logs: logs, sub: sub}, nil -} - -// WatchStakingModuleStatusSet is a free log subscription operation binding the contract event 0xfd6f15fb2b48a21a60fe3d44d3c3a0433ca01e121b5124a63ec45c30ad925a17. -// -// Solidity: event StakingModuleStatusSet(uint256 indexed stakingModuleId, uint8 status, address setBy) -func (_Api *ApiFilterer) WatchStakingModuleStatusSet(opts *bind.WatchOpts, sink chan<- *ApiStakingModuleStatusSet, stakingModuleId []*big.Int) (event.Subscription, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "StakingModuleStatusSet", stakingModuleIdRule) - 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(ApiStakingModuleStatusSet) - if err := _Api.contract.UnpackLog(event, "StakingModuleStatusSet", 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 -} - -// ParseStakingModuleStatusSet is a log parse operation binding the contract event 0xfd6f15fb2b48a21a60fe3d44d3c3a0433ca01e121b5124a63ec45c30ad925a17. -// -// Solidity: event StakingModuleStatusSet(uint256 indexed stakingModuleId, uint8 status, address setBy) -func (_Api *ApiFilterer) ParseStakingModuleStatusSet(log types.Log) (*ApiStakingModuleStatusSet, error) { - event := new(ApiStakingModuleStatusSet) - if err := _Api.contract.UnpackLog(event, "StakingModuleStatusSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiStakingModuleTargetShareSetIterator is returned from FilterStakingModuleTargetShareSet and is used to iterate over the raw logs and unpacked data for StakingModuleTargetShareSet events raised by the Api contract. -type ApiStakingModuleTargetShareSetIterator struct { - Event *ApiStakingModuleTargetShareSet // 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 *ApiStakingModuleTargetShareSetIterator) 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(ApiStakingModuleTargetShareSet) - 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(ApiStakingModuleTargetShareSet) - 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 *ApiStakingModuleTargetShareSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiStakingModuleTargetShareSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiStakingModuleTargetShareSet represents a StakingModuleTargetShareSet event raised by the Api contract. -type ApiStakingModuleTargetShareSet struct { - StakingModuleId *big.Int - TargetShare *big.Int - SetBy common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStakingModuleTargetShareSet is a free log retrieval operation binding the contract event 0x065e5bd8e4145dd99cf69bad5871ad52d094aee07a67fcf2f418c89e49d5f20c. -// -// Solidity: event StakingModuleTargetShareSet(uint256 indexed stakingModuleId, uint256 targetShare, address setBy) -func (_Api *ApiFilterer) FilterStakingModuleTargetShareSet(opts *bind.FilterOpts, stakingModuleId []*big.Int) (*ApiStakingModuleTargetShareSetIterator, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "StakingModuleTargetShareSet", stakingModuleIdRule) - if err != nil { - return nil, err - } - return &ApiStakingModuleTargetShareSetIterator{contract: _Api.contract, event: "StakingModuleTargetShareSet", logs: logs, sub: sub}, nil -} - -// WatchStakingModuleTargetShareSet is a free log subscription operation binding the contract event 0x065e5bd8e4145dd99cf69bad5871ad52d094aee07a67fcf2f418c89e49d5f20c. -// -// Solidity: event StakingModuleTargetShareSet(uint256 indexed stakingModuleId, uint256 targetShare, address setBy) -func (_Api *ApiFilterer) WatchStakingModuleTargetShareSet(opts *bind.WatchOpts, sink chan<- *ApiStakingModuleTargetShareSet, stakingModuleId []*big.Int) (event.Subscription, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "StakingModuleTargetShareSet", stakingModuleIdRule) - 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(ApiStakingModuleTargetShareSet) - if err := _Api.contract.UnpackLog(event, "StakingModuleTargetShareSet", 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 -} - -// ParseStakingModuleTargetShareSet is a log parse operation binding the contract event 0x065e5bd8e4145dd99cf69bad5871ad52d094aee07a67fcf2f418c89e49d5f20c. -// -// Solidity: event StakingModuleTargetShareSet(uint256 indexed stakingModuleId, uint256 targetShare, address setBy) -func (_Api *ApiFilterer) ParseStakingModuleTargetShareSet(log types.Log) (*ApiStakingModuleTargetShareSet, error) { - event := new(ApiStakingModuleTargetShareSet) - if err := _Api.contract.UnpackLog(event, "StakingModuleTargetShareSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiStakingRouterETHDepositedIterator is returned from FilterStakingRouterETHDeposited and is used to iterate over the raw logs and unpacked data for StakingRouterETHDeposited events raised by the Api contract. -type ApiStakingRouterETHDepositedIterator struct { - Event *ApiStakingRouterETHDeposited // 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 *ApiStakingRouterETHDepositedIterator) 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(ApiStakingRouterETHDeposited) - 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(ApiStakingRouterETHDeposited) - 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 *ApiStakingRouterETHDepositedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiStakingRouterETHDepositedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiStakingRouterETHDeposited represents a StakingRouterETHDeposited event raised by the Api contract. -type ApiStakingRouterETHDeposited struct { - StakingModuleId *big.Int - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStakingRouterETHDeposited is a free log retrieval operation binding the contract event 0x9151b7f88aca05d432bb395647ef52b2ffc454e3c6afb69c95345af6b5a778c0. -// -// Solidity: event StakingRouterETHDeposited(uint256 indexed stakingModuleId, uint256 amount) -func (_Api *ApiFilterer) FilterStakingRouterETHDeposited(opts *bind.FilterOpts, stakingModuleId []*big.Int) (*ApiStakingRouterETHDepositedIterator, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "StakingRouterETHDeposited", stakingModuleIdRule) - if err != nil { - return nil, err - } - return &ApiStakingRouterETHDepositedIterator{contract: _Api.contract, event: "StakingRouterETHDeposited", logs: logs, sub: sub}, nil -} - -// WatchStakingRouterETHDeposited is a free log subscription operation binding the contract event 0x9151b7f88aca05d432bb395647ef52b2ffc454e3c6afb69c95345af6b5a778c0. -// -// Solidity: event StakingRouterETHDeposited(uint256 indexed stakingModuleId, uint256 amount) -func (_Api *ApiFilterer) WatchStakingRouterETHDeposited(opts *bind.WatchOpts, sink chan<- *ApiStakingRouterETHDeposited, stakingModuleId []*big.Int) (event.Subscription, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "StakingRouterETHDeposited", stakingModuleIdRule) - 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(ApiStakingRouterETHDeposited) - if err := _Api.contract.UnpackLog(event, "StakingRouterETHDeposited", 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 -} - -// ParseStakingRouterETHDeposited is a log parse operation binding the contract event 0x9151b7f88aca05d432bb395647ef52b2ffc454e3c6afb69c95345af6b5a778c0. -// -// Solidity: event StakingRouterETHDeposited(uint256 indexed stakingModuleId, uint256 amount) -func (_Api *ApiFilterer) ParseStakingRouterETHDeposited(log types.Log) (*ApiStakingRouterETHDeposited, error) { - event := new(ApiStakingRouterETHDeposited) - if err := _Api.contract.UnpackLog(event, "StakingRouterETHDeposited", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiWithdrawalCredentialsSetIterator is returned from FilterWithdrawalCredentialsSet and is used to iterate over the raw logs and unpacked data for WithdrawalCredentialsSet events raised by the Api contract. -type ApiWithdrawalCredentialsSetIterator struct { - Event *ApiWithdrawalCredentialsSet // 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 *ApiWithdrawalCredentialsSetIterator) 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(ApiWithdrawalCredentialsSet) - 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(ApiWithdrawalCredentialsSet) - 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 *ApiWithdrawalCredentialsSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiWithdrawalCredentialsSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiWithdrawalCredentialsSet represents a WithdrawalCredentialsSet event raised by the Api contract. -type ApiWithdrawalCredentialsSet struct { - WithdrawalCredentials [32]byte - SetBy common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawalCredentialsSet is a free log retrieval operation binding the contract event 0x82e72df77173eab89b00556d791a407a78f4605c5c2f0694967c8c429dd43c7c. -// -// Solidity: event WithdrawalCredentialsSet(bytes32 withdrawalCredentials, address setBy) -func (_Api *ApiFilterer) FilterWithdrawalCredentialsSet(opts *bind.FilterOpts) (*ApiWithdrawalCredentialsSetIterator, error) { - - logs, sub, err := _Api.contract.FilterLogs(opts, "WithdrawalCredentialsSet") - if err != nil { - return nil, err - } - return &ApiWithdrawalCredentialsSetIterator{contract: _Api.contract, event: "WithdrawalCredentialsSet", logs: logs, sub: sub}, nil -} - -// WatchWithdrawalCredentialsSet is a free log subscription operation binding the contract event 0x82e72df77173eab89b00556d791a407a78f4605c5c2f0694967c8c429dd43c7c. -// -// Solidity: event WithdrawalCredentialsSet(bytes32 withdrawalCredentials, address setBy) -func (_Api *ApiFilterer) WatchWithdrawalCredentialsSet(opts *bind.WatchOpts, sink chan<- *ApiWithdrawalCredentialsSet) (event.Subscription, error) { - - logs, sub, err := _Api.contract.WatchLogs(opts, "WithdrawalCredentialsSet") - 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(ApiWithdrawalCredentialsSet) - if err := _Api.contract.UnpackLog(event, "WithdrawalCredentialsSet", 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 -} - -// ParseWithdrawalCredentialsSet is a log parse operation binding the contract event 0x82e72df77173eab89b00556d791a407a78f4605c5c2f0694967c8c429dd43c7c. -// -// Solidity: event WithdrawalCredentialsSet(bytes32 withdrawalCredentials, address setBy) -func (_Api *ApiFilterer) ParseWithdrawalCredentialsSet(log types.Log) (*ApiWithdrawalCredentialsSet, error) { - event := new(ApiWithdrawalCredentialsSet) - if err := _Api.contract.UnpackLog(event, "WithdrawalCredentialsSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ApiWithdrawalsCredentialsChangeFailedIterator is returned from FilterWithdrawalsCredentialsChangeFailed and is used to iterate over the raw logs and unpacked data for WithdrawalsCredentialsChangeFailed events raised by the Api contract. -type ApiWithdrawalsCredentialsChangeFailedIterator struct { - Event *ApiWithdrawalsCredentialsChangeFailed // 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 *ApiWithdrawalsCredentialsChangeFailedIterator) 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(ApiWithdrawalsCredentialsChangeFailed) - 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(ApiWithdrawalsCredentialsChangeFailed) - 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 *ApiWithdrawalsCredentialsChangeFailedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ApiWithdrawalsCredentialsChangeFailedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ApiWithdrawalsCredentialsChangeFailed represents a WithdrawalsCredentialsChangeFailed event raised by the Api contract. -type ApiWithdrawalsCredentialsChangeFailed struct { - StakingModuleId *big.Int - LowLevelRevertData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawalsCredentialsChangeFailed is a free log retrieval operation binding the contract event 0x0d64b11929aa111ca874dd00b5b0cc2d82b741be924ec9e3691e67c71552f623. -// -// Solidity: event WithdrawalsCredentialsChangeFailed(uint256 indexed stakingModuleId, bytes lowLevelRevertData) -func (_Api *ApiFilterer) FilterWithdrawalsCredentialsChangeFailed(opts *bind.FilterOpts, stakingModuleId []*big.Int) (*ApiWithdrawalsCredentialsChangeFailedIterator, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.FilterLogs(opts, "WithdrawalsCredentialsChangeFailed", stakingModuleIdRule) - if err != nil { - return nil, err - } - return &ApiWithdrawalsCredentialsChangeFailedIterator{contract: _Api.contract, event: "WithdrawalsCredentialsChangeFailed", logs: logs, sub: sub}, nil -} - -// WatchWithdrawalsCredentialsChangeFailed is a free log subscription operation binding the contract event 0x0d64b11929aa111ca874dd00b5b0cc2d82b741be924ec9e3691e67c71552f623. -// -// Solidity: event WithdrawalsCredentialsChangeFailed(uint256 indexed stakingModuleId, bytes lowLevelRevertData) -func (_Api *ApiFilterer) WatchWithdrawalsCredentialsChangeFailed(opts *bind.WatchOpts, sink chan<- *ApiWithdrawalsCredentialsChangeFailed, stakingModuleId []*big.Int) (event.Subscription, error) { - - var stakingModuleIdRule []interface{} - for _, stakingModuleIdItem := range stakingModuleId { - stakingModuleIdRule = append(stakingModuleIdRule, stakingModuleIdItem) - } - - logs, sub, err := _Api.contract.WatchLogs(opts, "WithdrawalsCredentialsChangeFailed", stakingModuleIdRule) - 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(ApiWithdrawalsCredentialsChangeFailed) - if err := _Api.contract.UnpackLog(event, "WithdrawalsCredentialsChangeFailed", 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 -} - -// ParseWithdrawalsCredentialsChangeFailed is a log parse operation binding the contract event 0x0d64b11929aa111ca874dd00b5b0cc2d82b741be924ec9e3691e67c71552f623. -// -// Solidity: event WithdrawalsCredentialsChangeFailed(uint256 indexed stakingModuleId, bytes lowLevelRevertData) -func (_Api *ApiFilterer) ParseWithdrawalsCredentialsChangeFailed(log types.Log) (*ApiWithdrawalsCredentialsChangeFailed, error) { - event := new(ApiWithdrawalsCredentialsChangeFailed) - if err := _Api.contract.UnpackLog(event, "WithdrawalsCredentialsChangeFailed", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -}