From 655d6994c4c30640eb5ca7326e652af88aa66524 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 15:37:34 -0600 Subject: [PATCH 1/6] remove IValidatorManager --- .../ERC20TokenStakingManager.go | 2 +- .../NativeTokenStakingManager.go | 2 +- .../PoAValidatorManager.go | 2 +- .../IPoSValidatorManager.go | 595 ++++++++++++++++-- .../IValidatorManager/IValidatorManager.go | 223 ------- .../ERC20TokenStakingManager.sol | 2 +- .../NativeTokenStakingManager.sol | 2 +- .../validator-manager/PoAValidatorManager.sol | 5 +- .../validator-manager/PoSValidatorManager.sol | 2 +- .../validator-manager/ValidatorManager.sol | 54 +- .../interfaces/IERC20TokenStakingManager.sol | 2 +- .../interfaces/INativeTokenStakingManager.sol | 2 +- .../interfaces/IPoAValidatorManager.sol | 4 +- .../interfaces/IPoSValidatorManager.sol | 8 +- .../interfaces/IValidatorManager.sol | 60 -- .../tests/ERC20TokenStakingManagerTests.t.sol | 2 +- .../NativeTokenStakingManagerTests.t.sol | 2 +- .../tests/PoAValidatorManagerTests.t.sol | 5 +- .../tests/PoSValidatorManagerTests.t.sol | 5 +- .../tests/ValidatorManagerTests.t.sol | 2 +- scripts/abi_bindings.sh | 2 +- 21 files changed, 614 insertions(+), 369 deletions(-) delete mode 100644 abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go delete mode 100644 contracts/validator-manager/interfaces/IValidatorManager.sol diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index bb6263f88..bf80ea3f3 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"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\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615e76380380615e7683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d298061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614cce565b6105f4565b005b610277610287366004614d09565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614cce565b610898565b6102776102cc366004614d20565b6108a4565b6102776102df366004614d6e565b610e12565b6102f76102f2366004614d09565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614da3565b610eda565b61027761034c366004614cce565b610eed565b61036461035f366004614e16565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614da3565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d6e565b610f49565b6103646103cb366004614e7d565b61119a565b6103645f81565b6102776103e5366004614cce565b6111ba565b5f80516020615cb4833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614da3565b6111c6565b61027761043c366004614d6e565b6111d2565b610294603081565b610277610457366004614e98565b6113c5565b61027761046a366004614d09565b611476565b61036461047d366004614ec6565b61150a565b610277610490366004614da3565b6115e3565b6103646104a3366004614edf565b6115ef565b6102776104b6366004614eff565b61161b565b6103646104c9366004614ec6565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d09565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d09565b611b70565b610294601481565b61057361056e366004614ec6565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d09565b611e0f565b6040516102a29190614fa7565b6102f76202a30081565b6103645f80516020615cb483398151915281565b6102776105dc366004614e98565b611f5e565b6103646105ef36600461505d565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f32565b600581111561065957610659614f32565b815260200160018201805461066d906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150c8565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f32565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615209565b6040518263ffffffff1660e01b8152600401610852919061523a565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610892919061524c565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061524c565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615263565b6001600160a01b0316146109ba576109956060840160408501615263565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c8606085018561527e565b905090505f805b828163ffffffff161015610c08575f6109eb606088018861527e565b8363ffffffff16818110610a0157610a016152c3565b9050602002810190610a1391906152d7565b610a1c90615342565b80516040519192505f916006880191610a34916153bd565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f919060040161523a565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153bd565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb919061524c565b90508086600601835f0151604051610b0391906153bd565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615412565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154e1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615501565b60405180910390a2505080610c019061552b565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff168361554d565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123aa565b604001516040518263ffffffff1660e01b8152600401610cc2919061523a565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d01919061524c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156a3565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615209565b90505f600282604051610d8f91906153bd565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd919061524c565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c614f32565b14610e7c578060405163170cc93360e21b815260040161078f9190615100565b61089283836124e9565b5f80610e90612788565b60030154610e9e9084615737565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127ac565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f80516020615cd483398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c77565b5f610f52612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f32565b6003811115610f9c57610f9c614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b905060018351600381111561102957611029614f32565b1461104a578251604051633b0d540d60e21b815261078f9190600401615756565b60048151600581111561105f5761105f614f32565b036110755761106d86612ca3565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612788565b60030154610ed4906001600160401b038416615770565b6106008383835f612c77565b610ee6848484846127ac565b6111da6129f3565b5f6111e3612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c614f32565b600381111561122d5761122d614f32565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a6614f32565b146112c7578051604051633b0d540d60e21b815261078f9190600401615756565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f8614f32565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca3565b5050506113c160015f80516020615cd483398151915255565b5050565b5f6113ce612788565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612788565b90505f61148b83611e0f565b51905060048160058111156114a2576114a2614f32565b146114c2578060405163170cc93360e21b815260040161078f9190615100565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e74565b5f6115136129f3565b5f61151c612788565b90505f8061152985612e9e565b91509150611536826124c0565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b614f32565b036115aa576115aa8185612e74565b6115c0826115bb856040015161119a565b613253565b509193505050505b6115de60015f80516020615cd483398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613276565b9050610ed460015f80516020615cd483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134bb565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123aa565b604001516040518263ffffffff1660e01b815260040161174b919061523a565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615787565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c9906150c8565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561181457611814614f32565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f828152600484016020526040812061185f91614c1a565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615823565b60405180910390a2509392505050565b5f6118fe612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561193757611937614f32565b600381111561194857611948614f32565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c1614f32565b141580156119e257506003815160038111156119df576119df614f32565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615756565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af29190810190615209565b6040518263ffffffff1660e01b8152600401611b0e919061523a565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061524c565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b97906150c8565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be2614f32565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615835565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610600919061524c565b5f805f611c98846123aa565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd8919061523a565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615847565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17614c51565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a614f32565b6005811115611e6b57611e6b614f32565b8152602001600182018054611e7f906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab906150c8565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612788565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615887565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612788565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c0614f32565b60038111156120d1576120d1614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e614f32565b1461217f578251604051633b0d540d60e21b815261078f9190600401615756565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b0316906154e1565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561223057612230614f32565b036123525760028401546080840151612252916001600160401b0316906154e1565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124e9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615896565b6134d5565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561231484888c61369f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561236757612367614f32565b0361238e5761237783878b61369f565b5061238189612ca3565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615100565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243591908101906158b6565b915091508061245757604051636b2f19e960e01b815260040160405180910390fd5b81511561247d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124b9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124ca612788565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261255b91908101906158b6565b915091508061257d57604051636b2f19e960e01b815260040160405180910390fd5b5f612586612788565b60058101548451919250146125b4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561262c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612669919061523a565b6040805180830381865af4158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190615946565b915091508188146126ce5760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b03908116908216111561275f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261277d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127b6612788565b90506127c18661388d565b5f6127cb87611e0f565b90506127d6876124c0565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b0316906154e1565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124e9565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061524c565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615969565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cd4833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612788565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613b78565b90505f612b0682610e86565b90505f612bcd612b168a8061597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c61597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01614e7d565b612ba860608e018e6159be565b612bb1906159d2565b612bbe60808f018f6159be565b612bc7906159d2565b87613b9b565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cd483398151915255565b612c83848484846127ac565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cac612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce557612ce5614f32565b6003811115612cf657612cf6614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6a613f54565b8260800151612d7991906154e1565b6001600160401b0316421015612dad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e08575060208201515b5f80612e15838886613f6f565b91509150612e2e85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7d612788565b5f838152600a8201602052604081208054919055909150610892848261401c565b5f612ea7614c51565b5f612eb0612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed7886123aa565b604001516040518263ffffffff1660e01b8152600401612ef7919061523a565b6040805180830381865af4158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190615787565b915091508015612f5c57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9457612f94614f32565b6005811115612fa557612fa5614f32565b8152602001600182018054612fb9906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe5906150c8565b80156130305780601f1061300757610100808354040283529160200191613030565b820191905f5260205f20905b81548152906001019060200180831161301357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a8576130a8614f32565b141580156130c957506001815160058111156130c6576130c6614f32565b14155b156130ea57805160405163170cc93360e21b815261078f9190600401615100565b6003815160058111156130ff576130ff614f32565b0361310d5760048152613112565b600581525b83600601816020015160405161312891906153bd565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316b5761316b614f32565b0217905550602082015160018201906131849082615412565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615cb4833981519152546113c1906001600160a01b03168383614092565b5f80613280612788565b90505f61328f6102f285613b78565b90505f61329b87611e0f565b90506132a6876124c0565b6132c6576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132db576132db614f32565b146132fc57805160405163170cc93360e21b815261078f9190600401615100565b5f828260a0015161330d91906154e1565b905083600201600a9054906101000a90046001600160401b03168260400151613336919061554d565b6001600160401b0316816001600160401b0316111561337357604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f8061337f8a846134d5565b915091505f8a836040516020016133ad92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134c36140f1565b6134cc8261413c565b6113c1816141b9565b5f805f6134e0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135108582614221565b5f61351a8761448e565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135e59190810190615209565b6040518263ffffffff1660e01b8152600401613601919061523a565b6020604051808303815f875af115801561361d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613641919061524c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136a9612788565b90505f6136b98660400151611e0f565b90505f6003825160058111156136d1576136d1614f32565b14806136ef57506004825160058111156136ed576136ed614f32565b145b156136ff575060e081015161373c565b60028251600581111561371457613714614f32565b0361372057504261373c565b815160405163170cc93360e21b815261078f9190600401615100565b86608001516001600160401b0316816001600160401b031611613764575f93505050506134b4565b600483015460608801515f916001600160a01b031690634f22429f906137899061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561380a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382e919061524c565b90506001600160a01b03871661384657876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613896612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138d0576138d0614f32565b60058111156138e1576138e1614f32565b81526020016001820180546138f5906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613921906150c8565b801561396c5780601f106139435761010080835404028352916020019161396c565b820191905f5260205f20905b81548152906001019060200180831161394f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139e4576139e4614f32565b14613a17575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a5c57613a5c614f32565b021790555060208201516001820190613a759082615412565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b1584826134d5565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b6a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615cb4833981519152546001600160a01b0316906144f7565b5f613ba4612059565b6007015460ff16613bc857604051637fab81e560e01b815260040160405180910390fd5b5f613bd1612059565b905042866001600160401b0316111580613c005750613bf36202a30042615969565b866001600160401b031610155b15613c2957604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c4c90600160401b90048216858316615969565b1115613c7657604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c7f85614503565b613c8884614503565b8651603014613caf5786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613cd25787604051633e08a12560e11b815260040161078f919061523a565b5f801b8160060189604051613ce791906153bd565b90815260200160405180910390205414613d16578760405163a41f772f60e01b815260040161078f919061523a565b613d20835f614221565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613da09190615aff565b5f60405180830381865af4158015613dba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613de19190810190615bb6565b5f82815260048601602052604090209193509150613dff8282615412565b5081836006018b604051613e1391906153bd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e4f90859060040161523a565b6020604051808303815f875af1158015613e6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8f919061524c565b5f8481526005860160205260409020805460ff19166001908117825591925001613eb98c82615412565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f3d908e9085908e908c90615bf9565b60405180910390a250909998505050505050505050565b5f613f5d612059565b600101546001600160401b0316919050565b5f805f613f7a612788565b5f8681526008820160205260408120805490829055919250908190801561400e575f87815260068501602052604090205461271090613fc490600160a01b900461ffff1683615770565b613fce9190615737565b91508184600a015f8981526020019081526020015f205f828254613ff29190615969565b9091555061400290508282615c31565b925061400e898461401c565b509097909650945050505050565b5f5f80516020615cb483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614077575f80fd5b505af1158015614089573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614622565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413a57604051631afcd79f60e31b815260040160405180910390fd5b565b6141446140f1565b61414d81614683565b61415561469c565b6141b66060820135608083013561417260c0850160a08601614e7d565b61418260e0860160c08701615c44565b614193610100870160e08801615c5d565b6101008701356141ab61014089016101208a01615263565b8861014001356146ac565b50565b6141c16140f1565b5f80516020615cb48339815191526001600160a01b03821661420157604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61422a612059565b90505f826001600160401b0316846001600160401b03161115614258576142518385615896565b9050614265565b6142628484615896565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142d25750600184015481516142ce916001600160401b031690615969565b8210155b156142fa576001600160401b0380841660608301528282526040820151166020820152614319565b828160600181815161430c91906154e1565b6001600160401b03169052505b606081015161432990606461554d565b602082015160018601546001600160401b0392909216916143549190600160401b900460ff1661554d565b6001600160401b0316101561438d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b858160400181815161439f91906154e1565b6001600160401b03169052506040810180518691906143bf908390615896565b6001600160401b0316905250600184015460408201516064916143ed91600160401b90910460ff169061554d565b6001600160401b03161015614426576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614498612059565b5f84815260058201602052604090206002018054919250906008906144cc90600160401b90046001600160401b0316615c7d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134b483338461486e565b805163ffffffff1615801561451c575060208101515115155b1561455057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561459357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c15760208201516145b3600183615c31565b815181106145c3576145c36152c3565b60200260200101516001600160a01b0316826020015182815181106145ea576145ea6152c3565b60200260200101516001600160a01b0316101561461a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614596565b5f6146366001600160a01b038416836149d1565b905080515f1415801561465a5750808060200190518101906146589190615c98565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b61468b6140f1565b6146936149de565b6141b6816149e6565b6146a46140f1565b61413a614aca565b6146b46140f1565b5f6146bd612788565b905061ffff861615806146d5575061271061ffff8716115b156146f957604051635f12e6c360e11b815261ffff8716600482015260240161078f565b8789111561471d5760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147305750600a60ff8616115b156147535760405163170db35960e31b815260ff8616600482015260240161078f565b61475b613f54565b6001600160401b0316876001600160401b03161015614797576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147b75760405163a733007160e01b815260040160405180910390fd5b816147d857604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148d8919061524c565b90506148ef6001600160a01b038616853086614ad2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614933573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614957919061524c565b90508181116149bd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149c78282615c31565b9695505050505050565b60606134b483835f614b0b565b61413a6140f1565b6149ee6140f1565b5f6149f7612059565b8235815590506014614a0f6060840160408501615c5d565b60ff161180614a2e5750614a296060830160408401615c5d565b60ff16155b15614a6257614a436060830160408401615c5d565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a726060830160408401615c5d565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa36040830160208401614e7d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c646140f1565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140bf565b606081471015614b305760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b4b91906153bd565b5f6040518083038185875af1925050503d805f8114614b85576040519150601f19603f3d011682016040523d82523d5f602084013e614b8a565b606091505b50915091506149c7868383606082614baa57614ba582614bf1565b6134b4565b8151158015614bc157506001600160a01b0384163b155b15614bea57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134b4565b805115614c015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c26906150c8565b5f825580601f10614c35575050565b601f0160209004905f5260205f20908101906141b69190614c96565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614caa575f8155600101614c97565b5090565b80151581146141b6575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215614ce0575f80fd5b833592506020840135614cf281614cae565b9150614d0060408501614cbb565b90509250925092565b5f60208284031215614d19575f80fd5b5035919050565b5f8060408385031215614d31575f80fd5b82356001600160401b03811115614d46575f80fd5b830160808186031215614d57575f80fd5b9150614d6560208401614cbb565b90509250929050565b5f8060408385031215614d7f575f80fd5b82359150614d6560208401614cbb565b6001600160a01b03811681146141b6575f80fd5b5f805f8060808587031215614db6575f80fd5b843593506020850135614dc881614cae565b9250614dd660408601614cbb565b91506060850135614de681614d8f565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b03811681146141b6575f80fd5b5f805f8060808587031215614e29575f80fd5b84356001600160401b03811115614e3e575f80fd5b850160a08188031215614e4f575f80fd5b9350614e5d60208601614df1565b92506040850135614e6d81614e02565b9396929550929360600135925050565b5f60208284031215614e8d575f80fd5b81356134b481614e02565b5f8060408385031215614ea9575f80fd5b823591506020830135614ebb81614d8f565b809150509250929050565b5f60208284031215614ed6575f80fd5b6134b482614cbb565b5f8060408385031215614ef0575f80fd5b50508035926020909101359150565b5f80828403610180811215614f12575f80fd5b61016080821215614f21575f80fd5b8493508301359050614ebb81614d8f565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5657614f56614f32565b9052565b5f5b83811015614f74578181015183820152602001614f5c565b50505f910152565b5f8151808452614f93816020860160208601614f5a565b601f01601f19169290920160200192915050565b60208152614fb9602082018351614f46565b5f6020830151610100806040850152614fd6610120850183614f7c565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161501560a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f806020838503121561506e575f80fd5b82356001600160401b0380821115615084575f80fd5b818501915085601f830112615097575f80fd5b8135818111156150a5575f80fd5b8660208285010111156150b6575f80fd5b60209290920196919550909350505050565b600181811c908216806150dc57607f821691505b6020821081036150fa57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f46565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151445761514461510e565b60405290565b604080519081016001600160401b03811182821017156151445761514461510e565b604051601f8201601f191681016001600160401b03811182821017156151945761519461510e565b604052919050565b5f6001600160401b038211156151b4576151b461510e565b50601f01601f191660200190565b5f82601f8301126151d1575f80fd5b81516151e46151df8261519c565b61516c565b8181528460208386010111156151f8575f80fd5b610f26826020830160208701614f5a565b5f60208284031215615219575f80fd5b81516001600160401b0381111561522e575f80fd5b610f26848285016151c2565b602081525f6134b46020830184614f7c565b5f6020828403121561525c575f80fd5b5051919050565b5f60208284031215615273575f80fd5b81356134b481614d8f565b5f808335601e19843603018112615293575f80fd5b8301803591506001600160401b038211156152ac575f80fd5b6020019150600581901b3603821315613698575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152eb575f80fd5b9190910192915050565b5f82601f830112615304575f80fd5b81356153126151df8261519c565b818152846020838601011115615326575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615352575f80fd5b61535a615122565b82356001600160401b0380821115615370575f80fd5b61537c368387016152f5565b83526020850135915080821115615391575f80fd5b5061539e368286016152f5565b60208301525060408301356153b281614e02565b604082015292915050565b5f82516152eb818460208701614f5a565b601f82111561060057805f5260205f20601f840160051c810160208510156153f35750805b601f840160051c820191505b81811015610ee6575f81556001016153ff565b81516001600160401b0381111561542b5761542b61510e565b61543f8161543984546150c8565b846153ce565b602080601f831160018114615472575f841561545b5750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154a057888601518255948401946001909101908401615481565b50858210156154bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124b9576124b96154cd565b604081525f6155136040830185614f7c565b90506001600160401b03831660208301529392505050565b5f63ffffffff808316818103615543576155436154cd565b6001019392505050565b6001600160401b03818116838216028082169190828114615570576155706154cd565b505092915050565b5f808335601e1984360301811261558d575f80fd5b83016020810192503590506001600160401b038111156155ab575f80fd5b803603821315613698575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569657848303601f19018952813536889003605e1901811261561d575f80fd5b8701606061562b8280615578565b82875261563b83880182846155b9565b9250505061564b86830183615578565b8683038888015261565d8382846155b9565b92505050604080830135925061567283614e02565b6001600160401b0392909216949091019390935297830197908301906001016155f8565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c781614d8f565b6001600160a01b031660608381019190915283013536849003601e190181126156ee575f80fd5b83016020810190356001600160401b03811115615709575f80fd5b8060051b360382131561571a575f80fd5b60808085015261572e60a0850182846155e1565b95945050505050565b5f8261575157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576a5761576a614f32565b91905290565b8082028115828204841417610ed457610ed46154cd565b5f8060408385031215615798575f80fd5b825191506020830151614ebb81614cae565b5f81546157b6816150c8565b8085526020600183811680156157d357600181146157ed57615818565b60ff1985168884015283151560051b880183019550615818565b865f52825f205f5b858110156158105781548a82018601529083019084016157f5565b890184019650505b505050505092915050565b604081525f61551360408301856157aa565b602081525f6134b460208301846157aa565b5f805f60608486031215615859575f80fd5b83519250602084015161586b81614e02565b604085015190925061587c81614e02565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124b9576124b96154cd565b5f80604083850312156158c7575f80fd5b82516001600160401b03808211156158dd575f80fd5b90840190606082870312156158f0575f80fd5b6158f8615122565b82518152602083015161590a81614d8f565b6020820152604083015182811115615920575f80fd5b61592c888286016151c2565b6040830152508094505050506020830151614ebb81614cae565b5f8060408385031215615957575f80fd5b825191506020830151614ebb81614e02565b80820180821115610ed457610ed46154cd565b5f808335601e19843603018112615991575f80fd5b8301803591506001600160401b038211156159aa575f80fd5b602001915036819003821315613698575f80fd5b5f8235603e198336030181126152eb575f80fd5b5f604082360312156159e2575f80fd5b6159ea61514a565b6159f383614cbb565b81526020808401356001600160401b0380821115615a0f575f80fd5b9085019036601f830112615a21575f80fd5b813581811115615a3357615a3361510e565b8060051b9150615a4484830161516c565b8181529183018401918481019036841115615a5d575f80fd5b938501935b83851015615a875784359250615a7783614d8f565b8282529385019390850190615a62565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af45784516001600160a01b03168252938301936001929092019190830190615acb565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b25610100840182614f7c565b90506040840151601f1980858403016060860152615b438383614f7c565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b738383615a99565b925060a08601519150808584030160c086015250615b918282615a99565b91505060c0840151615bae60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc7575f80fd5b8251915060208301516001600160401b03811115615be3575f80fd5b615bef858286016151c2565b9150509250929050565b608081525f615c0b6080830187614f7c565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154cd565b5f60208284031215615c54575f80fd5b6134b482614df1565b5f60208284031215615c6d575f80fd5b813560ff811681146134b4575f80fd5b5f6001600160401b03808316818103615543576155436154cd565b5f60208284031215615ca8575f80fd5b81516134b481614cae56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212202e56ae877e5052d2c0ddd9a5935283ea99b8af5087884b97e75b9fc6dbd6a59164736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615e76380380615e7683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d298061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614cce565b6105f4565b005b610277610287366004614d09565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614cce565b610898565b6102776102cc366004614d20565b6108a4565b6102776102df366004614d6e565b610e12565b6102f76102f2366004614d09565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614da3565b610eda565b61027761034c366004614cce565b610eed565b61036461035f366004614e16565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614da3565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d6e565b610f49565b6103646103cb366004614e7d565b61119a565b6103645f81565b6102776103e5366004614cce565b6111ba565b5f80516020615cb4833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614da3565b6111c6565b61027761043c366004614d6e565b6111d2565b610294603081565b610277610457366004614e98565b6113c5565b61027761046a366004614d09565b611476565b61036461047d366004614ec6565b61150a565b610277610490366004614da3565b6115e3565b6103646104a3366004614edf565b6115ef565b6102776104b6366004614eff565b61161b565b6103646104c9366004614ec6565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d09565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d09565b611b70565b610294601481565b61057361056e366004614ec6565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d09565b611e0f565b6040516102a29190614fa7565b6102f76202a30081565b6103645f80516020615cb483398151915281565b6102776105dc366004614e98565b611f5e565b6103646105ef36600461505d565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f32565b600581111561065957610659614f32565b815260200160018201805461066d906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150c8565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f32565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615209565b6040518263ffffffff1660e01b8152600401610852919061523a565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610892919061524c565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061524c565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615263565b6001600160a01b0316146109ba576109956060840160408501615263565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c8606085018561527e565b905090505f805b828163ffffffff161015610c08575f6109eb606088018861527e565b8363ffffffff16818110610a0157610a016152c3565b9050602002810190610a1391906152d7565b610a1c90615342565b80516040519192505f916006880191610a34916153bd565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f919060040161523a565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153bd565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb919061524c565b90508086600601835f0151604051610b0391906153bd565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615412565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154e1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615501565b60405180910390a2505080610c019061552b565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff168361554d565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123aa565b604001516040518263ffffffff1660e01b8152600401610cc2919061523a565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d01919061524c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156a3565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615209565b90505f600282604051610d8f91906153bd565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd919061524c565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c614f32565b14610e7c578060405163170cc93360e21b815260040161078f9190615100565b61089283836124e9565b5f80610e90612788565b60030154610e9e9084615737565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127ac565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f80516020615cd483398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c77565b5f610f52612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f32565b6003811115610f9c57610f9c614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b905060018351600381111561102957611029614f32565b1461104a578251604051633b0d540d60e21b815261078f9190600401615756565b60048151600581111561105f5761105f614f32565b036110755761106d86612ca3565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612788565b60030154610ed4906001600160401b038416615770565b6106008383835f612c77565b610ee6848484846127ac565b6111da6129f3565b5f6111e3612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c614f32565b600381111561122d5761122d614f32565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a6614f32565b146112c7578051604051633b0d540d60e21b815261078f9190600401615756565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f8614f32565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca3565b5050506113c160015f80516020615cd483398151915255565b5050565b5f6113ce612788565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612788565b90505f61148b83611e0f565b51905060048160058111156114a2576114a2614f32565b146114c2578060405163170cc93360e21b815260040161078f9190615100565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e74565b5f6115136129f3565b5f61151c612788565b90505f8061152985612e9e565b91509150611536826124c0565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b614f32565b036115aa576115aa8185612e74565b6115c0826115bb856040015161119a565b613253565b509193505050505b6115de60015f80516020615cd483398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613276565b9050610ed460015f80516020615cd483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134bb565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123aa565b604001516040518263ffffffff1660e01b815260040161174b919061523a565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615787565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c9906150c8565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561181457611814614f32565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f828152600484016020526040812061185f91614c1a565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615823565b60405180910390a2509392505050565b5f6118fe612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561193757611937614f32565b600381111561194857611948614f32565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c1614f32565b141580156119e257506003815160038111156119df576119df614f32565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615756565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af29190810190615209565b6040518263ffffffff1660e01b8152600401611b0e919061523a565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061524c565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b97906150c8565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be2614f32565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615835565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610600919061524c565b5f805f611c98846123aa565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd8919061523a565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615847565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17614c51565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a614f32565b6005811115611e6b57611e6b614f32565b8152602001600182018054611e7f906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab906150c8565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612788565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615887565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612788565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c0614f32565b60038111156120d1576120d1614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e614f32565b1461217f578251604051633b0d540d60e21b815261078f9190600401615756565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b0316906154e1565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561223057612230614f32565b036123525760028401546080840151612252916001600160401b0316906154e1565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124e9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615896565b6134d5565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561231484888c61369f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561236757612367614f32565b0361238e5761237783878b61369f565b5061238189612ca3565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615100565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243591908101906158b6565b915091508061245757604051636b2f19e960e01b815260040160405180910390fd5b81511561247d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124b9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124ca612788565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261255b91908101906158b6565b915091508061257d57604051636b2f19e960e01b815260040160405180910390fd5b5f612586612788565b60058101548451919250146125b4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561262c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612669919061523a565b6040805180830381865af4158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190615946565b915091508188146126ce5760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b03908116908216111561275f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261277d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127b6612788565b90506127c18661388d565b5f6127cb87611e0f565b90506127d6876124c0565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b0316906154e1565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124e9565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061524c565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615969565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cd4833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612788565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613b78565b90505f612b0682610e86565b90505f612bcd612b168a8061597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c61597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01614e7d565b612ba860608e018e6159be565b612bb1906159d2565b612bbe60808f018f6159be565b612bc7906159d2565b87613b9b565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cd483398151915255565b612c83848484846127ac565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cac612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce557612ce5614f32565b6003811115612cf657612cf6614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6a613f54565b8260800151612d7991906154e1565b6001600160401b0316421015612dad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e08575060208201515b5f80612e15838886613f6f565b91509150612e2e85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7d612788565b5f838152600a8201602052604081208054919055909150610892848261401c565b5f612ea7614c51565b5f612eb0612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed7886123aa565b604001516040518263ffffffff1660e01b8152600401612ef7919061523a565b6040805180830381865af4158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190615787565b915091508015612f5c57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9457612f94614f32565b6005811115612fa557612fa5614f32565b8152602001600182018054612fb9906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe5906150c8565b80156130305780601f1061300757610100808354040283529160200191613030565b820191905f5260205f20905b81548152906001019060200180831161301357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a8576130a8614f32565b141580156130c957506001815160058111156130c6576130c6614f32565b14155b156130ea57805160405163170cc93360e21b815261078f9190600401615100565b6003815160058111156130ff576130ff614f32565b0361310d5760048152613112565b600581525b83600601816020015160405161312891906153bd565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316b5761316b614f32565b0217905550602082015160018201906131849082615412565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615cb4833981519152546113c1906001600160a01b03168383614092565b5f80613280612788565b90505f61328f6102f285613b78565b90505f61329b87611e0f565b90506132a6876124c0565b6132c6576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132db576132db614f32565b146132fc57805160405163170cc93360e21b815261078f9190600401615100565b5f828260a0015161330d91906154e1565b905083600201600a9054906101000a90046001600160401b03168260400151613336919061554d565b6001600160401b0316816001600160401b0316111561337357604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f8061337f8a846134d5565b915091505f8a836040516020016133ad92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134c36140f1565b6134cc8261413c565b6113c1816141b9565b5f805f6134e0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135108582614221565b5f61351a8761448e565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135e59190810190615209565b6040518263ffffffff1660e01b8152600401613601919061523a565b6020604051808303815f875af115801561361d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613641919061524c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136a9612788565b90505f6136b98660400151611e0f565b90505f6003825160058111156136d1576136d1614f32565b14806136ef57506004825160058111156136ed576136ed614f32565b145b156136ff575060e081015161373c565b60028251600581111561371457613714614f32565b0361372057504261373c565b815160405163170cc93360e21b815261078f9190600401615100565b86608001516001600160401b0316816001600160401b031611613764575f93505050506134b4565b600483015460608801515f916001600160a01b031690634f22429f906137899061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561380a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382e919061524c565b90506001600160a01b03871661384657876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613896612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138d0576138d0614f32565b60058111156138e1576138e1614f32565b81526020016001820180546138f5906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613921906150c8565b801561396c5780601f106139435761010080835404028352916020019161396c565b820191905f5260205f20905b81548152906001019060200180831161394f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139e4576139e4614f32565b14613a17575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a5c57613a5c614f32565b021790555060208201516001820190613a759082615412565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b1584826134d5565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b6a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615cb4833981519152546001600160a01b0316906144f7565b5f613ba4612059565b6007015460ff16613bc857604051637fab81e560e01b815260040160405180910390fd5b5f613bd1612059565b905042866001600160401b0316111580613c005750613bf36202a30042615969565b866001600160401b031610155b15613c2957604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c4c90600160401b90048216858316615969565b1115613c7657604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c7f85614503565b613c8884614503565b8651603014613caf5786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613cd25787604051633e08a12560e11b815260040161078f919061523a565b5f801b8160060189604051613ce791906153bd565b90815260200160405180910390205414613d16578760405163a41f772f60e01b815260040161078f919061523a565b613d20835f614221565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613da09190615aff565b5f60405180830381865af4158015613dba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613de19190810190615bb6565b5f82815260048601602052604090209193509150613dff8282615412565b5081836006018b604051613e1391906153bd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e4f90859060040161523a565b6020604051808303815f875af1158015613e6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8f919061524c565b5f8481526005860160205260409020805460ff19166001908117825591925001613eb98c82615412565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f3d908e9085908e908c90615bf9565b60405180910390a250909998505050505050505050565b5f613f5d612059565b600101546001600160401b0316919050565b5f805f613f7a612788565b5f8681526008820160205260408120805490829055919250908190801561400e575f87815260068501602052604090205461271090613fc490600160a01b900461ffff1683615770565b613fce9190615737565b91508184600a015f8981526020019081526020015f205f828254613ff29190615969565b9091555061400290508282615c31565b925061400e898461401c565b509097909650945050505050565b5f5f80516020615cb483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614077575f80fd5b505af1158015614089573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614622565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413a57604051631afcd79f60e31b815260040160405180910390fd5b565b6141446140f1565b61414d81614683565b61415561469c565b6141b66060820135608083013561417260c0850160a08601614e7d565b61418260e0860160c08701615c44565b614193610100870160e08801615c5d565b6101008701356141ab61014089016101208a01615263565b8861014001356146ac565b50565b6141c16140f1565b5f80516020615cb48339815191526001600160a01b03821661420157604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61422a612059565b90505f826001600160401b0316846001600160401b03161115614258576142518385615896565b9050614265565b6142628484615896565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142d25750600184015481516142ce916001600160401b031690615969565b8210155b156142fa576001600160401b0380841660608301528282526040820151166020820152614319565b828160600181815161430c91906154e1565b6001600160401b03169052505b606081015161432990606461554d565b602082015160018601546001600160401b0392909216916143549190600160401b900460ff1661554d565b6001600160401b0316101561438d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b858160400181815161439f91906154e1565b6001600160401b03169052506040810180518691906143bf908390615896565b6001600160401b0316905250600184015460408201516064916143ed91600160401b90910460ff169061554d565b6001600160401b03161015614426576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614498612059565b5f84815260058201602052604090206002018054919250906008906144cc90600160401b90046001600160401b0316615c7d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134b483338461486e565b805163ffffffff1615801561451c575060208101515115155b1561455057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561459357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c15760208201516145b3600183615c31565b815181106145c3576145c36152c3565b60200260200101516001600160a01b0316826020015182815181106145ea576145ea6152c3565b60200260200101516001600160a01b0316101561461a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614596565b5f6146366001600160a01b038416836149d1565b905080515f1415801561465a5750808060200190518101906146589190615c98565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b61468b6140f1565b6146936149de565b6141b6816149e6565b6146a46140f1565b61413a614aca565b6146b46140f1565b5f6146bd612788565b905061ffff861615806146d5575061271061ffff8716115b156146f957604051635f12e6c360e11b815261ffff8716600482015260240161078f565b8789111561471d5760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147305750600a60ff8616115b156147535760405163170db35960e31b815260ff8616600482015260240161078f565b61475b613f54565b6001600160401b0316876001600160401b03161015614797576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147b75760405163a733007160e01b815260040160405180910390fd5b816147d857604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148d8919061524c565b90506148ef6001600160a01b038616853086614ad2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614933573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614957919061524c565b90508181116149bd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149c78282615c31565b9695505050505050565b60606134b483835f614b0b565b61413a6140f1565b6149ee6140f1565b5f6149f7612059565b8235815590506014614a0f6060840160408501615c5d565b60ff161180614a2e5750614a296060830160408401615c5d565b60ff16155b15614a6257614a436060830160408401615c5d565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a726060830160408401615c5d565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa36040830160208401614e7d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c646140f1565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140bf565b606081471015614b305760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b4b91906153bd565b5f6040518083038185875af1925050503d805f8114614b85576040519150601f19603f3d011682016040523d82523d5f602084013e614b8a565b606091505b50915091506149c7868383606082614baa57614ba582614bf1565b6134b4565b8151158015614bc157506001600160a01b0384163b155b15614bea57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134b4565b805115614c015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c26906150c8565b5f825580601f10614c35575050565b601f0160209004905f5260205f20908101906141b69190614c96565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614caa575f8155600101614c97565b5090565b80151581146141b6575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215614ce0575f80fd5b833592506020840135614cf281614cae565b9150614d0060408501614cbb565b90509250925092565b5f60208284031215614d19575f80fd5b5035919050565b5f8060408385031215614d31575f80fd5b82356001600160401b03811115614d46575f80fd5b830160808186031215614d57575f80fd5b9150614d6560208401614cbb565b90509250929050565b5f8060408385031215614d7f575f80fd5b82359150614d6560208401614cbb565b6001600160a01b03811681146141b6575f80fd5b5f805f8060808587031215614db6575f80fd5b843593506020850135614dc881614cae565b9250614dd660408601614cbb565b91506060850135614de681614d8f565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b03811681146141b6575f80fd5b5f805f8060808587031215614e29575f80fd5b84356001600160401b03811115614e3e575f80fd5b850160a08188031215614e4f575f80fd5b9350614e5d60208601614df1565b92506040850135614e6d81614e02565b9396929550929360600135925050565b5f60208284031215614e8d575f80fd5b81356134b481614e02565b5f8060408385031215614ea9575f80fd5b823591506020830135614ebb81614d8f565b809150509250929050565b5f60208284031215614ed6575f80fd5b6134b482614cbb565b5f8060408385031215614ef0575f80fd5b50508035926020909101359150565b5f80828403610180811215614f12575f80fd5b61016080821215614f21575f80fd5b8493508301359050614ebb81614d8f565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5657614f56614f32565b9052565b5f5b83811015614f74578181015183820152602001614f5c565b50505f910152565b5f8151808452614f93816020860160208601614f5a565b601f01601f19169290920160200192915050565b60208152614fb9602082018351614f46565b5f6020830151610100806040850152614fd6610120850183614f7c565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161501560a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f806020838503121561506e575f80fd5b82356001600160401b0380821115615084575f80fd5b818501915085601f830112615097575f80fd5b8135818111156150a5575f80fd5b8660208285010111156150b6575f80fd5b60209290920196919550909350505050565b600181811c908216806150dc57607f821691505b6020821081036150fa57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f46565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151445761514461510e565b60405290565b604080519081016001600160401b03811182821017156151445761514461510e565b604051601f8201601f191681016001600160401b03811182821017156151945761519461510e565b604052919050565b5f6001600160401b038211156151b4576151b461510e565b50601f01601f191660200190565b5f82601f8301126151d1575f80fd5b81516151e46151df8261519c565b61516c565b8181528460208386010111156151f8575f80fd5b610f26826020830160208701614f5a565b5f60208284031215615219575f80fd5b81516001600160401b0381111561522e575f80fd5b610f26848285016151c2565b602081525f6134b46020830184614f7c565b5f6020828403121561525c575f80fd5b5051919050565b5f60208284031215615273575f80fd5b81356134b481614d8f565b5f808335601e19843603018112615293575f80fd5b8301803591506001600160401b038211156152ac575f80fd5b6020019150600581901b3603821315613698575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152eb575f80fd5b9190910192915050565b5f82601f830112615304575f80fd5b81356153126151df8261519c565b818152846020838601011115615326575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615352575f80fd5b61535a615122565b82356001600160401b0380821115615370575f80fd5b61537c368387016152f5565b83526020850135915080821115615391575f80fd5b5061539e368286016152f5565b60208301525060408301356153b281614e02565b604082015292915050565b5f82516152eb818460208701614f5a565b601f82111561060057805f5260205f20601f840160051c810160208510156153f35750805b601f840160051c820191505b81811015610ee6575f81556001016153ff565b81516001600160401b0381111561542b5761542b61510e565b61543f8161543984546150c8565b846153ce565b602080601f831160018114615472575f841561545b5750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154a057888601518255948401946001909101908401615481565b50858210156154bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124b9576124b96154cd565b604081525f6155136040830185614f7c565b90506001600160401b03831660208301529392505050565b5f63ffffffff808316818103615543576155436154cd565b6001019392505050565b6001600160401b03818116838216028082169190828114615570576155706154cd565b505092915050565b5f808335601e1984360301811261558d575f80fd5b83016020810192503590506001600160401b038111156155ab575f80fd5b803603821315613698575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569657848303601f19018952813536889003605e1901811261561d575f80fd5b8701606061562b8280615578565b82875261563b83880182846155b9565b9250505061564b86830183615578565b8683038888015261565d8382846155b9565b92505050604080830135925061567283614e02565b6001600160401b0392909216949091019390935297830197908301906001016155f8565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c781614d8f565b6001600160a01b031660608381019190915283013536849003601e190181126156ee575f80fd5b83016020810190356001600160401b03811115615709575f80fd5b8060051b360382131561571a575f80fd5b60808085015261572e60a0850182846155e1565b95945050505050565b5f8261575157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576a5761576a614f32565b91905290565b8082028115828204841417610ed457610ed46154cd565b5f8060408385031215615798575f80fd5b825191506020830151614ebb81614cae565b5f81546157b6816150c8565b8085526020600183811680156157d357600181146157ed57615818565b60ff1985168884015283151560051b880183019550615818565b865f52825f205f5b858110156158105781548a82018601529083019084016157f5565b890184019650505b505050505092915050565b604081525f61551360408301856157aa565b602081525f6134b460208301846157aa565b5f805f60608486031215615859575f80fd5b83519250602084015161586b81614e02565b604085015190925061587c81614e02565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124b9576124b96154cd565b5f80604083850312156158c7575f80fd5b82516001600160401b03808211156158dd575f80fd5b90840190606082870312156158f0575f80fd5b6158f8615122565b82518152602083015161590a81614d8f565b6020820152604083015182811115615920575f80fd5b61592c888286016151c2565b6040830152508094505050506020830151614ebb81614cae565b5f8060408385031215615957575f80fd5b825191506020830151614ebb81614e02565b80820180821115610ed457610ed46154cd565b5f808335601e19843603018112615991575f80fd5b8301803591506001600160401b038211156159aa575f80fd5b602001915036819003821315613698575f80fd5b5f8235603e198336030181126152eb575f80fd5b5f604082360312156159e2575f80fd5b6159ea61514a565b6159f383614cbb565b81526020808401356001600160401b0380821115615a0f575f80fd5b9085019036601f830112615a21575f80fd5b813581811115615a3357615a3361510e565b8060051b9150615a4484830161516c565b8181529183018401918481019036841115615a5d575f80fd5b938501935b83851015615a875784359250615a7783614d8f565b8282529385019390850190615a62565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af45784516001600160a01b03168252938301936001929092019190830190615acb565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b25610100840182614f7c565b90506040840151601f1980858403016060860152615b438383614f7c565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b738383615a99565b925060a08601519150808584030160c086015250615b918282615a99565b91505060c0840151615bae60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc7575f80fd5b8251915060208301516001600160401b03811115615be3575f80fd5b615bef858286016151c2565b9150509250929050565b608081525f615c0b6080830187614f7c565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154cd565b5f60208284031215615c54575f80fd5b6134b482614df1565b5f60208284031215615c6d575f80fd5b813560ff811681146134b4575f80fd5b5f6001600160401b03808316818103615543576155436154cd565b5f60208284031215615ca8575f80fd5b81516134b481614cae56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220eb3ee0daa57d2aebbba17cb5368b3b61076fec41c0f031fbf4fa7f5c0eb64b4e64736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index a0c5fc45d..0d5175691 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"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\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615bce380380615bce83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a818061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614ab4565b610792565b005b348015610279575f80fd5b5061026c610288366004614aef565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b06565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614ab4565b610b13565b348015610301575f80fd5b5061026c610310366004614b1d565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b6b565b61108d565b34801561033f575f80fd5b5061035361034e366004614aef565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614ba0565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614ab4565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614ba0565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b6b565b61118f565b348015610497575f80fd5b506104176104a6366004614c02565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614ab4565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614ba0565b61140c565b348015610507575f80fd5b5061026c610516366004614b6b565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c1d565b61160b565b348015610559575f80fd5b5061026c610568366004614aef565b6116bc565b348015610578575f80fd5b50610417610587366004614c4b565b611750565b348015610597575f80fd5b5061026c6105a6366004614ba0565b611829565b3480156105b6575f80fd5b506104176105c5366004614c4b565b611835565b6104176105d8366004614c75565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614aef565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614aef565b611cdf565b6104176106bd366004614aef565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c4b565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614aef565b611faa565b6040516102ce9190614d4b565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c1d565b6120f9565b34801561077e575f80fd5b5061041761078d366004614e01565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614cd6565b60058111156107f7576107f7614cd6565b815260200160018201805461080b90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e6c565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614cd6565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fa7565b6040518263ffffffff1660e01b81526004016109f09190614fd8565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190614fea565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190614fea565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615001565b6001600160a01b031614610c3557610c106060840160408501615001565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c43606085018561501c565b905090505f805b828163ffffffff161015610e83575f610c66606088018861501c565b8363ffffffff16818110610c7c57610c7c615061565b9050602002810190610c8e9190615075565b610c97906150e0565b80516040519192505f916006880191610caf9161515b565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fd8565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d289161515b565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190614fea565b90508086600601835f0151604051610d7e919061515b565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151b0565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d908561527f565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e6892919061529f565b60405180910390a2505080610e7c906152c9565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836152eb565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612561565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fd8565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190614fea565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615441565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fa7565b90505f60028260405161100a919061515b565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190614fea565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612677565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d7614cd6565b146110f7578060405163170cc93360e21b815260040161092d9190614e9e565b610a3083836126a0565b5f8061110b61293f565b6003015461111990846154d5565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f612963565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f61119861293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614cd6565b60038111156111e2576111e2614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f614cd6565b14611290578251604051633b0d540d60e21b815261092d91906004016154f4565b6004815160058111156112a5576112a5614cd6565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e961293f565b6003015461114f906001600160401b03841661550e565b61079e8383835f612baa565b61116184848484612963565b611420612da7565b5f61142961293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146257611462614cd6565b600381111561147357611473614cd6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec614cd6565b1461150d578051604051633b0d540d60e21b815261092d91906004016154f4565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e614cd6565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615a2c83398151915255565b5050565b5f61161461293f565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c561293f565b90505f6116d183611faa565b51905060048160058111156116e8576116e8614cd6565b14611708578060405163170cc93360e21b815260040161092d9190614e9e565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f61176261293f565b90505f8061176f85612e1b565b9150915061177c82612677565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e1614cd6565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615a2c83398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61186687612561565b604001516040518263ffffffff1660e01b81526004016118869190614fd8565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c49190615525565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490614e6c565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f614cd6565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f828152600484016020526040812061199a91614a00565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b90920416906155c1565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615a2c83398151915255565b9392505050565b5f611a6d61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa6614cd6565b6003811115611ab757611ab7614cd6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b30614cd6565b14158015611b515750600381516003811115611b4e57611b4e614cd6565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016154f4565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c619190810190614fa7565b6040518263ffffffff1660e01b8152600401611c7d9190614fd8565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190614fea565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690614e6c565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d51614cd6565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb92016155d3565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190614fea565b5f611e04612da7565b611e0f823334613412565b905061182460015f80516020615a2c83398151915255565b5f805f611e3384612561565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e739190614fd8565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb291906155e5565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614a37565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff5614cd6565b600581111561200657612006614cd6565b815260200160018201805461201a90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461204690614e6c565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f61213461293f565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b092919061561a565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612220613652565b6122298161369d565b50565b5f8061223661293f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f614cd6565b600381111561228057612280614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d614cd6565b1461232e578251604051633b0d540d60e21b815261092d91906004016154f4565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b03169061527f565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df614cd6565b036125015760028401546080840151612401916001600160401b03169061527f565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b9190615629565b613717565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124c384888c6138e1565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125599350505050565b60048151600581111561251657612516614cd6565b0361253d5761252683878b6138e1565b5061253089612bd6565b6001945050505050612559565b805160405163170cc93360e21b815261092d9190600401614e9e565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ec9190810190615649565b915091508061260e57604051636b2f19e960e01b815260040160405180910390fd5b815115612634578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612670576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268161293f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127129190810190615649565b915091508061273457604051636b2f19e960e01b815260040160405180910390fd5b5f61273d61293f565b600581015484519192501461276b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127a7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127e3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128209190614fd8565b6040805180830381865af415801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906156d9565b915091508188146128855760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b039081169082161115612916575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612934565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061296d61293f565b905061297886613acf565b5f61298287611faa565b905061298d87612677565b61299c57600192505050612559565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b03169061527f565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a0565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b209190614fea565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b9084906156fc565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb684848484612963565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c18614cd6565b6003811115612c2957612c29614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613dba565b8260800151612cac919061527f565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613dd5565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a2c833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a2c83398151915255565b5f612dfa61293f565b5f838152600a8201602052604081208054919055909150610a308482613e82565b5f612e24614a37565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e5488612561565b604001516040518263ffffffff1660e01b8152600401612e749190614fd8565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb29190615525565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f11614cd6565b6005811115612f2257612f22614cd6565b8152602001600182018054612f3690614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614e6c565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561302557613025614cd6565b14158015613046575060018151600581111561304357613043614cd6565b14155b1561306757805160405163170cc93360e21b815261092d9190600401614e9e565b60038151600581111561307c5761307c614cd6565b0361308a576004815261308f565b600581525b8360060181602001516040516130a5919061515b565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e8614cd6565b02179055506020820151600182019061310190826151b0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682613ee0565b5f806131ed61293f565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a8061570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c61570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614c02565b61335660608e018e615751565b61335f90615765565b61336c60808f018f615751565b61337590615765565b87613f73565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341c61293f565b90505f61342884611101565b90505f61343487611faa565b905061343f87612677565b61345f576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561347457613474614cd6565b1461349557805160405163170cc93360e21b815261092d9190600401614e9e565b5f828260a001516134a6919061527f565b905083600201600a9054906101000a90046001600160401b031682604001516134cf91906152eb565b6001600160401b0316816001600160401b0316111561350c57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f806135188a84613717565b915091505f8a8360405160200161354692919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661369b57604051631afcd79f60e31b815260040160405180910390fd5b565b6136a5613652565b6136ae8161432c565b6136b6614345565b612229606082013560808301356136d360c0850160a08601614c02565b6136e360e0860160c0870161582c565b6136f4610100870160e08801615845565b61010087013561370c61014089016101208a01615001565b886101400135614355565b5f805f6137226121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137528582614517565b5f61375c87614784565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613800573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138279190810190614fa7565b6040518263ffffffff1660e01b81526004016138439190614fd8565b6020604051808303815f875af115801561385f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138839190614fea565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806138eb61293f565b90505f6138fb8660400151611faa565b90505f60038251600581111561391357613913614cd6565b1480613931575060048251600581111561392f5761392f614cd6565b145b15613941575060e081015161397e565b60028251600581111561395657613956614cd6565b0361396257504261397e565b815160405163170cc93360e21b815261092d9190600401614e9e565b86608001516001600160401b0316816001600160401b0316116139a6575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f906139cb906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614fea565b90506001600160a01b038716613a8857876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613ad86121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b1257613b12614cd6565b6005811115613b2357613b23614cd6565b8152602001600182018054613b3790614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6390614e6c565b8015613bae5780601f10613b8557610100808354040283529160200191613bae565b820191905f5260205f20905b815481529060010190602001808311613b9157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c2657613c26614cd6565b14613c59575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613c9e57613c9e614cd6565b021790555060208201516001820190613cb790826151b0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d578482613717565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dac939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dc36121f4565b600101546001600160401b0316919050565b5f805f613de061293f565b5f86815260088201602052604081208054908290559192509081908015613e74575f87815260068501602052604090205461271090613e2a90600160a01b900461ffff168361550e565b613e3491906154d5565b91508184600a015f8981526020019081526020015f205f828254613e5891906156fc565b90915550613e6890508282615865565b9250613e748984613e82565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ece575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f035760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f4c576040519150601f19603f3d011682016040523d82523d5f602084013e613f51565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f7c6121f4565b6007015460ff16613fa057604051637fab81e560e01b815260040160405180910390fd5b5f613fa96121f4565b905042866001600160401b0316111580613fd85750613fcb6202a300426156fc565b866001600160401b031610155b1561400157604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061402490600160401b900482168583166156fc565b111561404e57604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b614057856147ed565b614060846147ed565b86516030146140875786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140aa5787604051633e08a12560e11b815260040161092d9190614fd8565b5f801b81600601896040516140bf919061515b565b908152602001604051809103902054146140ee578760405163a41f772f60e01b815260040161092d9190614fd8565b6140f8835f614517565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161417891906158de565b5f60405180830381865af4158015614192573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b99190810190615995565b5f828152600486016020526040902091935091506141d782826151b0565b5081836006018b6040516141eb919061515b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614227908590600401614fd8565b6020604051808303815f875af1158015614243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142679190614fea565b5f8481526005860160205260409020805460ff191660019081178255919250016142918c826151b0565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90614315908e9085908e908c906159d8565b60405180910390a250909998505050505050505050565b614334613652565b61433c61490c565b61222981614914565b61434d613652565b61369b6149f8565b61435d613652565b5f61436661293f565b905061ffff8616158061437e575061271061ffff8716115b156143a257604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143c65760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143d95750600a60ff8616115b156143fc5760405163170db35960e31b815260ff8616600482015260240161092d565b614404613dba565b6001600160401b0316876001600160401b03161015614440576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144605760405163a733007160e01b815260040160405180910390fd5b8161448157604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145206121f4565b90505f826001600160401b0316846001600160401b0316111561454e576145478385615629565b905061455b565b6145588484615629565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c85750600184015481516145c4916001600160401b0316906156fc565b8210155b156145f0576001600160401b038084166060830152828252604082015116602082015261460f565b8281606001818151614602919061527f565b6001600160401b03169052505b606081015161461f9060646152eb565b602082015160018601546001600160401b03929092169161464a9190600160401b900460ff166152eb565b6001600160401b0316101561468357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614695919061527f565b6001600160401b03169052506040810180518691906146b5908390615629565b6001600160401b0316905250600184015460408201516064916146e391600160401b90910460ff16906152eb565b6001600160401b0316101561471c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061478e6121f4565b5f84815260058201602052604090206002018054919250906008906147c290600160401b90046001600160401b0316615a10565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614806575060208101515115155b1561483a57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561487d57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b81602001515181101561160757602082015161489d600183615865565b815181106148ad576148ad615061565b60200260200101516001600160a01b0316826020015182815181106148d4576148d4615061565b60200260200101516001600160a01b0316101561490457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614880565b61369b613652565b61491c613652565b5f6149256121f4565b823581559050601461493d6060840160408501615845565b60ff16118061495c57506149576060830160408401615845565b60ff16155b15614990576149716060830160408401615845565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149a06060830160408401615845565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149d16040830160208401614c02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde613652565b508054614a0c90614e6c565b5f825580601f10614a1b575050565b601f0160209004905f5260205f20908101906122299190614a7c565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614a90575f8155600101614a7d565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614ac6575f80fd5b833592506020840135614ad881614a94565b9150614ae660408501614aa1565b90509250925092565b5f60208284031215614aff575f80fd5b5035919050565b5f6101608284031215614b17575f80fd5b50919050565b5f8060408385031215614b2e575f80fd5b82356001600160401b03811115614b43575f80fd5b830160808186031215614b54575f80fd5b9150614b6260208401614aa1565b90509250929050565b5f8060408385031215614b7c575f80fd5b82359150614b6260208401614aa1565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614bb3575f80fd5b843593506020850135614bc581614a94565b9250614bd360408601614aa1565b91506060850135614be381614b8c565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614c12575f80fd5b8135611a5d81614bee565b5f8060408385031215614c2e575f80fd5b823591506020830135614c4081614b8c565b809150509250929050565b5f60208284031215614c5b575f80fd5b611a5d82614aa1565b803561ffff81168114611824575f80fd5b5f805f60608486031215614c87575f80fd5b83356001600160401b03811115614c9c575f80fd5b840160a08187031215614cad575f80fd5b9250614cbb60208501614c64565b91506040840135614ccb81614bee565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614cfa57614cfa614cd6565b9052565b5f5b83811015614d18578181015183820152602001614d00565b50505f910152565b5f8151808452614d37816020860160208601614cfe565b601f01601f19169290920160200192915050565b60208152614d5d602082018351614cea565b5f6020830151610100806040850152614d7a610120850183614d20565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614db960a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e12575f80fd5b82356001600160401b0380821115614e28575f80fd5b818501915085601f830112614e3b575f80fd5b813581811115614e49575f80fd5b866020828501011115614e5a575f80fd5b60209290920196919550909350505050565b600181811c90821680614e8057607f821691505b602082108103614b1757634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614cea565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ee257614ee2614eac565b60405290565b604080519081016001600160401b0381118282101715614ee257614ee2614eac565b604051601f8201601f191681016001600160401b0381118282101715614f3257614f32614eac565b604052919050565b5f6001600160401b03821115614f5257614f52614eac565b50601f01601f191660200190565b5f82601f830112614f6f575f80fd5b8151614f82614f7d82614f3a565b614f0a565b818152846020838601011115614f96575f80fd5b612559826020830160208701614cfe565b5f60208284031215614fb7575f80fd5b81516001600160401b03811115614fcc575f80fd5b61255984828501614f60565b602081525f611a5d6020830184614d20565b5f60208284031215614ffa575f80fd5b5051919050565b5f60208284031215615011575f80fd5b8135611a5d81614b8c565b5f808335601e19843603018112615031575f80fd5b8301803591506001600160401b0382111561504a575f80fd5b6020019150600581901b36038213156138da575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615089575f80fd5b9190910192915050565b5f82601f8301126150a2575f80fd5b81356150b0614f7d82614f3a565b8181528460208386010111156150c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150f0575f80fd5b6150f8614ec0565b82356001600160401b038082111561510e575f80fd5b61511a36838701615093565b8352602085013591508082111561512f575f80fd5b5061513c36828601615093565b602083015250604083013561515081614bee565b604082015292915050565b5f8251615089818460208701614cfe565b601f82111561079e57805f5260205f20601f840160051c810160208510156151915750805b601f840160051c820191505b81811015611161575f815560010161519d565b81516001600160401b038111156151c9576151c9614eac565b6151dd816151d78454614e6c565b8461516c565b602080601f831160018114615210575f84156151f95750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561523e5788860151825594840194600190910190840161521f565b508582101561525b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126705761267061526b565b604081525f6152b16040830185614d20565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152e1576152e161526b565b6001019392505050565b6001600160401b0381811683821602808216919082811461530e5761530e61526b565b505092915050565b5f808335601e1984360301811261532b575f80fd5b83016020810192503590506001600160401b03811115615349575f80fd5b8036038213156138da575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543457848303601f19018952813536889003605e190181126153bb575f80fd5b870160606153c98280615316565b8287526153d98388018284615357565b925050506153e986830183615316565b868303888801526153fb838284615357565b92505050604080830135925061541083614bee565b6001600160401b039290921694909101939093529783019790830190600101615396565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561546581614b8c565b6001600160a01b031660608381019190915283013536849003601e1901811261548c575f80fd5b83016020810190356001600160401b038111156154a7575f80fd5b8060051b36038213156154b8575f80fd5b6080808501526154cc60a08501828461537f565b95945050505050565b5f826154ef57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550857615508614cd6565b91905290565b808202811582820484141761114f5761114f61526b565b5f8060408385031215615536575f80fd5b825191506020830151614c4081614a94565b5f815461555481614e6c565b808552602060018381168015615571576001811461558b576155b6565b60ff1985168884015283151560051b8801830195506155b6565b865f52825f205f5b858110156155ae5781548a8201860152908301908401615593565b890184019650505b505050505092915050565b604081525f6152b16040830185615548565b602081525f611a5d6020830184615548565b5f805f606084860312156155f7575f80fd5b83519250602084015161560981614bee565b6040850151909250614ccb81614bee565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126705761267061526b565b5f806040838503121561565a575f80fd5b82516001600160401b0380821115615670575f80fd5b9084019060608287031215615683575f80fd5b61568b614ec0565b82518152602083015161569d81614b8c565b60208201526040830151828111156156b3575f80fd5b6156bf88828601614f60565b6040830152508094505050506020830151614c4081614a94565b5f80604083850312156156ea575f80fd5b825191506020830151614c4081614bee565b8082018082111561114f5761114f61526b565b5f808335601e19843603018112615724575f80fd5b8301803591506001600160401b0382111561573d575f80fd5b6020019150368190038213156138da575f80fd5b5f8235603e19833603018112615089575f80fd5b5f60408236031215615775575f80fd5b61577d614ee8565b61578683614aa1565b81526020808401356001600160401b03808211156157a2575f80fd5b9085019036601f8301126157b4575f80fd5b8135818111156157c6576157c6614eac565b8060051b91506157d7848301614f0a565b81815291830184019184810190368411156157f0575f80fd5b938501935b8385101561581a578435925061580a83614b8c565b82825293850193908501906157f5565b94860194909452509295945050505050565b5f6020828403121561583c575f80fd5b611a5d82614c64565b5f60208284031215615855575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f61526b565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158d35784516001600160a01b031682529383019360019290920191908301906158aa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615904610100840182614d20565b90506040840151601f19808584030160608601526159228383614d20565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159528383615878565b925060a08601519150808584030160c0860152506159708282615878565b91505060c084015161598d60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159a6575f80fd5b8251915060208301516001600160401b038111156159c2575f80fd5b6159ce85828601614f60565b9150509250929050565b608081525f6159ea6080830187614d20565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152e1576152e161526b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122055f1486459db5ac8a1a440bf6d0f206207edac77aa2ad44cd82792a3ba6a7ab064736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615bce380380615bce83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a818061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614ab4565b610792565b005b348015610279575f80fd5b5061026c610288366004614aef565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b06565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614ab4565b610b13565b348015610301575f80fd5b5061026c610310366004614b1d565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b6b565b61108d565b34801561033f575f80fd5b5061035361034e366004614aef565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614ba0565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614ab4565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614ba0565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b6b565b61118f565b348015610497575f80fd5b506104176104a6366004614c02565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614ab4565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614ba0565b61140c565b348015610507575f80fd5b5061026c610516366004614b6b565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c1d565b61160b565b348015610559575f80fd5b5061026c610568366004614aef565b6116bc565b348015610578575f80fd5b50610417610587366004614c4b565b611750565b348015610597575f80fd5b5061026c6105a6366004614ba0565b611829565b3480156105b6575f80fd5b506104176105c5366004614c4b565b611835565b6104176105d8366004614c75565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614aef565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614aef565b611cdf565b6104176106bd366004614aef565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c4b565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614aef565b611faa565b6040516102ce9190614d4b565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c1d565b6120f9565b34801561077e575f80fd5b5061041761078d366004614e01565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614cd6565b60058111156107f7576107f7614cd6565b815260200160018201805461080b90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e6c565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614cd6565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fa7565b6040518263ffffffff1660e01b81526004016109f09190614fd8565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190614fea565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190614fea565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615001565b6001600160a01b031614610c3557610c106060840160408501615001565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c43606085018561501c565b905090505f805b828163ffffffff161015610e83575f610c66606088018861501c565b8363ffffffff16818110610c7c57610c7c615061565b9050602002810190610c8e9190615075565b610c97906150e0565b80516040519192505f916006880191610caf9161515b565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fd8565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d289161515b565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190614fea565b90508086600601835f0151604051610d7e919061515b565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151b0565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d908561527f565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e6892919061529f565b60405180910390a2505080610e7c906152c9565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836152eb565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612561565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fd8565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190614fea565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615441565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fa7565b90505f60028260405161100a919061515b565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190614fea565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612677565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d7614cd6565b146110f7578060405163170cc93360e21b815260040161092d9190614e9e565b610a3083836126a0565b5f8061110b61293f565b6003015461111990846154d5565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f612963565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f61119861293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614cd6565b60038111156111e2576111e2614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f614cd6565b14611290578251604051633b0d540d60e21b815261092d91906004016154f4565b6004815160058111156112a5576112a5614cd6565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e961293f565b6003015461114f906001600160401b03841661550e565b61079e8383835f612baa565b61116184848484612963565b611420612da7565b5f61142961293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146257611462614cd6565b600381111561147357611473614cd6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec614cd6565b1461150d578051604051633b0d540d60e21b815261092d91906004016154f4565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e614cd6565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615a2c83398151915255565b5050565b5f61161461293f565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c561293f565b90505f6116d183611faa565b51905060048160058111156116e8576116e8614cd6565b14611708578060405163170cc93360e21b815260040161092d9190614e9e565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f61176261293f565b90505f8061176f85612e1b565b9150915061177c82612677565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e1614cd6565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615a2c83398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61186687612561565b604001516040518263ffffffff1660e01b81526004016118869190614fd8565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c49190615525565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490614e6c565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f614cd6565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f828152600484016020526040812061199a91614a00565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b90920416906155c1565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615a2c83398151915255565b9392505050565b5f611a6d61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa6614cd6565b6003811115611ab757611ab7614cd6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b30614cd6565b14158015611b515750600381516003811115611b4e57611b4e614cd6565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016154f4565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c619190810190614fa7565b6040518263ffffffff1660e01b8152600401611c7d9190614fd8565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190614fea565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690614e6c565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d51614cd6565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb92016155d3565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190614fea565b5f611e04612da7565b611e0f823334613412565b905061182460015f80516020615a2c83398151915255565b5f805f611e3384612561565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e739190614fd8565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb291906155e5565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614a37565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff5614cd6565b600581111561200657612006614cd6565b815260200160018201805461201a90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461204690614e6c565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f61213461293f565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b092919061561a565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612220613652565b6122298161369d565b50565b5f8061223661293f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f614cd6565b600381111561228057612280614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d614cd6565b1461232e578251604051633b0d540d60e21b815261092d91906004016154f4565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b03169061527f565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df614cd6565b036125015760028401546080840151612401916001600160401b03169061527f565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b9190615629565b613717565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124c384888c6138e1565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125599350505050565b60048151600581111561251657612516614cd6565b0361253d5761252683878b6138e1565b5061253089612bd6565b6001945050505050612559565b805160405163170cc93360e21b815261092d9190600401614e9e565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ec9190810190615649565b915091508061260e57604051636b2f19e960e01b815260040160405180910390fd5b815115612634578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612670576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268161293f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127129190810190615649565b915091508061273457604051636b2f19e960e01b815260040160405180910390fd5b5f61273d61293f565b600581015484519192501461276b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127a7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127e3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128209190614fd8565b6040805180830381865af415801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906156d9565b915091508188146128855760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b039081169082161115612916575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612934565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061296d61293f565b905061297886613acf565b5f61298287611faa565b905061298d87612677565b61299c57600192505050612559565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b03169061527f565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a0565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b209190614fea565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b9084906156fc565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb684848484612963565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c18614cd6565b6003811115612c2957612c29614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613dba565b8260800151612cac919061527f565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613dd5565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a2c833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a2c83398151915255565b5f612dfa61293f565b5f838152600a8201602052604081208054919055909150610a308482613e82565b5f612e24614a37565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e5488612561565b604001516040518263ffffffff1660e01b8152600401612e749190614fd8565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb29190615525565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f11614cd6565b6005811115612f2257612f22614cd6565b8152602001600182018054612f3690614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614e6c565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561302557613025614cd6565b14158015613046575060018151600581111561304357613043614cd6565b14155b1561306757805160405163170cc93360e21b815261092d9190600401614e9e565b60038151600581111561307c5761307c614cd6565b0361308a576004815261308f565b600581525b8360060181602001516040516130a5919061515b565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e8614cd6565b02179055506020820151600182019061310190826151b0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682613ee0565b5f806131ed61293f565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a8061570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c61570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614c02565b61335660608e018e615751565b61335f90615765565b61336c60808f018f615751565b61337590615765565b87613f73565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341c61293f565b90505f61342884611101565b90505f61343487611faa565b905061343f87612677565b61345f576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561347457613474614cd6565b1461349557805160405163170cc93360e21b815261092d9190600401614e9e565b5f828260a001516134a6919061527f565b905083600201600a9054906101000a90046001600160401b031682604001516134cf91906152eb565b6001600160401b0316816001600160401b0316111561350c57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f806135188a84613717565b915091505f8a8360405160200161354692919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661369b57604051631afcd79f60e31b815260040160405180910390fd5b565b6136a5613652565b6136ae8161432c565b6136b6614345565b612229606082013560808301356136d360c0850160a08601614c02565b6136e360e0860160c0870161582c565b6136f4610100870160e08801615845565b61010087013561370c61014089016101208a01615001565b886101400135614355565b5f805f6137226121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137528582614517565b5f61375c87614784565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613800573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138279190810190614fa7565b6040518263ffffffff1660e01b81526004016138439190614fd8565b6020604051808303815f875af115801561385f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138839190614fea565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806138eb61293f565b90505f6138fb8660400151611faa565b90505f60038251600581111561391357613913614cd6565b1480613931575060048251600581111561392f5761392f614cd6565b145b15613941575060e081015161397e565b60028251600581111561395657613956614cd6565b0361396257504261397e565b815160405163170cc93360e21b815261092d9190600401614e9e565b86608001516001600160401b0316816001600160401b0316116139a6575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f906139cb906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614fea565b90506001600160a01b038716613a8857876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613ad86121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b1257613b12614cd6565b6005811115613b2357613b23614cd6565b8152602001600182018054613b3790614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6390614e6c565b8015613bae5780601f10613b8557610100808354040283529160200191613bae565b820191905f5260205f20905b815481529060010190602001808311613b9157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c2657613c26614cd6565b14613c59575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613c9e57613c9e614cd6565b021790555060208201516001820190613cb790826151b0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d578482613717565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dac939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dc36121f4565b600101546001600160401b0316919050565b5f805f613de061293f565b5f86815260088201602052604081208054908290559192509081908015613e74575f87815260068501602052604090205461271090613e2a90600160a01b900461ffff168361550e565b613e3491906154d5565b91508184600a015f8981526020019081526020015f205f828254613e5891906156fc565b90915550613e6890508282615865565b9250613e748984613e82565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ece575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f035760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f4c576040519150601f19603f3d011682016040523d82523d5f602084013e613f51565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f7c6121f4565b6007015460ff16613fa057604051637fab81e560e01b815260040160405180910390fd5b5f613fa96121f4565b905042866001600160401b0316111580613fd85750613fcb6202a300426156fc565b866001600160401b031610155b1561400157604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061402490600160401b900482168583166156fc565b111561404e57604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b614057856147ed565b614060846147ed565b86516030146140875786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140aa5787604051633e08a12560e11b815260040161092d9190614fd8565b5f801b81600601896040516140bf919061515b565b908152602001604051809103902054146140ee578760405163a41f772f60e01b815260040161092d9190614fd8565b6140f8835f614517565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161417891906158de565b5f60405180830381865af4158015614192573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b99190810190615995565b5f828152600486016020526040902091935091506141d782826151b0565b5081836006018b6040516141eb919061515b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614227908590600401614fd8565b6020604051808303815f875af1158015614243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142679190614fea565b5f8481526005860160205260409020805460ff191660019081178255919250016142918c826151b0565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90614315908e9085908e908c906159d8565b60405180910390a250909998505050505050505050565b614334613652565b61433c61490c565b61222981614914565b61434d613652565b61369b6149f8565b61435d613652565b5f61436661293f565b905061ffff8616158061437e575061271061ffff8716115b156143a257604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143c65760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143d95750600a60ff8616115b156143fc5760405163170db35960e31b815260ff8616600482015260240161092d565b614404613dba565b6001600160401b0316876001600160401b03161015614440576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144605760405163a733007160e01b815260040160405180910390fd5b8161448157604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145206121f4565b90505f826001600160401b0316846001600160401b0316111561454e576145478385615629565b905061455b565b6145588484615629565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c85750600184015481516145c4916001600160401b0316906156fc565b8210155b156145f0576001600160401b038084166060830152828252604082015116602082015261460f565b8281606001818151614602919061527f565b6001600160401b03169052505b606081015161461f9060646152eb565b602082015160018601546001600160401b03929092169161464a9190600160401b900460ff166152eb565b6001600160401b0316101561468357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614695919061527f565b6001600160401b03169052506040810180518691906146b5908390615629565b6001600160401b0316905250600184015460408201516064916146e391600160401b90910460ff16906152eb565b6001600160401b0316101561471c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061478e6121f4565b5f84815260058201602052604090206002018054919250906008906147c290600160401b90046001600160401b0316615a10565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614806575060208101515115155b1561483a57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561487d57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b81602001515181101561160757602082015161489d600183615865565b815181106148ad576148ad615061565b60200260200101516001600160a01b0316826020015182815181106148d4576148d4615061565b60200260200101516001600160a01b0316101561490457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614880565b61369b613652565b61491c613652565b5f6149256121f4565b823581559050601461493d6060840160408501615845565b60ff16118061495c57506149576060830160408401615845565b60ff16155b15614990576149716060830160408401615845565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149a06060830160408401615845565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149d16040830160208401614c02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde613652565b508054614a0c90614e6c565b5f825580601f10614a1b575050565b601f0160209004905f5260205f20908101906122299190614a7c565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614a90575f8155600101614a7d565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614ac6575f80fd5b833592506020840135614ad881614a94565b9150614ae660408501614aa1565b90509250925092565b5f60208284031215614aff575f80fd5b5035919050565b5f6101608284031215614b17575f80fd5b50919050565b5f8060408385031215614b2e575f80fd5b82356001600160401b03811115614b43575f80fd5b830160808186031215614b54575f80fd5b9150614b6260208401614aa1565b90509250929050565b5f8060408385031215614b7c575f80fd5b82359150614b6260208401614aa1565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614bb3575f80fd5b843593506020850135614bc581614a94565b9250614bd360408601614aa1565b91506060850135614be381614b8c565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614c12575f80fd5b8135611a5d81614bee565b5f8060408385031215614c2e575f80fd5b823591506020830135614c4081614b8c565b809150509250929050565b5f60208284031215614c5b575f80fd5b611a5d82614aa1565b803561ffff81168114611824575f80fd5b5f805f60608486031215614c87575f80fd5b83356001600160401b03811115614c9c575f80fd5b840160a08187031215614cad575f80fd5b9250614cbb60208501614c64565b91506040840135614ccb81614bee565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614cfa57614cfa614cd6565b9052565b5f5b83811015614d18578181015183820152602001614d00565b50505f910152565b5f8151808452614d37816020860160208601614cfe565b601f01601f19169290920160200192915050565b60208152614d5d602082018351614cea565b5f6020830151610100806040850152614d7a610120850183614d20565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614db960a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e12575f80fd5b82356001600160401b0380821115614e28575f80fd5b818501915085601f830112614e3b575f80fd5b813581811115614e49575f80fd5b866020828501011115614e5a575f80fd5b60209290920196919550909350505050565b600181811c90821680614e8057607f821691505b602082108103614b1757634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614cea565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ee257614ee2614eac565b60405290565b604080519081016001600160401b0381118282101715614ee257614ee2614eac565b604051601f8201601f191681016001600160401b0381118282101715614f3257614f32614eac565b604052919050565b5f6001600160401b03821115614f5257614f52614eac565b50601f01601f191660200190565b5f82601f830112614f6f575f80fd5b8151614f82614f7d82614f3a565b614f0a565b818152846020838601011115614f96575f80fd5b612559826020830160208701614cfe565b5f60208284031215614fb7575f80fd5b81516001600160401b03811115614fcc575f80fd5b61255984828501614f60565b602081525f611a5d6020830184614d20565b5f60208284031215614ffa575f80fd5b5051919050565b5f60208284031215615011575f80fd5b8135611a5d81614b8c565b5f808335601e19843603018112615031575f80fd5b8301803591506001600160401b0382111561504a575f80fd5b6020019150600581901b36038213156138da575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615089575f80fd5b9190910192915050565b5f82601f8301126150a2575f80fd5b81356150b0614f7d82614f3a565b8181528460208386010111156150c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150f0575f80fd5b6150f8614ec0565b82356001600160401b038082111561510e575f80fd5b61511a36838701615093565b8352602085013591508082111561512f575f80fd5b5061513c36828601615093565b602083015250604083013561515081614bee565b604082015292915050565b5f8251615089818460208701614cfe565b601f82111561079e57805f5260205f20601f840160051c810160208510156151915750805b601f840160051c820191505b81811015611161575f815560010161519d565b81516001600160401b038111156151c9576151c9614eac565b6151dd816151d78454614e6c565b8461516c565b602080601f831160018114615210575f84156151f95750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561523e5788860151825594840194600190910190840161521f565b508582101561525b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126705761267061526b565b604081525f6152b16040830185614d20565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152e1576152e161526b565b6001019392505050565b6001600160401b0381811683821602808216919082811461530e5761530e61526b565b505092915050565b5f808335601e1984360301811261532b575f80fd5b83016020810192503590506001600160401b03811115615349575f80fd5b8036038213156138da575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543457848303601f19018952813536889003605e190181126153bb575f80fd5b870160606153c98280615316565b8287526153d98388018284615357565b925050506153e986830183615316565b868303888801526153fb838284615357565b92505050604080830135925061541083614bee565b6001600160401b039290921694909101939093529783019790830190600101615396565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561546581614b8c565b6001600160a01b031660608381019190915283013536849003601e1901811261548c575f80fd5b83016020810190356001600160401b038111156154a7575f80fd5b8060051b36038213156154b8575f80fd5b6080808501526154cc60a08501828461537f565b95945050505050565b5f826154ef57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550857615508614cd6565b91905290565b808202811582820484141761114f5761114f61526b565b5f8060408385031215615536575f80fd5b825191506020830151614c4081614a94565b5f815461555481614e6c565b808552602060018381168015615571576001811461558b576155b6565b60ff1985168884015283151560051b8801830195506155b6565b865f52825f205f5b858110156155ae5781548a8201860152908301908401615593565b890184019650505b505050505092915050565b604081525f6152b16040830185615548565b602081525f611a5d6020830184615548565b5f805f606084860312156155f7575f80fd5b83519250602084015161560981614bee565b6040850151909250614ccb81614bee565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126705761267061526b565b5f806040838503121561565a575f80fd5b82516001600160401b0380821115615670575f80fd5b9084019060608287031215615683575f80fd5b61568b614ec0565b82518152602083015161569d81614b8c565b60208201526040830151828111156156b3575f80fd5b6156bf88828601614f60565b6040830152508094505050506020830151614c4081614a94565b5f80604083850312156156ea575f80fd5b825191506020830151614c4081614bee565b8082018082111561114f5761114f61526b565b5f808335601e19843603018112615724575f80fd5b8301803591506001600160401b0382111561573d575f80fd5b6020019150368190038213156138da575f80fd5b5f8235603e19833603018112615089575f80fd5b5f60408236031215615775575f80fd5b61577d614ee8565b61578683614aa1565b81526020808401356001600160401b03808211156157a2575f80fd5b9085019036601f8301126157b4575f80fd5b8135818111156157c6576157c6614eac565b8060051b91506157d7848301614f0a565b81815291830184019184810190368411156157f0575f80fd5b938501935b8385101561581a578435925061580a83614b8c565b82825293850193908501906157f5565b94860194909452509295945050505050565b5f6020828403121561583c575f80fd5b611a5d82614c64565b5f60208284031215615855575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f61526b565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158d35784516001600160a01b031682529383019360019290920191908301906158aa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615904610100840182614d20565b90506040840151601f19808584030160608601526159228383614d20565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159528383615878565b925060a08601519150808584030160c0860152506159708282615878565b91505060c084015161598d60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159a6575f80fd5b8251915060208301516001600160401b038111156159c2575f80fd5b6159ce85828601614f60565b9150509250929050565b608081525f6159ea6080830187614d20565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152e1576152e161526b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220fefa8a178e8407d7ad158aabc54689418e8ddd5f996bf78177d3f37d09d805b164736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go index 97a4df433..dcd990e46 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -92,7 +92,7 @@ type ValidatorRegistrationInput struct { // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"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\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a2646970667358221220b37f5ae3966980f3bc7b9998c1945c46a812cf2d7258d40d5532ec3d29892e6a64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a26469706673582212200791f69edd437d04d0e564251d830362412ff8a5d0aa30e4b69042271c35f22c64736f6c63430008190033", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go b/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go index a9a1ef28a..2fc70bcaf 100644 --- a/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go +++ b/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go @@ -29,9 +29,41 @@ var ( _ = abi.ConvertType ) +// ConversionData is an auto generated low-level Go binding around an user-defined struct. +type ConversionData struct { + SubnetID [32]byte + ValidatorManagerBlockchainID [32]byte + ValidatorManagerAddress common.Address + InitialValidators []InitialValidator +} + +// InitialValidator is an auto generated low-level Go binding around an user-defined struct. +type InitialValidator struct { + NodeID []byte + BlsPublicKey []byte + Weight uint64 +} + +// PChainOwner is an auto generated low-level Go binding around an user-defined struct. +type PChainOwner struct { + Threshold uint32 + Addresses []common.Address +} + +// ValidatorMessagesValidationPeriod is an auto generated low-level Go binding around an user-defined struct. +type ValidatorMessagesValidationPeriod struct { + SubnetID [32]byte + NodeID []byte + BlsPublicKey []byte + RegistrationExpiry uint64 + RemainingBalanceOwner PChainOwner + DisableOwner PChainOwner + Weight uint64 +} + // IPoSValidatorManagerMetaData contains all meta data concerning the IPoSValidatorManager contract. var IPoSValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // IPoSValidatorManagerABI is the input ABI used to generate the binding from. @@ -453,48 +485,6 @@ func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitializeEn return _IPoSValidatorManager.Contract.InitializeEndValidation0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. -// -// Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ResendEndValidatorMessage(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "resendEndValidatorMessage", validationID) -} - -// ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. -// -// Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) ResendEndValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ResendEndValidatorMessage(&_IPoSValidatorManager.TransactOpts, validationID) -} - -// ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. -// -// Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ResendEndValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ResendEndValidatorMessage(&_IPoSValidatorManager.TransactOpts, validationID) -} - -// ResendRegisterValidatorMessage is a paid mutator transaction binding the contract method 0xbee0a03f. -// -// Solidity: function resendRegisterValidatorMessage(bytes32 validationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ResendRegisterValidatorMessage(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "resendRegisterValidatorMessage", validationID) -} - -// ResendRegisterValidatorMessage is a paid mutator transaction binding the contract method 0xbee0a03f. -// -// Solidity: function resendRegisterValidatorMessage(bytes32 validationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) ResendRegisterValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ResendRegisterValidatorMessage(&_IPoSValidatorManager.TransactOpts, validationID) -} - -// ResendRegisterValidatorMessage is a paid mutator transaction binding the contract method 0xbee0a03f. -// -// Solidity: function resendRegisterValidatorMessage(bytes32 validationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ResendRegisterValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ResendRegisterValidatorMessage(&_IPoSValidatorManager.TransactOpts, validationID) -} - // ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. // // Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() @@ -1309,3 +1299,522 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseUptimeUpdated(lo event.Raw = log return event, nil } + +// ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. +var ValidatorMessagesMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122035799fac4e11be2fcb3cdba37f7a8a37c8c59a5adeda1ec64b9806d0974aec9564736f6c63430008190033", +} + +// ValidatorMessagesABI is the input ABI used to generate the binding from. +// Deprecated: Use ValidatorMessagesMetaData.ABI instead. +var ValidatorMessagesABI = ValidatorMessagesMetaData.ABI + +// ValidatorMessagesBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ValidatorMessagesMetaData.Bin instead. +var ValidatorMessagesBin = ValidatorMessagesMetaData.Bin + +// DeployValidatorMessages deploys a new Ethereum contract, binding an instance of ValidatorMessages to it. +func DeployValidatorMessages(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ValidatorMessages, error) { + parsed, err := ValidatorMessagesMetaData.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(ValidatorMessagesBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ValidatorMessages{ValidatorMessagesCaller: ValidatorMessagesCaller{contract: contract}, ValidatorMessagesTransactor: ValidatorMessagesTransactor{contract: contract}, ValidatorMessagesFilterer: ValidatorMessagesFilterer{contract: contract}}, nil +} + +// ValidatorMessages is an auto generated Go binding around an Ethereum contract. +type ValidatorMessages struct { + ValidatorMessagesCaller // Read-only binding to the contract + ValidatorMessagesTransactor // Write-only binding to the contract + ValidatorMessagesFilterer // Log filterer for contract events +} + +// ValidatorMessagesCaller is an auto generated read-only Go binding around an Ethereum contract. +type ValidatorMessagesCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ValidatorMessagesTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ValidatorMessagesTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ValidatorMessagesFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ValidatorMessagesFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ValidatorMessagesSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ValidatorMessagesSession struct { + Contract *ValidatorMessages // 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 +} + +// ValidatorMessagesCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ValidatorMessagesCallerSession struct { + Contract *ValidatorMessagesCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ValidatorMessagesTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ValidatorMessagesTransactorSession struct { + Contract *ValidatorMessagesTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ValidatorMessagesRaw is an auto generated low-level Go binding around an Ethereum contract. +type ValidatorMessagesRaw struct { + Contract *ValidatorMessages // Generic contract binding to access the raw methods on +} + +// ValidatorMessagesCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ValidatorMessagesCallerRaw struct { + Contract *ValidatorMessagesCaller // Generic read-only contract binding to access the raw methods on +} + +// ValidatorMessagesTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ValidatorMessagesTransactorRaw struct { + Contract *ValidatorMessagesTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewValidatorMessages creates a new instance of ValidatorMessages, bound to a specific deployed contract. +func NewValidatorMessages(address common.Address, backend bind.ContractBackend) (*ValidatorMessages, error) { + contract, err := bindValidatorMessages(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ValidatorMessages{ValidatorMessagesCaller: ValidatorMessagesCaller{contract: contract}, ValidatorMessagesTransactor: ValidatorMessagesTransactor{contract: contract}, ValidatorMessagesFilterer: ValidatorMessagesFilterer{contract: contract}}, nil +} + +// NewValidatorMessagesCaller creates a new read-only instance of ValidatorMessages, bound to a specific deployed contract. +func NewValidatorMessagesCaller(address common.Address, caller bind.ContractCaller) (*ValidatorMessagesCaller, error) { + contract, err := bindValidatorMessages(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ValidatorMessagesCaller{contract: contract}, nil +} + +// NewValidatorMessagesTransactor creates a new write-only instance of ValidatorMessages, bound to a specific deployed contract. +func NewValidatorMessagesTransactor(address common.Address, transactor bind.ContractTransactor) (*ValidatorMessagesTransactor, error) { + contract, err := bindValidatorMessages(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ValidatorMessagesTransactor{contract: contract}, nil +} + +// NewValidatorMessagesFilterer creates a new log filterer instance of ValidatorMessages, bound to a specific deployed contract. +func NewValidatorMessagesFilterer(address common.Address, filterer bind.ContractFilterer) (*ValidatorMessagesFilterer, error) { + contract, err := bindValidatorMessages(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ValidatorMessagesFilterer{contract: contract}, nil +} + +// bindValidatorMessages binds a generic wrapper to an already deployed contract. +func bindValidatorMessages(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ValidatorMessagesMetaData.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 (_ValidatorMessages *ValidatorMessagesRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ValidatorMessages.Contract.ValidatorMessagesCaller.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 (_ValidatorMessages *ValidatorMessagesRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ValidatorMessages.Contract.ValidatorMessagesTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ValidatorMessages *ValidatorMessagesRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ValidatorMessages.Contract.ValidatorMessagesTransactor.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 (_ValidatorMessages *ValidatorMessagesCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ValidatorMessages.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 (_ValidatorMessages *ValidatorMessagesTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ValidatorMessages.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ValidatorMessages *ValidatorMessagesTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ValidatorMessages.Contract.contract.Transact(opts, method, params...) +} + +// PackConversionData is a free data retrieval call binding the contract method 0x51f48008. +// +// Solidity: function packConversionData((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCaller) PackConversionData(opts *bind.CallOpts, conversionData ConversionData) ([]byte, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "packConversionData", conversionData) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// PackConversionData is a free data retrieval call binding the contract method 0x51f48008. +// +// Solidity: function packConversionData((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesSession) PackConversionData(conversionData ConversionData) ([]byte, error) { + return _ValidatorMessages.Contract.PackConversionData(&_ValidatorMessages.CallOpts, conversionData) +} + +// PackConversionData is a free data retrieval call binding the contract method 0x51f48008. +// +// Solidity: function packConversionData((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCallerSession) PackConversionData(conversionData ConversionData) ([]byte, error) { + return _ValidatorMessages.Contract.PackConversionData(&_ValidatorMessages.CallOpts, conversionData) +} + +// PackL1ValidatorRegistrationMessage is a free data retrieval call binding the contract method 0xa699c135. +// +// Solidity: function packL1ValidatorRegistrationMessage(bytes32 validationID, bool valid) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCaller) PackL1ValidatorRegistrationMessage(opts *bind.CallOpts, validationID [32]byte, valid bool) ([]byte, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "packL1ValidatorRegistrationMessage", validationID, valid) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// PackL1ValidatorRegistrationMessage is a free data retrieval call binding the contract method 0xa699c135. +// +// Solidity: function packL1ValidatorRegistrationMessage(bytes32 validationID, bool valid) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesSession) PackL1ValidatorRegistrationMessage(validationID [32]byte, valid bool) ([]byte, error) { + return _ValidatorMessages.Contract.PackL1ValidatorRegistrationMessage(&_ValidatorMessages.CallOpts, validationID, valid) +} + +// PackL1ValidatorRegistrationMessage is a free data retrieval call binding the contract method 0xa699c135. +// +// Solidity: function packL1ValidatorRegistrationMessage(bytes32 validationID, bool valid) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCallerSession) PackL1ValidatorRegistrationMessage(validationID [32]byte, valid bool) ([]byte, error) { + return _ValidatorMessages.Contract.PackL1ValidatorRegistrationMessage(&_ValidatorMessages.CallOpts, validationID, valid) +} + +// PackL1ValidatorWeightMessage is a free data retrieval call binding the contract method 0x854a893f. +// +// Solidity: function packL1ValidatorWeightMessage(bytes32 validationID, uint64 nonce, uint64 weight) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCaller) PackL1ValidatorWeightMessage(opts *bind.CallOpts, validationID [32]byte, nonce uint64, weight uint64) ([]byte, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "packL1ValidatorWeightMessage", validationID, nonce, weight) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// PackL1ValidatorWeightMessage is a free data retrieval call binding the contract method 0x854a893f. +// +// Solidity: function packL1ValidatorWeightMessage(bytes32 validationID, uint64 nonce, uint64 weight) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesSession) PackL1ValidatorWeightMessage(validationID [32]byte, nonce uint64, weight uint64) ([]byte, error) { + return _ValidatorMessages.Contract.PackL1ValidatorWeightMessage(&_ValidatorMessages.CallOpts, validationID, nonce, weight) +} + +// PackL1ValidatorWeightMessage is a free data retrieval call binding the contract method 0x854a893f. +// +// Solidity: function packL1ValidatorWeightMessage(bytes32 validationID, uint64 nonce, uint64 weight) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCallerSession) PackL1ValidatorWeightMessage(validationID [32]byte, nonce uint64, weight uint64) ([]byte, error) { + return _ValidatorMessages.Contract.PackL1ValidatorWeightMessage(&_ValidatorMessages.CallOpts, validationID, nonce, weight) +} + +// PackRegisterL1ValidatorMessage is a free data retrieval call binding the contract method 0xe0d5478f. +// +// Solidity: function packRegisterL1ValidatorMessage((bytes32,bytes,bytes,uint64,(uint32,address[]),(uint32,address[]),uint64) validationPeriod) pure returns(bytes32, bytes) +func (_ValidatorMessages *ValidatorMessagesCaller) PackRegisterL1ValidatorMessage(opts *bind.CallOpts, validationPeriod ValidatorMessagesValidationPeriod) ([32]byte, []byte, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "packRegisterL1ValidatorMessage", validationPeriod) + + if err != nil { + return *new([32]byte), *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out1 := *abi.ConvertType(out[1], new([]byte)).(*[]byte) + + return out0, out1, err + +} + +// PackRegisterL1ValidatorMessage is a free data retrieval call binding the contract method 0xe0d5478f. +// +// Solidity: function packRegisterL1ValidatorMessage((bytes32,bytes,bytes,uint64,(uint32,address[]),(uint32,address[]),uint64) validationPeriod) pure returns(bytes32, bytes) +func (_ValidatorMessages *ValidatorMessagesSession) PackRegisterL1ValidatorMessage(validationPeriod ValidatorMessagesValidationPeriod) ([32]byte, []byte, error) { + return _ValidatorMessages.Contract.PackRegisterL1ValidatorMessage(&_ValidatorMessages.CallOpts, validationPeriod) +} + +// PackRegisterL1ValidatorMessage is a free data retrieval call binding the contract method 0xe0d5478f. +// +// Solidity: function packRegisterL1ValidatorMessage((bytes32,bytes,bytes,uint64,(uint32,address[]),(uint32,address[]),uint64) validationPeriod) pure returns(bytes32, bytes) +func (_ValidatorMessages *ValidatorMessagesCallerSession) PackRegisterL1ValidatorMessage(validationPeriod ValidatorMessagesValidationPeriod) ([32]byte, []byte, error) { + return _ValidatorMessages.Contract.PackRegisterL1ValidatorMessage(&_ValidatorMessages.CallOpts, validationPeriod) +} + +// PackSubnetToL1ConversionMessage is a free data retrieval call binding the contract method 0x7f7c427a. +// +// Solidity: function packSubnetToL1ConversionMessage(bytes32 conversionID) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCaller) PackSubnetToL1ConversionMessage(opts *bind.CallOpts, conversionID [32]byte) ([]byte, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "packSubnetToL1ConversionMessage", conversionID) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// PackSubnetToL1ConversionMessage is a free data retrieval call binding the contract method 0x7f7c427a. +// +// Solidity: function packSubnetToL1ConversionMessage(bytes32 conversionID) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesSession) PackSubnetToL1ConversionMessage(conversionID [32]byte) ([]byte, error) { + return _ValidatorMessages.Contract.PackSubnetToL1ConversionMessage(&_ValidatorMessages.CallOpts, conversionID) +} + +// PackSubnetToL1ConversionMessage is a free data retrieval call binding the contract method 0x7f7c427a. +// +// Solidity: function packSubnetToL1ConversionMessage(bytes32 conversionID) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCallerSession) PackSubnetToL1ConversionMessage(conversionID [32]byte) ([]byte, error) { + return _ValidatorMessages.Contract.PackSubnetToL1ConversionMessage(&_ValidatorMessages.CallOpts, conversionID) +} + +// PackValidationUptimeMessage is a free data retrieval call binding the contract method 0xe1d68f30. +// +// Solidity: function packValidationUptimeMessage(bytes32 validationID, uint64 uptime) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCaller) PackValidationUptimeMessage(opts *bind.CallOpts, validationID [32]byte, uptime uint64) ([]byte, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "packValidationUptimeMessage", validationID, uptime) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// PackValidationUptimeMessage is a free data retrieval call binding the contract method 0xe1d68f30. +// +// Solidity: function packValidationUptimeMessage(bytes32 validationID, uint64 uptime) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesSession) PackValidationUptimeMessage(validationID [32]byte, uptime uint64) ([]byte, error) { + return _ValidatorMessages.Contract.PackValidationUptimeMessage(&_ValidatorMessages.CallOpts, validationID, uptime) +} + +// PackValidationUptimeMessage is a free data retrieval call binding the contract method 0xe1d68f30. +// +// Solidity: function packValidationUptimeMessage(bytes32 validationID, uint64 uptime) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCallerSession) PackValidationUptimeMessage(validationID [32]byte, uptime uint64) ([]byte, error) { + return _ValidatorMessages.Contract.PackValidationUptimeMessage(&_ValidatorMessages.CallOpts, validationID, uptime) +} + +// UnpackL1ValidatorRegistrationMessage is a free data retrieval call binding the contract method 0x021de88f. +// +// Solidity: function unpackL1ValidatorRegistrationMessage(bytes input) pure returns(bytes32, bool) +func (_ValidatorMessages *ValidatorMessagesCaller) UnpackL1ValidatorRegistrationMessage(opts *bind.CallOpts, input []byte) ([32]byte, bool, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "unpackL1ValidatorRegistrationMessage", input) + + if err != nil { + return *new([32]byte), *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out1 := *abi.ConvertType(out[1], new(bool)).(*bool) + + return out0, out1, err + +} + +// UnpackL1ValidatorRegistrationMessage is a free data retrieval call binding the contract method 0x021de88f. +// +// Solidity: function unpackL1ValidatorRegistrationMessage(bytes input) pure returns(bytes32, bool) +func (_ValidatorMessages *ValidatorMessagesSession) UnpackL1ValidatorRegistrationMessage(input []byte) ([32]byte, bool, error) { + return _ValidatorMessages.Contract.UnpackL1ValidatorRegistrationMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackL1ValidatorRegistrationMessage is a free data retrieval call binding the contract method 0x021de88f. +// +// Solidity: function unpackL1ValidatorRegistrationMessage(bytes input) pure returns(bytes32, bool) +func (_ValidatorMessages *ValidatorMessagesCallerSession) UnpackL1ValidatorRegistrationMessage(input []byte) ([32]byte, bool, error) { + return _ValidatorMessages.Contract.UnpackL1ValidatorRegistrationMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackL1ValidatorWeightMessage is a free data retrieval call binding the contract method 0x50782b0f. +// +// Solidity: function unpackL1ValidatorWeightMessage(bytes input) pure returns(bytes32, uint64, uint64) +func (_ValidatorMessages *ValidatorMessagesCaller) UnpackL1ValidatorWeightMessage(opts *bind.CallOpts, input []byte) ([32]byte, uint64, uint64, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "unpackL1ValidatorWeightMessage", input) + + if err != nil { + return *new([32]byte), *new(uint64), *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out1 := *abi.ConvertType(out[1], new(uint64)).(*uint64) + out2 := *abi.ConvertType(out[2], new(uint64)).(*uint64) + + return out0, out1, out2, err + +} + +// UnpackL1ValidatorWeightMessage is a free data retrieval call binding the contract method 0x50782b0f. +// +// Solidity: function unpackL1ValidatorWeightMessage(bytes input) pure returns(bytes32, uint64, uint64) +func (_ValidatorMessages *ValidatorMessagesSession) UnpackL1ValidatorWeightMessage(input []byte) ([32]byte, uint64, uint64, error) { + return _ValidatorMessages.Contract.UnpackL1ValidatorWeightMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackL1ValidatorWeightMessage is a free data retrieval call binding the contract method 0x50782b0f. +// +// Solidity: function unpackL1ValidatorWeightMessage(bytes input) pure returns(bytes32, uint64, uint64) +func (_ValidatorMessages *ValidatorMessagesCallerSession) UnpackL1ValidatorWeightMessage(input []byte) ([32]byte, uint64, uint64, error) { + return _ValidatorMessages.Contract.UnpackL1ValidatorWeightMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackRegisterL1ValidatorMessage is a free data retrieval call binding the contract method 0x9b835465. +// +// Solidity: function unpackRegisterL1ValidatorMessage(bytes input) pure returns((bytes32,bytes,bytes,uint64,(uint32,address[]),(uint32,address[]),uint64)) +func (_ValidatorMessages *ValidatorMessagesCaller) UnpackRegisterL1ValidatorMessage(opts *bind.CallOpts, input []byte) (ValidatorMessagesValidationPeriod, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "unpackRegisterL1ValidatorMessage", input) + + if err != nil { + return *new(ValidatorMessagesValidationPeriod), err + } + + out0 := *abi.ConvertType(out[0], new(ValidatorMessagesValidationPeriod)).(*ValidatorMessagesValidationPeriod) + + return out0, err + +} + +// UnpackRegisterL1ValidatorMessage is a free data retrieval call binding the contract method 0x9b835465. +// +// Solidity: function unpackRegisterL1ValidatorMessage(bytes input) pure returns((bytes32,bytes,bytes,uint64,(uint32,address[]),(uint32,address[]),uint64)) +func (_ValidatorMessages *ValidatorMessagesSession) UnpackRegisterL1ValidatorMessage(input []byte) (ValidatorMessagesValidationPeriod, error) { + return _ValidatorMessages.Contract.UnpackRegisterL1ValidatorMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackRegisterL1ValidatorMessage is a free data retrieval call binding the contract method 0x9b835465. +// +// Solidity: function unpackRegisterL1ValidatorMessage(bytes input) pure returns((bytes32,bytes,bytes,uint64,(uint32,address[]),(uint32,address[]),uint64)) +func (_ValidatorMessages *ValidatorMessagesCallerSession) UnpackRegisterL1ValidatorMessage(input []byte) (ValidatorMessagesValidationPeriod, error) { + return _ValidatorMessages.Contract.UnpackRegisterL1ValidatorMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackSubnetToL1ConversionMessage is a free data retrieval call binding the contract method 0x4d847884. +// +// Solidity: function unpackSubnetToL1ConversionMessage(bytes input) pure returns(bytes32) +func (_ValidatorMessages *ValidatorMessagesCaller) UnpackSubnetToL1ConversionMessage(opts *bind.CallOpts, input []byte) ([32]byte, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "unpackSubnetToL1ConversionMessage", input) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// UnpackSubnetToL1ConversionMessage is a free data retrieval call binding the contract method 0x4d847884. +// +// Solidity: function unpackSubnetToL1ConversionMessage(bytes input) pure returns(bytes32) +func (_ValidatorMessages *ValidatorMessagesSession) UnpackSubnetToL1ConversionMessage(input []byte) ([32]byte, error) { + return _ValidatorMessages.Contract.UnpackSubnetToL1ConversionMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackSubnetToL1ConversionMessage is a free data retrieval call binding the contract method 0x4d847884. +// +// Solidity: function unpackSubnetToL1ConversionMessage(bytes input) pure returns(bytes32) +func (_ValidatorMessages *ValidatorMessagesCallerSession) UnpackSubnetToL1ConversionMessage(input []byte) ([32]byte, error) { + return _ValidatorMessages.Contract.UnpackSubnetToL1ConversionMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackValidationUptimeMessage is a free data retrieval call binding the contract method 0x088c2463. +// +// Solidity: function unpackValidationUptimeMessage(bytes input) pure returns(bytes32, uint64) +func (_ValidatorMessages *ValidatorMessagesCaller) UnpackValidationUptimeMessage(opts *bind.CallOpts, input []byte) ([32]byte, uint64, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "unpackValidationUptimeMessage", input) + + if err != nil { + return *new([32]byte), *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out1 := *abi.ConvertType(out[1], new(uint64)).(*uint64) + + return out0, out1, err + +} + +// UnpackValidationUptimeMessage is a free data retrieval call binding the contract method 0x088c2463. +// +// Solidity: function unpackValidationUptimeMessage(bytes input) pure returns(bytes32, uint64) +func (_ValidatorMessages *ValidatorMessagesSession) UnpackValidationUptimeMessage(input []byte) ([32]byte, uint64, error) { + return _ValidatorMessages.Contract.UnpackValidationUptimeMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackValidationUptimeMessage is a free data retrieval call binding the contract method 0x088c2463. +// +// Solidity: function unpackValidationUptimeMessage(bytes input) pure returns(bytes32, uint64) +func (_ValidatorMessages *ValidatorMessagesCallerSession) UnpackValidationUptimeMessage(input []byte) ([32]byte, uint64, error) { + return _ValidatorMessages.Contract.UnpackValidationUptimeMessage(&_ValidatorMessages.CallOpts, input) +} diff --git a/abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go b/abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go deleted file mode 100644 index b09593664..000000000 --- a/abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go +++ /dev/null @@ -1,223 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package ivalidatormanager - -import ( - "errors" - "math/big" - "strings" - - "github.com/ava-labs/subnet-evm/accounts/abi" - "github.com/ava-labs/subnet-evm/accounts/abi/bind" - "github.com/ava-labs/subnet-evm/core/types" - "github.com/ava-labs/subnet-evm/interfaces" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = interfaces.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription - _ = abi.ConvertType -) - -// IValidatorManagerMetaData contains all meta data concerning the IValidatorManager contract. -var IValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", -} - -// IValidatorManagerABI is the input ABI used to generate the binding from. -// Deprecated: Use IValidatorManagerMetaData.ABI instead. -var IValidatorManagerABI = IValidatorManagerMetaData.ABI - -// IValidatorManager is an auto generated Go binding around an Ethereum contract. -type IValidatorManager struct { - IValidatorManagerCaller // Read-only binding to the contract - IValidatorManagerTransactor // Write-only binding to the contract - IValidatorManagerFilterer // Log filterer for contract events -} - -// IValidatorManagerCaller is an auto generated read-only Go binding around an Ethereum contract. -type IValidatorManagerCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// IValidatorManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. -type IValidatorManagerTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// IValidatorManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type IValidatorManagerFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// IValidatorManagerSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type IValidatorManagerSession struct { - Contract *IValidatorManager // 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 -} - -// IValidatorManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type IValidatorManagerCallerSession struct { - Contract *IValidatorManagerCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// IValidatorManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type IValidatorManagerTransactorSession struct { - Contract *IValidatorManagerTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// IValidatorManagerRaw is an auto generated low-level Go binding around an Ethereum contract. -type IValidatorManagerRaw struct { - Contract *IValidatorManager // Generic contract binding to access the raw methods on -} - -// IValidatorManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type IValidatorManagerCallerRaw struct { - Contract *IValidatorManagerCaller // Generic read-only contract binding to access the raw methods on -} - -// IValidatorManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type IValidatorManagerTransactorRaw struct { - Contract *IValidatorManagerTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewIValidatorManager creates a new instance of IValidatorManager, bound to a specific deployed contract. -func NewIValidatorManager(address common.Address, backend bind.ContractBackend) (*IValidatorManager, error) { - contract, err := bindIValidatorManager(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &IValidatorManager{IValidatorManagerCaller: IValidatorManagerCaller{contract: contract}, IValidatorManagerTransactor: IValidatorManagerTransactor{contract: contract}, IValidatorManagerFilterer: IValidatorManagerFilterer{contract: contract}}, nil -} - -// NewIValidatorManagerCaller creates a new read-only instance of IValidatorManager, bound to a specific deployed contract. -func NewIValidatorManagerCaller(address common.Address, caller bind.ContractCaller) (*IValidatorManagerCaller, error) { - contract, err := bindIValidatorManager(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &IValidatorManagerCaller{contract: contract}, nil -} - -// NewIValidatorManagerTransactor creates a new write-only instance of IValidatorManager, bound to a specific deployed contract. -func NewIValidatorManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*IValidatorManagerTransactor, error) { - contract, err := bindIValidatorManager(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &IValidatorManagerTransactor{contract: contract}, nil -} - -// NewIValidatorManagerFilterer creates a new log filterer instance of IValidatorManager, bound to a specific deployed contract. -func NewIValidatorManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*IValidatorManagerFilterer, error) { - contract, err := bindIValidatorManager(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &IValidatorManagerFilterer{contract: contract}, nil -} - -// bindIValidatorManager binds a generic wrapper to an already deployed contract. -func bindIValidatorManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := IValidatorManagerMetaData.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 (_IValidatorManager *IValidatorManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _IValidatorManager.Contract.IValidatorManagerCaller.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 (_IValidatorManager *IValidatorManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IValidatorManager.Contract.IValidatorManagerTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_IValidatorManager *IValidatorManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _IValidatorManager.Contract.IValidatorManagerTransactor.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 (_IValidatorManager *IValidatorManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _IValidatorManager.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 (_IValidatorManager *IValidatorManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IValidatorManager.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_IValidatorManager *IValidatorManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _IValidatorManager.Contract.contract.Transact(opts, method, params...) -} - -// ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. -// -// Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() -func (_IValidatorManager *IValidatorManagerTransactor) ResendEndValidatorMessage(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { - return _IValidatorManager.contract.Transact(opts, "resendEndValidatorMessage", validationID) -} - -// ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. -// -// Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() -func (_IValidatorManager *IValidatorManagerSession) ResendEndValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IValidatorManager.Contract.ResendEndValidatorMessage(&_IValidatorManager.TransactOpts, validationID) -} - -// ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. -// -// Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() -func (_IValidatorManager *IValidatorManagerTransactorSession) ResendEndValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IValidatorManager.Contract.ResendEndValidatorMessage(&_IValidatorManager.TransactOpts, validationID) -} - -// ResendRegisterValidatorMessage is a paid mutator transaction binding the contract method 0xbee0a03f. -// -// Solidity: function resendRegisterValidatorMessage(bytes32 validationID) returns() -func (_IValidatorManager *IValidatorManagerTransactor) ResendRegisterValidatorMessage(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { - return _IValidatorManager.contract.Transact(opts, "resendRegisterValidatorMessage", validationID) -} - -// ResendRegisterValidatorMessage is a paid mutator transaction binding the contract method 0xbee0a03f. -// -// Solidity: function resendRegisterValidatorMessage(bytes32 validationID) returns() -func (_IValidatorManager *IValidatorManagerSession) ResendRegisterValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IValidatorManager.Contract.ResendRegisterValidatorMessage(&_IValidatorManager.TransactOpts, validationID) -} - -// ResendRegisterValidatorMessage is a paid mutator transaction binding the contract method 0xbee0a03f. -// -// Solidity: function resendRegisterValidatorMessage(bytes32 validationID) returns() -func (_IValidatorManager *IValidatorManagerTransactorSession) ResendRegisterValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IValidatorManager.Contract.ResendRegisterValidatorMessage(&_IValidatorManager.TransactOpts, validationID) -} diff --git a/contracts/validator-manager/ERC20TokenStakingManager.sol b/contracts/validator-manager/ERC20TokenStakingManager.sol index e0cea5923..3afcde9fa 100644 --- a/contracts/validator-manager/ERC20TokenStakingManager.sol +++ b/contracts/validator-manager/ERC20TokenStakingManager.sol @@ -7,7 +7,7 @@ pragma solidity 0.8.25; import {PoSValidatorManager} from "./PoSValidatorManager.sol"; import {PoSValidatorManagerSettings} from "./interfaces/IPoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "./interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "./ValidatorManager.sol"; import {IERC20TokenStakingManager} from "./interfaces/IERC20TokenStakingManager.sol"; import {IERC20Mintable} from "./interfaces/IERC20Mintable.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; diff --git a/contracts/validator-manager/NativeTokenStakingManager.sol b/contracts/validator-manager/NativeTokenStakingManager.sol index facf37a56..55319f185 100644 --- a/contracts/validator-manager/NativeTokenStakingManager.sol +++ b/contracts/validator-manager/NativeTokenStakingManager.sol @@ -7,7 +7,7 @@ pragma solidity 0.8.25; import {PoSValidatorManager} from "./PoSValidatorManager.sol"; import {PoSValidatorManagerSettings} from "./interfaces/IPoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "./interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "./ValidatorManager.sol"; import {INativeTokenStakingManager} from "./interfaces/INativeTokenStakingManager.sol"; import {INativeMinter} from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/INativeMinter.sol"; diff --git a/contracts/validator-manager/PoAValidatorManager.sol b/contracts/validator-manager/PoAValidatorManager.sol index 2f6ffa823..369291615 100644 --- a/contracts/validator-manager/PoAValidatorManager.sol +++ b/contracts/validator-manager/PoAValidatorManager.sol @@ -6,10 +6,7 @@ pragma solidity 0.8.25; import {ValidatorManager} from "./ValidatorManager.sol"; -import { - ValidatorManagerSettings, - ValidatorRegistrationInput -} from "./interfaces/IValidatorManager.sol"; +import {ValidatorManagerSettings, ValidatorRegistrationInput} from "./ValidatorManager.sol"; import {IPoAValidatorManager} from "./interfaces/IPoAValidatorManager.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; import {OwnableUpgradeable} from diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index fe32865ab..069ca3886 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -14,7 +14,7 @@ import { PoSValidatorInfo, PoSValidatorManagerSettings } from "./interfaces/IPoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "./interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "./ValidatorManager.sol"; import {Validator, ValidatorStatus} from "./ACP99Manager.sol"; import {IRewardCalculator} from "./interfaces/IRewardCalculator.sol"; import {WarpMessage} from diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 40fbe58d2..3d5a51812 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -6,11 +6,7 @@ pragma solidity 0.8.25; import {ValidatorMessages} from "./ValidatorMessages.sol"; -import { - IValidatorManager, - ValidatorChurnPeriod, - ValidatorManagerSettings -} from "./interfaces/IValidatorManager.sol"; +import {ValidatorChurnPeriod, ValidatorManagerSettings} from "./ValidatorManager.sol"; import { ACP99Manager, InitialValidator, @@ -28,17 +24,45 @@ import {ContextUpgradeable} from import {Initializable} from "@openzeppelin/contracts-upgradeable@5.0.2/proxy/utils/Initializable.sol"; +/** + * @dev Describes the current churn period + */ +struct ValidatorChurnPeriod { + uint256 startTime; + uint64 initialWeight; + uint64 totalWeight; + uint64 churnAmount; +} + +/** + * @notice Validator Manager settings, used to initialize the Validator Manager + * @notice The subnetID is the ID of the L1 that the Validator Manager is managing + * @notice The churnPeriodSeconds is the duration of the churn period in seconds + * @notice The maximumChurnPercentage is the maximum percentage of the total weight that can be added or removed in a single churn period + */ +struct ValidatorManagerSettings { + bytes32 subnetID; + uint64 churnPeriodSeconds; + uint8 maximumChurnPercentage; +} + +/** + * @dev Specifies a validator to register. + */ +struct ValidatorRegistrationInput { + bytes nodeID; + bytes blsPublicKey; + uint64 registrationExpiry; + PChainOwner remainingBalanceOwner; + PChainOwner disableOwner; +} + /** * @dev Implementation of the {ACP99Manager} abstract contract. * * @custom:security-contact https://github.com/ava-labs/icm-contracts/blob/main/SECURITY.md */ -abstract contract ValidatorManager is - Initializable, - ContextUpgradeable, - IValidatorManager, - ACP99Manager -{ +abstract contract ValidatorManager is Initializable, ContextUpgradeable, ACP99Manager { // solhint-disable private-vars-leading-underscore /// @custom:storage-location erc7201:avalanche-icm.storage.ValidatorManager @@ -316,7 +340,9 @@ abstract contract ValidatorManager is } /** - * @notice See {IValidatorManager-resendRegisterValidatorMessage}. + * @notice Resubmits a validator registration message to be sent to the P-Chain. + * Only necessary if the original message can't be delivered due to validator churn. + * @param validationID The ID of the validation period being registered. */ function resendRegisterValidatorMessage(bytes32 validationID) external { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); @@ -467,7 +493,9 @@ abstract contract ValidatorManager is } /** - * @notice See {IValidatorManager-resendEndValidatorMessage}. + * @notice Resubmits a validator end message to be sent to the P-Chain. + * Only necessary if the original message can't be delivered due to validator churn. + * @param validationID The ID of the validation period being ended. */ function resendEndValidatorMessage(bytes32 validationID) external { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); diff --git a/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol b/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol index eb1b56a32..cf6d7bb95 100644 --- a/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol +++ b/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.25; -import {ValidatorRegistrationInput} from "./IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {IPoSValidatorManager} from "./IPoSValidatorManager.sol"; /** diff --git a/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol b/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol index c1cc4a2c9..205ff85ec 100644 --- a/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol +++ b/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.25; -import {ValidatorRegistrationInput} from "./IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {IPoSValidatorManager} from "./IPoSValidatorManager.sol"; /** diff --git a/contracts/validator-manager/interfaces/IPoAValidatorManager.sol b/contracts/validator-manager/interfaces/IPoAValidatorManager.sol index 94c1663d3..163d77531 100644 --- a/contracts/validator-manager/interfaces/IPoAValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoAValidatorManager.sol @@ -5,12 +5,12 @@ pragma solidity 0.8.25; -import {IValidatorManager, ValidatorRegistrationInput} from "./IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; /** * @notice Interface for Proof of Authority Validator Manager contracts */ -interface IPoAValidatorManager is IValidatorManager { +interface IPoAValidatorManager { /** * @notice Begins the validator registration process, and sets the {weight} of the validator. * @param registrationInput The inputs for a validator registration. diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index 59cd0b311..beaea61f0 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.25; -import {IValidatorManager, ValidatorManagerSettings} from "./IValidatorManager.sol"; +import {ValidatorManagerSettings} from "../ValidatorManager.sol"; import {IRewardCalculator} from "./IRewardCalculator.sol"; /** @@ -20,7 +20,7 @@ enum DelegatorStatus { /** * @notice PoS Validator Manager settings, used to initialize the PoS Validator Manager - * @notice baseSettings specified the base settings for the Validator Manager. See {IValidatorManager-ValidatorManagerSettings} + * @notice baseSettings specified the base settings for the Validator Manager. See {ValidatorManager-ValidatorManagerSettings} * @notice minimumStakeAmount is the minimum amount of stake required to stake to a validator * @notice maximumStakeAmount is the maximum amount of stake that can be staked to a validator * @notice minimumStakeDuration is the minimum duration that validators must stake for @@ -58,7 +58,7 @@ struct Delegator { } /** - * @dev Describes the active state of a PoS Validator in addition the information in {IValidatorManager-Validator} + * @dev Describes the active state of a PoS Validator in addition the information in {ValidatorManager-Validator} */ struct PoSValidatorInfo { address owner; @@ -70,7 +70,7 @@ struct PoSValidatorInfo { /** * @notice Interface for Proof of Stake Validator Managers */ -interface IPoSValidatorManager is IValidatorManager { +interface IPoSValidatorManager { /** * @notice Event emitted when a delegator registration is initiated * @param delegationID The ID of the delegation diff --git a/contracts/validator-manager/interfaces/IValidatorManager.sol b/contracts/validator-manager/interfaces/IValidatorManager.sol deleted file mode 100644 index b5b023b74..000000000 --- a/contracts/validator-manager/interfaces/IValidatorManager.sol +++ /dev/null @@ -1,60 +0,0 @@ -// (c) 2024, Ava Labs, Inc. All rights reserved. -// See the file LICENSE for licensing terms. - -// SPDX-License-Identifier: Ecosystem - -pragma solidity 0.8.25; - -import {PChainOwner} from "../ACP99Manager.sol"; - -/** - * @dev Describes the current churn period - */ -struct ValidatorChurnPeriod { - uint256 startTime; - uint64 initialWeight; - uint64 totalWeight; - uint64 churnAmount; -} - -/** - * @notice Validator Manager settings, used to initialize the Validator Manager - * @notice The subnetID is the ID of the L1 that the Validator Manager is managing - * @notice The churnPeriodSeconds is the duration of the churn period in seconds - * @notice The maximumChurnPercentage is the maximum percentage of the total weight that can be added or removed in a single churn period - */ -struct ValidatorManagerSettings { - bytes32 subnetID; - uint64 churnPeriodSeconds; - uint8 maximumChurnPercentage; -} - -/** - * @dev Specifies a validator to register. - */ -struct ValidatorRegistrationInput { - bytes nodeID; - bytes blsPublicKey; - uint64 registrationExpiry; - PChainOwner remainingBalanceOwner; - PChainOwner disableOwner; -} - -/** - * @notice Interface for Validator Manager contracts that implement Subnet-only Validator management. - */ -interface IValidatorManager { - /** - * @notice Resubmits a validator registration message to be sent to the P-Chain. - * Only necessary if the original message can't be delivered due to validator churn. - * @param validationID The ID of the validation period being registered. - */ - function resendRegisterValidatorMessage(bytes32 validationID) external; - - /** - * @notice Resubmits a validator end message to be sent to the P-Chain. - * Only necessary if the original message can't be delivered due to validator churn. - * @param validationID The ID of the validation period being ended. - */ - function resendEndValidatorMessage(bytes32 validationID) external; -} diff --git a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol index e75987602..7cdd34912 100644 --- a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol @@ -9,7 +9,7 @@ import {PoSValidatorManagerTest} from "./PoSValidatorManagerTests.t.sol"; import {ERC20TokenStakingManager} from "../ERC20TokenStakingManager.sol"; import {PoSValidatorManager, PoSValidatorManagerSettings} from "../PoSValidatorManager.sol"; import {ExampleRewardCalculator} from "../ExampleRewardCalculator.sol"; -import {ValidatorRegistrationInput} from "../interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {ICMInitializable} from "../../utilities/ICMInitializable.sol"; import {ExampleERC20} from "@mocks/ExampleERC20.sol"; import {IERC20} from "@openzeppelin/contracts@5.0.2/token/ERC20/IERC20.sol"; diff --git a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol index 674a342d8..f3082b232 100644 --- a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol @@ -9,7 +9,7 @@ import {Test} from "@forge-std/Test.sol"; import {PoSValidatorManagerTest} from "./PoSValidatorManagerTests.t.sol"; import {NativeTokenStakingManager} from "../NativeTokenStakingManager.sol"; import {PoSValidatorManager, PoSValidatorManagerSettings} from "../PoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "../interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {ExampleRewardCalculator} from "../ExampleRewardCalculator.sol"; import {ICMInitializable} from "../../utilities/ICMInitializable.sol"; import {INativeMinter} from diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index e6dc77bb7..514dad7f7 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -6,10 +6,7 @@ pragma solidity 0.8.25; import {PoAValidatorManager} from "../PoAValidatorManager.sol"; -import { - ValidatorManagerSettings, - ValidatorRegistrationInput -} from "../interfaces/IValidatorManager.sol"; +import {ValidatorManagerSettings, ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {ValidatorManagerTest} from "./ValidatorManagerTests.t.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; import {ValidatorManager} from "../ValidatorManager.sol"; diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index f8bc4c50d..97dcf0733 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -12,10 +12,7 @@ import { DelegatorStatus, PoSValidatorManagerSettings } from "../interfaces/IPoSValidatorManager.sol"; import {ValidatorManager, ValidatorStatus} from "../ValidatorManager.sol"; -import { - ValidatorManagerSettings, - ValidatorRegistrationInput -} from "../interfaces/IValidatorManager.sol"; +import {ValidatorManagerSettings, ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {ValidatorMessages} from "../ValidatorMessages.sol"; import { WarpMessage, diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 50fa88c30..4f1ac7a2a 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -8,7 +8,7 @@ pragma solidity 0.8.25; import {Test} from "@forge-std/Test.sol"; import {ValidatorManager} from "../ValidatorManager.sol"; import {ValidatorMessages} from "../ValidatorMessages.sol"; -import {ValidatorRegistrationInput} from "../interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import { WarpMessage, IWarpMessenger diff --git a/scripts/abi_bindings.sh b/scripts/abi_bindings.sh index 0f8604905..a5491d18e 100755 --- a/scripts/abi_bindings.sh +++ b/scripts/abi_bindings.sh @@ -18,7 +18,7 @@ echo "ARCH set to $ARCH" DEFAULT_CONTRACT_LIST="TeleporterMessenger TeleporterRegistry ExampleERC20 ExampleRewardCalculator TestMessenger ValidatorSetSig NativeTokenStakingManager ERC20TokenStakingManager PoAValidatorManager TokenHome TokenRemote ERC20TokenHome ERC20TokenHomeUpgradeable ERC20TokenRemote ERC20TokenRemoteUpgradeable NativeTokenHome NativeTokenHomeUpgradeable NativeTokenRemote NativeTokenRemoteUpgradeable -WrappedNativeToken MockERC20SendAndCallReceiver MockNativeSendAndCallReceiver ExampleERC20Decimals IValidatorManager IPoSValidatorManager ACP99Manager" +WrappedNativeToken MockERC20SendAndCallReceiver MockNativeSendAndCallReceiver ExampleERC20Decimals IPoSValidatorManager ACP99Manager" PROXY_LIST="TransparentUpgradeableProxy ProxyAdmin" SUBNET_EVM_LIST="INativeMinter" From eafdd8a5c2fe4f8a1f061963da1309357374d605 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 15:59:54 -0600 Subject: [PATCH 2/6] rename initialize methods to initiate --- .../ERC20TokenStakingManager.sol | 12 +- .../NativeTokenStakingManager.sol | 12 +- .../validator-manager/PoAValidatorManager.sol | 10 +- .../validator-manager/PoSValidatorManager.sol | 84 ++++---- contracts/validator-manager/README.md | 30 +-- .../validator-manager/StateTransition.md | 2 +- .../validator-manager/ValidatorManager.sol | 6 +- .../interfaces/IERC20TokenStakingManager.sol | 4 +- .../interfaces/INativeTokenStakingManager.sol | 4 +- .../interfaces/IPoAValidatorManager.sol | 4 +- .../interfaces/IPoSValidatorManager.sol | 28 +-- .../tests/ERC20TokenStakingManagerTests.t.sol | 14 +- .../NativeTokenStakingManagerTests.t.sol | 12 +- .../tests/PoAValidatorManagerTests.t.sol | 16 +- .../tests/PoSValidatorManagerTests.t.sol | 186 +++++++++--------- .../tests/ValidatorManagerTests.t.sol | 38 ++-- 16 files changed, 230 insertions(+), 232 deletions(-) diff --git a/contracts/validator-manager/ERC20TokenStakingManager.sol b/contracts/validator-manager/ERC20TokenStakingManager.sol index 3afcde9fa..096fc4443 100644 --- a/contracts/validator-manager/ERC20TokenStakingManager.sol +++ b/contracts/validator-manager/ERC20TokenStakingManager.sol @@ -96,27 +96,27 @@ contract ERC20TokenStakingManager is } /** - * @notice See {IERC20TokenStakingManager-initializeValidatorRegistration} + * @notice See {IERC20TokenStakingManager-initiateValidatorRegistration} */ - function initializeValidatorRegistration( + function initiateValidatorRegistration( ValidatorRegistrationInput calldata registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount ) external nonReentrant returns (bytes32 validationID) { - return _initializeValidatorRegistration( + return _initiateValidatorRegistration( registrationInput, delegationFeeBips, minStakeDuration, stakeAmount ); } /** - * @notice See {IERC20TokenStakingManager-initializeDelegatorRegistration} + * @notice See {IERC20TokenStakingManager-initiateDelegatorRegistration} */ - function initializeDelegatorRegistration( + function initiateDelegatorRegistration( bytes32 validationID, uint256 delegationAmount ) external nonReentrant returns (bytes32) { - return _initializeDelegatorRegistration(validationID, _msgSender(), delegationAmount); + return _initiateDelegatorRegistration(validationID, _msgSender(), delegationAmount); } /** diff --git a/contracts/validator-manager/NativeTokenStakingManager.sol b/contracts/validator-manager/NativeTokenStakingManager.sol index 55319f185..fc875cb33 100644 --- a/contracts/validator-manager/NativeTokenStakingManager.sol +++ b/contracts/validator-manager/NativeTokenStakingManager.sol @@ -59,28 +59,28 @@ contract NativeTokenStakingManager is function __NativeTokenStakingManager_init_unchained() internal onlyInitializing {} /** - * @notice See {INativeTokenStakingManager-initializeValidatorRegistration}. + * @notice See {INativeTokenStakingManager-initiateValidatorRegistration}. */ - function initializeValidatorRegistration( + function initiateValidatorRegistration( ValidatorRegistrationInput calldata registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration ) external payable nonReentrant returns (bytes32) { - return _initializeValidatorRegistration( + return _initiateValidatorRegistration( registrationInput, delegationFeeBips, minStakeDuration, msg.value ); } /** - * @notice See {INativeTokenStakingManager-initializeDelegatorRegistration}. + * @notice See {INativeTokenStakingManager-initiateDelegatorRegistration}. */ - function initializeDelegatorRegistration(bytes32 validationID) + function initiateDelegatorRegistration(bytes32 validationID) external payable nonReentrant returns (bytes32) { - return _initializeDelegatorRegistration(validationID, _msgSender(), msg.value); + return _initiateDelegatorRegistration(validationID, _msgSender(), msg.value); } /** diff --git a/contracts/validator-manager/PoAValidatorManager.sol b/contracts/validator-manager/PoAValidatorManager.sol index 369291615..9604bf074 100644 --- a/contracts/validator-manager/PoAValidatorManager.sol +++ b/contracts/validator-manager/PoAValidatorManager.sol @@ -46,9 +46,9 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU // solhint-enable func-name-mixedcase /** - * @notice See {IPoAValidatorManager-initializeValidatorRegistration}. + * @notice See {IPoAValidatorManager-initiateValidatorRegistration}. */ - function initializeValidatorRegistration( + function initiateValidatorRegistration( ValidatorRegistrationInput calldata registrationInput, uint64 weight ) external onlyOwner returns (bytes32 validationID) { @@ -64,9 +64,9 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU // solhint-enable ordering /** - * @notice See {IPoAValidatorManager-initializeEndValidation}. + * @notice See {IPoAValidatorManager-initiateValidatorRemoval}. */ - function initializeEndValidation(bytes32 validationID) external override onlyOwner { + function initiateValidatorRemoval(bytes32 validationID) external override onlyOwner { _initiateValidatorRemoval(validationID); } @@ -79,7 +79,7 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU override returns (bytes32) { - (bytes32 validationID,) = _completeEndValidation(messageIndex); + (bytes32 validationID,) = _completeValidatorRemoval(messageIndex); return validationID; } } diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 069ca3886..31663b0f6 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -210,40 +210,40 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-initializeEndValidation}. + * @notice See {IPoSValidatorManager-initiateValidatorRemoval}. */ - function initializeEndValidation( + function initiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex ) external { - _initializeEndValidationWithCheck( + _initiateValidatorRemovalWithCheck( validationID, includeUptimeProof, messageIndex, address(0) ); } /** - * @notice See {IPoSValidatorManager-initializeEndValidation}. + * @notice See {IPoSValidatorManager-initiateValidatorRemoval}. */ - function initializeEndValidation( + function initiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) external { - _initializeEndValidationWithCheck( + _initiateValidatorRemovalWithCheck( validationID, includeUptimeProof, messageIndex, rewardRecipient ); } - function _initializeEndValidationWithCheck( + function _initiateValidatorRemovalWithCheck( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) internal { if ( - !_initializeEndPoSValidation( + !_initiatePoSValidatorRemoval( validationID, includeUptimeProof, messageIndex, rewardRecipient ) ) { @@ -252,28 +252,30 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-forceInitializeEndValidation}. + * @notice See {IPoSValidatorManager-forceinitiateValidatorRemoval}. */ - function forceInitializeEndValidation( + function forceinitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex ) external { // Ignore the return value here to force end validation, regardless of possible missed rewards - _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex, address(0)); + _initiatePoSValidatorRemoval(validationID, includeUptimeProof, messageIndex, address(0)); } /** - * @notice See {IPoSValidatorManager-forceInitializeEndValidation}. + * @notice See {IPoSValidatorManager-forceinitiateValidatorRemoval}. */ - function forceInitializeEndValidation( + function forceinitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) external { // Ignore the return value here to force end validation, regardless of possible missed rewards - _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex, rewardRecipient); + _initiatePoSValidatorRemoval( + validationID, includeUptimeProof, messageIndex, rewardRecipient + ); } function changeValidatorRewardRecipient( @@ -311,11 +313,11 @@ abstract contract PoSValidatorManager is } /** - * @dev Helper function that initializes the end of a PoS validation period. + * @dev Helper function that initiates the end of a PoS validation period. * Returns false if it is possible for the validator to claim rewards, but it is not eligible. * Returns true otherwise. */ - function _initializeEndPoSValidation( + function _initiatePoSValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, @@ -382,7 +384,7 @@ abstract contract PoSValidatorManager is { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); - (bytes32 validationID, Validator memory validator) = _completeEndValidation(messageIndex); + (bytes32 validationID, Validator memory validator) = _completeValidatorRemoval(messageIndex); // Return now if this was originally a PoA validator that was later migrated to this PoS manager, // or the validator was part of the initial validator set. @@ -452,7 +454,7 @@ abstract contract PoSValidatorManager is return uptime; } - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput calldata registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, @@ -533,7 +535,7 @@ abstract contract PoSValidatorManager is */ function _unlock(address to, uint256 value) internal virtual; - function _initializeDelegatorRegistration( + function _initiateDelegatorRegistration( bytes32 validationID, address delegatorAddress, uint256 delegationAmount @@ -564,7 +566,7 @@ abstract contract PoSValidatorManager is // Store the delegation information. Set the delegator status to pending added, // so that it can be properly started in the complete step, even if the delivered - // nonce is greater than the nonce used to initialize registration. + // nonce is greater than the nonce used to initiate registration. $._delegatorStakes[delegationID].status = DelegatorStatus.PendingAdded; $._delegatorStakes[delegationID].owner = delegatorAddress; $._delegatorStakes[delegationID].validationID = validationID; @@ -596,7 +598,7 @@ abstract contract PoSValidatorManager is Validator memory validator = getValidator(validationID); // Ensure the delegator is pending added. Since anybody can call this function once - // delegator registration has been initialized, we need to make sure that this function is only + // delegator registration has been initiated, we need to make sure that this function is only // callable after that has been done. if (delegator.status != DelegatorStatus.PendingAdded) { revert InvalidDelegatorStatus(delegator.status); @@ -633,78 +635,74 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-initializeEndDelegation}. + * @notice See {IPoSValidatorManager-initiateEndDelegation}. */ - function initializeEndDelegation( + function initiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external { - _initializeEndDelegationWithCheck( - delegationID, includeUptimeProof, messageIndex, address(0) - ); + _initiateEndDelegationWithCheck(delegationID, includeUptimeProof, messageIndex, address(0)); } /** - * @notice See {IPoSValidatorManager-initializeEndDelegation}. + * @notice See {IPoSValidatorManager-initiateEndDelegation}. */ - function initializeEndDelegation( + function initiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) external { - _initializeEndDelegationWithCheck( + _initiateEndDelegationWithCheck( delegationID, includeUptimeProof, messageIndex, rewardRecipient ); } - function _initializeEndDelegationWithCheck( + function _initiateEndDelegationWithCheck( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) internal { if ( - !_initializeEndDelegation( - delegationID, includeUptimeProof, messageIndex, rewardRecipient - ) + !_initiateEndDelegation(delegationID, includeUptimeProof, messageIndex, rewardRecipient) ) { revert DelegatorIneligibleForRewards(delegationID); } } /** - * @notice See {IPoSValidatorManager-forceInitializeEndDelegation}. + * @notice See {IPoSValidatorManager-forceInitiateEndDelegation}. */ - function forceInitializeEndDelegation( + function forceInitiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external { // Ignore the return value here to force end delegation, regardless of possible missed rewards - _initializeEndDelegation(delegationID, includeUptimeProof, messageIndex, address(0)); + _initiateEndDelegation(delegationID, includeUptimeProof, messageIndex, address(0)); } /** - * @notice See {IPoSValidatorManager-forceInitializeEndDelegation}. + * @notice See {IPoSValidatorManager-forceInitiateEndDelegation}. */ - function forceInitializeEndDelegation( + function forceInitiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) external { // Ignore the return value here to force end delegation, regardless of possible missed rewards - _initializeEndDelegation(delegationID, includeUptimeProof, messageIndex, rewardRecipient); + _initiateEndDelegation(delegationID, includeUptimeProof, messageIndex, rewardRecipient); } /** - * @dev Helper function that initializes the end of a PoS delegation period. + * @dev Helper function that initiates the end of a PoS delegation period. * Returns false if it is possible for the delegator to claim rewards, but it is not eligible. * Returns true otherwise. */ - function _initializeEndDelegation( + function _initiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, @@ -749,7 +747,7 @@ abstract contract PoSValidatorManager is // Set the delegator status to pending removed, so that it can be properly removed in // the complete step, even if the delivered nonce is greater than the nonce used to - // initialize the removal. + // initiate the removal. $._delegatorStakes[delegationID].status = DelegatorStatus.PendingRemoved; ($._delegatorStakes[delegationID].endingNonce,) = @@ -861,7 +859,7 @@ abstract contract PoSValidatorManager is Delegator memory delegator = $._delegatorStakes[delegationID]; // Ensure the delegator is pending removed. Since anybody can call this function once - // end delegation has been initialized, we need to make sure that this function is only + // end delegation has been initiated, we need to make sure that this function is only // callable after that has been done. if (delegator.status != DelegatorStatus.PendingRemoved) { revert InvalidDelegatorStatus(delegator.status); diff --git a/contracts/validator-manager/README.md b/contracts/validator-manager/README.md index ebd794a20..68c94a37b 100644 --- a/contracts/validator-manager/README.md +++ b/contracts/validator-manager/README.md @@ -20,23 +20,23 @@ class ValidatorManager note for ValidatorManager "Implements most of ACP99Manager" class PoSValidatorManager { - +initializeEndValidation() + +initiateValidatorRemoval() +completeDelegatorRegistration() - +initializeEndDelegation() + +initiateEndDelegation() +completeEndDelegation() } <> PoSValidatorManager class ERC20TokenStakingManager { - +initializeValidatorRegistration() - +initializeDelegatorRegistration() + +initiateValidatorRegistration() + +initiateDelegatorRegistration() } class NativeTokenStakingManager { - +initializeValidatorRegistration() payable - +initializeDelegatorRegistration() payable + +initiateValidatorRegistration() payable + +initiateDelegatorRegistration() payable } class PoAValidatorManager { - +initializeValidatorRegistration() - +initializeEndValidation() + +initiateValidatorRegistration() + +initiateValidatorRemoval() } ACP99Manager <|-- ValidatorManager @@ -118,7 +118,7 @@ A `PoAValidatorManager` can later be converted to a `PoSValidatorManager` by upg ### Register a Validator -Validator registration is initiated with a call to `initializeValidatorRegistration`. The sender of this transaction is registered as the validator owner. Churn limitations are checked - only a certain (configurable) percentage of the total weight is allowed to be added or removed in a (configurable) period of time. The `ValidatorManager` then constructs a [`RegisterL1ValidatorMessage`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#registerl1validatormessage) Warp message to be sent to the P-Chain. Each validator registration request includes all of the information needed to identify the validator and its stake weight, as well as an `expiry` timestamp before which the `RegisterL1ValidatorMessage` must be delivered to the P-Chain. If the validator is not registered on the P-Chain before the `expiry`, then the validator may be removed from the contract state by calling `completeEndValidation`. +Validator registration is initiated with a call to `initiateValidatorRegistration`. The sender of this transaction is registered as the validator owner. Churn limitations are checked - only a certain (configurable) percentage of the total weight is allowed to be added or removed in a (configurable) period of time. The `ValidatorManager` then constructs a [`RegisterL1ValidatorMessage`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#registerl1validatormessage) Warp message to be sent to the P-Chain. Each validator registration request includes all of the information needed to identify the validator and its stake weight, as well as an `expiry` timestamp before which the `RegisterL1ValidatorMessage` must be delivered to the P-Chain. If the validator is not registered on the P-Chain before the `expiry`, then the validator may be removed from the contract state by calling `completeEndValidation`. The `RegisterL1ValidatorMessage` is delivered to the P-Chain as the Warp message payload of a `RegisterL1ValidatorTx`. Please see the transaction [specification](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#registerl1validatortx) for validity requirements. The P-Chain then signs a [`L1ValidatorRegistrationMessage`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#l1validatorregistrationmessage) Warp message indicating that the specified validator was successfully registered on the P-Chain. @@ -126,7 +126,7 @@ The `L1ValidatorRegistrationMessage` is delivered to the `ValidatorManager` via ### Remove a Validator -Validator exit is initiated with a call to `initializeEndValidation` on the `ValidatorManager`. Only the validator owner may initiate exit. For `PoSValidatorManagers` a [`ValidationUptimeMessage`](./UptimeMessageSpec.md) Warp message may optionally be provided in order to calculate the staking rewards; otherwise the latest received uptime will be used (see [(PoS only) Submit and Uptime Proof](#pos-only-submit-an-uptime-proof)). This proof may be requested directly from the L1 validators, which will provide it in a `ValidationUptimeMessage` Warp message. If the uptime is not sufficient to earn validation rewards, the call to `initializeEndValidation` will fail. `forceInitializeEndValidation` acts the same as `initializeEndValidation`, but bypasses the uptime-based rewards check. Once `initializeEndValidation` or `forceInitializeEndValidation` is called, staking rewards cease accruing for `PoSValidatorManagers`. +Validator exit is initiated with a call to `initiateValidatorRemoval` on the `ValidatorManager`. Only the validator owner may initiate exit. For `PoSValidatorManagers` a [`ValidationUptimeMessage`](./UptimeMessageSpec.md) Warp message may optionally be provided in order to calculate the staking rewards; otherwise the latest received uptime will be used (see [(PoS only) Submit and Uptime Proof](#pos-only-submit-an-uptime-proof)). This proof may be requested directly from the L1 validators, which will provide it in a `ValidationUptimeMessage` Warp message. If the uptime is not sufficient to earn validation rewards, the call to `initiateValidatorRemoval` will fail. `forceInitiateValidatorRemoval` acts the same as `initiateValidatorRemoval`, but bypasses the uptime-based rewards check. Once `initiateValidatorRemoval` or `forceInitiateValidatorRemoval` is called, staking rewards cease accruing for `PoSValidatorManagers`. The `ValidatorManager` contructs an [`L1ValidatorWeightMessage`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#l1validatorweightmessage) Warp message with the weight set to `0`. This is delivered to the P-Chain as the payload of a [`SetL1ValidatorWeightTx`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#setl1validatorweighttx). The P-Chain acknowledges the validator exit by signing an `L1ValidatorRegistrationMessage` with `valid=0`, which is delivered to the `ValidatorManager` by calling `completeEndValidation`. The validation is removed from the contract's state, and for `PoSValidatorManagers`, staking rewards are disbursed and stake is returned. @@ -134,24 +134,24 @@ The `ValidatorManager` contructs an [`L1ValidatorWeightMessage`](https://github. ACP-77 also provides a method to disable a validator without interacting with the L1 directly. The P-Chain transaction [`DisableL1ValidatorTx`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#disablel1validatortx) disables the validator on the P-Chain. The disabled validator's weight will still count towards the L1's total weight. -Disabled L1 validators can re-activate at any time by increasing their balance with an `IncreaseBalanceTx`. Anyone can call `IncreaseBalanceTx` for any validator on the P-Chain. A disabled validator can only be completely and permanently removed from the validator set by a call to `initializeEndValidation`. +Disabled L1 validators can re-activate at any time by increasing their balance with an `IncreaseBalanceTx`. Anyone can call `IncreaseBalanceTx` for any validator on the P-Chain. A disabled validator can only be completely and permanently removed from the validator set by a call to `initiateValidatorRemoval`. ### (PoS only) Register a Delegator -`PoSValidatorManager` supports delegation to an actively staked validator as a way for users to earn staking rewards without having to validate the chain. Delegators pay a configurable percentage fee on any earned staking rewards to the host validator. A delegator may be registered by calling `initializeDelegatorRegistration` and providing an amount to stake. The delegator will be registered as long as churn restrictions are not violated. The delegator is reflected on the P-Chain by adjusting the validator's registered weight via a [`SetL1ValidatorWeightTx`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#setl1validatorweighttx). The weight change acknowledgement is delivered to the `PoSValidatorManager` via an [`L1ValidatorWeightMessage`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#l1validatorweightmessage), which is provided by calling `completeDelegatorRegistration`. +`PoSValidatorManager` supports delegation to an actively staked validator as a way for users to earn staking rewards without having to validate the chain. Delegators pay a configurable percentage fee on any earned staking rewards to the host validator. A delegator may be registered by calling `initiateDelegatorRegistration` and providing an amount to stake. The delegator will be registered as long as churn restrictions are not violated. The delegator is reflected on the P-Chain by adjusting the validator's registered weight via a [`SetL1ValidatorWeightTx`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#setl1validatorweighttx). The weight change acknowledgement is delivered to the `PoSValidatorManager` via an [`L1ValidatorWeightMessage`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#l1validatorweightmessage), which is provided by calling `completeDelegatorRegistration`. > [!NOTE] -> The P-Chain is only willing to sign an `L1ValidatorWeightMessage` for an active validator. Once a validator exit has been initiated (via a call to `initializeEndValidation`), the `PoSValidatorManager` must assume that the validator has been deactivated on the P-Chain, and will therefore not sign any further weight updates. Therefore, it is invalid to _initiate_ adding or removing a delegator when the validator is in this state, though it _may be_ valid to _complete_ an already initiated delegator action, depending on the order of delivery to the P-Chain. If the delegator weight change was submitted (and a Warp signature on the acknowledgement retrieved) before the validator was removed, then the delegator action may be completed. Otherwise, the acknowledgement of the validation end must first be delivered before completing the delegator action. +> The P-Chain is only willing to sign an `L1ValidatorWeightMessage` for an active validator. Once a validator exit has been initiated (via a call to `initiateValidatorRemoval`), the `PoSValidatorManager` must assume that the validator has been deactivated on the P-Chain, and will therefore not sign any further weight updates. Therefore, it is invalid to _initiate_ adding or removing a delegator when the validator is in this state, though it _may be_ valid to _complete_ an already initiated delegator action, depending on the order of delivery to the P-Chain. If the delegator weight change was submitted (and a Warp signature on the acknowledgement retrieved) before the validator was removed, then the delegator action may be completed. Otherwise, the acknowledgement of the validation end must first be delivered before completing the delegator action. ### (PoS only) Remove a Delegator -Delegators removal may be initiated by calling `initializeEndDelegation`, as long as churn restrictions are not violated. Similar to `initializeEndValidation`, an uptime proof may be provided to be used to determine delegator rewards eligibility. If no proof is provided, the latest known uptime will be used (see [(PoS only) Submit and Uptime Proof](#pos-only-submit-an-uptime-proof)). The validator's weight is updated on the P-Chain by the same mechanism used to register a delegator. The `L1ValidatorWeightMessage` from the P-Chain is delivered to the `PoSValidatorManager` in the call to `completeEndDelegation`. +Delegators removal may be initiated by calling `initiateEndDelegation`, as long as churn restrictions are not violated. Similar to `initiateValidatorRemoval`, an uptime proof may be provided to be used to determine delegator rewards eligibility. If no proof is provided, the latest known uptime will be used (see [(PoS only) Submit and Uptime Proof](#pos-only-submit-an-uptime-proof)). The validator's weight is updated on the P-Chain by the same mechanism used to register a delegator. The `L1ValidatorWeightMessage` from the P-Chain is delivered to the `PoSValidatorManager` in the call to `completeEndDelegation`. Either the delegator owner or the validator owner may initiate removing a delegator. This is to prevent the validator from being unable to remove itself due to churn limitations if it is has too high a proportion of the Subnet's total weight due to delegator additions. The validator owner may only remove Delegators after the minimum stake duration has elapsed. ### (PoS only) Submit an Uptime Proof -The [rewards calculator](./interfaces/IRewardCalculator.sol) is a function of uptime seconds since the validator's start time. In addition to doing so in the calls to `initializeEndValidation` and `initializeEndDelegation` as described above, uptime proofs may also be supplied by calling `submitUptimeProof`. Unlike `initializeEndValidation` and `initializeEndDelegation`, `submitUptimeProof` may be called by anyone, decreasing the likelihood of a validation or delegation not being able to claim rewards that it deserved based on its actual uptime. +The [rewards calculator](./interfaces/IRewardCalculator.sol) is a function of uptime seconds since the validator's start time. In addition to doing so in the calls to `initiateValidatorRemoval` and `initiateEndDelegation` as described above, uptime proofs may also be supplied by calling `submitUptimeProof`. Unlike `initiateValidatorRemoval` and `initiateEndDelegation`, `submitUptimeProof` may be called by anyone, decreasing the likelihood of a validation or delegation not being able to claim rewards that it deserved based on its actual uptime. ### (PoS only) Collect Staking Rewards diff --git a/contracts/validator-manager/StateTransition.md b/contracts/validator-manager/StateTransition.md index cf62adaa7..719ad9f1a 100644 --- a/contracts/validator-manager/StateTransition.md +++ b/contracts/validator-manager/StateTransition.md @@ -21,7 +21,7 @@ stateDiagram-v2 V.Active,D.Active --> V.PendingRemoved,D.Active: initEndVdr % When the Validator is in PendingRemoved or Completed, in general Delegator actions - % may be completed, but not initialized. + % may be completed, but not initiated. V.PendingRemoved,D.PendingAdded --> V.Completed,D.PendingAdded : completeEndVdr V.PendingRemoved,D.PendingRemoved --> V.Completed,D.PendingRemoved : completeEndVdr V.PendingRemoved,D.PendingRemoved --> V.PendingRemoved : completeEndDel diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 3d5a51812..3d9e61328 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -515,11 +515,11 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, ACP99Ma * @notice Completes the process of ending a validation period by receiving an acknowledgement from the P-Chain * that the validation ID is not active and will never be active in the future. * Note: that this function can be used for successful validation periods that have been explicitly - * ended by calling {initializeEndValidation} or for validation periods that never began on the P-Chain due to the + * ended by calling {_initiateValidatorRemoval} or for validation periods that never began on the P-Chain due to the * {registrationExpiry} being reached. * @return (Validation ID, Validator instance) representing the completed validation period. */ - function _completeEndValidation(uint32 messageIndex) + function _completeValidatorRemoval(uint32 messageIndex) internal returns (bytes32, Validator memory) { @@ -534,7 +534,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, ACP99Ma Validator memory validator = $._validationPeriods[validationID]; - // The validation status is PendingRemoved if validator removal was initiated with a call to {initiateEndValidation}. + // The validation status is PendingRemoved if validator removal was initiated with a call to {initiateValidatorRemoval}. // The validation status is PendingAdded if the validator was never registered on the P-Chain. // The initial validator set must have been set already to have pending validation messages. if ( diff --git a/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol b/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol index cf6d7bb95..b3b1a4095 100644 --- a/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol +++ b/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol @@ -19,7 +19,7 @@ interface IERC20TokenStakingManager is IPoSValidatorManager { * @param minStakeDuration The minimum amount of time this validator must be staked for in seconds. * @param stakeAmount The amount of tokens to stake. */ - function initializeValidatorRegistration( + function initiateValidatorRegistration( ValidatorRegistrationInput calldata registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, @@ -31,7 +31,7 @@ interface IERC20TokenStakingManager is IPoSValidatorManager { * @param validationID The ID of the validator to stake to. * @param stakeAmount The amount of tokens to stake. */ - function initializeDelegatorRegistration( + function initiateDelegatorRegistration( bytes32 validationID, uint256 stakeAmount ) external returns (bytes32); diff --git a/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol b/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol index 205ff85ec..2f6f6d380 100644 --- a/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol +++ b/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol @@ -18,7 +18,7 @@ interface INativeTokenStakingManager is IPoSValidatorManager { * @param delegationFeeBips The fee that delegators must pay to delegate to this validator. * @param minStakeDuration The minimum amount of time this validator must be staked for in seconds. */ - function initializeValidatorRegistration( + function initiateValidatorRegistration( ValidatorRegistrationInput calldata registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration @@ -28,7 +28,7 @@ interface INativeTokenStakingManager is IPoSValidatorManager { * @notice Begins the delegator registration process. Locks the provided native asset in the contract as the stake. * @param validationID The ID of the validator to stake to. */ - function initializeDelegatorRegistration(bytes32 validationID) + function initiateDelegatorRegistration(bytes32 validationID) external payable returns (bytes32); diff --git a/contracts/validator-manager/interfaces/IPoAValidatorManager.sol b/contracts/validator-manager/interfaces/IPoAValidatorManager.sol index 163d77531..818edf346 100644 --- a/contracts/validator-manager/interfaces/IPoAValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoAValidatorManager.sol @@ -16,7 +16,7 @@ interface IPoAValidatorManager { * @param registrationInput The inputs for a validator registration. * @param weight The weight of the validator being registered. */ - function initializeValidatorRegistration( + function initiateValidatorRegistration( ValidatorRegistrationInput calldata registrationInput, uint64 weight ) external returns (bytes32 validationID); @@ -26,5 +26,5 @@ interface IPoAValidatorManager { * started by a successful call to {completeValidatorRegistration} with the given validationID. * @param validationID The ID of the validation period being ended. */ - function initializeEndValidation(bytes32 validationID) external; + function initiateValidatorRemoval(bytes32 validationID) external; } diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index beaea61f0..a70de5cb8 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -145,17 +145,17 @@ interface IPoSValidatorManager { * the latest known uptime will be used. * @param messageIndex The index of the ICM message to be received providing the uptime proof. */ - function initializeEndValidation( + function initiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex ) external; /** - * @notice See {IPoSValidatorManager-initializeEndValidation} for details of the first three parameters + * @notice See {IPoSValidatorManager-initiateValidatorRemoval} for details of the first three parameters * @param recipientAddress The address to receive the rewards. If the 0-address is provided, the rewards will be sent to the validator. */ - function initializeEndValidation( + function initiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, @@ -173,17 +173,17 @@ interface IPoSValidatorManager { * the latest known uptime will be used. * @param messageIndex The index of the ICM message to be received providing the uptime proof. */ - function forceInitializeEndValidation( + function forceinitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex ) external; /** - * @notice See {IPoSValidatorManager-forceInitializeEndValidation} for details of the first three parameters + * @notice See {IPoSValidatorManager-forceinitiateValidatorRemoval} for details of the first three parameters * @param recipientAddress Address to receive the rewards. */ - function forceInitializeEndValidation( + function forceinitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, @@ -193,7 +193,7 @@ interface IPoSValidatorManager { /** * @notice Completes the delegator registration process by submitting an acknowledgement of the registration of a * validationID from the P-Chain. After this function is called, the validator's weight is updated in the contract state. - * Any P-Chain acknowledgement with a nonce greater than or equal to the nonce used to initialize registration of the + * Any P-Chain acknowledgement with a nonce greater than or equal to the nonce used to initiate registration of the * delegator is valid, as long as that nonce has been sent by the contract. For the purposes of computing delegation rewards, * the delegation is considered active after this function is completed. * Note: Only the specified delegation will be marked as registered, even if the validator weight update @@ -218,17 +218,17 @@ interface IPoSValidatorManager { * @param messageIndex If {includeUptimeProof} is true, the index of the ICM message to be received providing the * uptime proof. */ - function initializeEndDelegation( + function initiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external; /** - * @notice See {IPoSValidatorManager-initializeEndDelegation} for details of the first three parameters + * @notice See {IPoSValidatorManager-initiateEndDelegation} for details of the first three parameters * @param recipientAddress The address to receive the rewards. If the 0-address is provided, the rewards will be sent to the delegator. */ - function initializeEndDelegation( + function initiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, @@ -249,17 +249,17 @@ interface IPoSValidatorManager { * @param messageIndex If {includeUptimeProof} is true, the index of the ICM message to be received providing the * uptime proof. */ - function forceInitializeEndDelegation( + function forceInitiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external; /** - * @notice See {IPoSValidatorManager-forceInitializeEndDelegation} for details of the first three parameters + * @notice See {IPoSValidatorManager-forceInitiateEndDelegation} for details of the first three parameters * @param recipientAddress The address to receive the rewards. */ - function forceInitializeEndDelegation( + function forceInitiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, @@ -276,7 +276,7 @@ interface IPoSValidatorManager { /** * @notice Completes the process of ending a delegation by receiving an acknowledgement from the P-Chain. * After this function is called, the validator's weight is updated in the contract state. - * Any P-Chain acknowledgement with a nonce greater than or equal to the nonce used to initialize the end of the + * Any P-Chain acknowledgement with a nonce greater than or equal to the nonce used to initiate the end of the * delegator's delegation is valid, as long as that nonce has been sent by the contract. This is because the validator * weight change pertaining to the delegation ending is included in any subsequent validator weight update messages. * Note: Only the specified delegation will be marked as completed, even if the validator weight update diff --git a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol index 7cdd34912..12977c56e 100644 --- a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol @@ -154,7 +154,7 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { DEFAULT_MINIMUM_STAKE_DURATION - 1 ) ); - app.initializeValidatorRegistration( + app.initiateValidatorRegistration( input, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION - 1, stakeAmount ); } @@ -166,22 +166,22 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { ); } - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput memory registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount ) internal virtual override returns (bytes32) { - return app.initializeValidatorRegistration( + return app.initiateValidatorRegistration( registrationInput, delegationFeeBips, minStakeDuration, stakeAmount ); } - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput memory input, uint64 weight ) internal virtual override returns (bytes32) { - return app.initializeValidatorRegistration( + return app.initiateValidatorRegistration( input, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION, @@ -189,14 +189,14 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { ); } - function _initializeDelegatorRegistration( + function _initiateDelegatorRegistration( bytes32 validationID, address delegatorAddress, uint64 weight ) internal virtual override returns (bytes32) { uint256 value = _weightToValue(weight); vm.startPrank(delegatorAddress); - bytes32 delegationID = app.initializeDelegatorRegistration(validationID, value); + bytes32 delegationID = app.initiateDelegatorRegistration(validationID, value); vm.stopPrank(); return delegationID; } diff --git a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol index f3082b232..69ba0db9c 100644 --- a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol @@ -127,27 +127,27 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { } // Helpers - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput memory registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount ) internal virtual override returns (bytes32) { - return app.initializeValidatorRegistration{value: stakeAmount}( + return app.initiateValidatorRegistration{value: stakeAmount}( registrationInput, delegationFeeBips, minStakeDuration ); } - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput memory input, uint64 weight ) internal virtual override returns (bytes32) { - return app.initializeValidatorRegistration{value: _weightToValue(weight)}( + return app.initiateValidatorRegistration{value: _weightToValue(weight)}( input, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION ); } - function _initializeDelegatorRegistration( + function _initiateDelegatorRegistration( bytes32 validationID, address delegatorAddress, uint64 weight @@ -155,7 +155,7 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { uint256 value = _weightToValue(weight); vm.prank(delegatorAddress); vm.deal(delegatorAddress, value); - return app.initializeDelegatorRegistration{value: value}(validationID); + return app.initiateDelegatorRegistration{value: value}(validationID); } // solhint-disable no-empty-blocks diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index 514dad7f7..e26cd1e41 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -49,7 +49,7 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { OwnableUpgradeable.OwnableUnauthorizedAccount.selector, vm.addr(1) ) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( ValidatorRegistrationInput({ nodeID: DEFAULT_NODE_ID, blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, @@ -71,7 +71,7 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, weight) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( ValidatorRegistrationInput({ nodeID: nodeID, blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, @@ -83,27 +83,27 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { ); } - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput memory input, uint64 weight ) internal virtual override returns (bytes32) { - return app.initializeValidatorRegistration(input, weight); + return app.initiateValidatorRegistration(input, weight); } - function _initializeEndValidation( + function _initiateValidatorRemoval( bytes32 validationID, bool, address ) internal virtual override { - return app.initializeEndValidation(validationID); + return app.initiateValidatorRemoval(validationID); } - function _forceInitializeEndValidation( + function _forceinitiateValidatorRemoval( bytes32 validationID, bool, address ) internal virtual override { - return app.initializeEndValidation(validationID); + return app.initiateValidatorRemoval(validationID); } function _setUp() internal override returns (ACP99Manager) { diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index 97dcf0733..f445d93be 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -80,7 +80,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { DEFAULT_MINIMUM_DELEGATION_FEE_BIPS - 1 ) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( defaultRegistrationInput, DEFAULT_MINIMUM_DELEGATION_FEE_BIPS - 1, DEFAULT_MINIMUM_STAKE_DURATION, @@ -96,7 +96,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( defaultRegistrationInput, delegationFeeBips, DEFAULT_MINIMUM_STAKE_DURATION, @@ -111,7 +111,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { DEFAULT_MINIMUM_STAKE_DURATION - 1 ) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( defaultRegistrationInput, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION - 1, @@ -125,7 +125,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.InvalidStakeAmount.selector, DEFAULT_MINIMUM_STAKE_AMOUNT - 1 ) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( defaultRegistrationInput, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION, @@ -139,7 +139,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.InvalidStakeAmount.selector, DEFAULT_MAXIMUM_STAKE_AMOUNT + 1 ) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( defaultRegistrationInput, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION, @@ -155,7 +155,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.MinStakeDurationNotPassed.selector, block.timestamp ) ); - posValidatorManager.initializeEndValidation(validationID, false, 0); + posValidatorManager.initiateValidatorRemoval(validationID, false, 0); } function testInvalidUptimeWarpMessage() public { @@ -164,7 +164,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockGetUptimeWarpMessage(new bytes(0), false); vm.warp(DEFAULT_COMPLETION_TIMESTAMP); vm.expectRevert(ValidatorManager.InvalidWarpMessage.selector); - posValidatorManager.initializeEndValidation(validationID, true, 0); + posValidatorManager.initiateValidatorRemoval(validationID, true, 0); } function testInvalidUptimeSenderAddress() public { @@ -192,7 +192,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ValidatorManager.InvalidWarpOriginSenderAddress.selector, address(this) ) ); - posValidatorManager.initializeEndValidation(validationID, true, 0); + posValidatorManager.initiateValidatorRemoval(validationID, true, 0); } function testInvalidUptimeValidationID() public { @@ -218,7 +218,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.expectRevert( abi.encodeWithSelector(ValidatorManager.InvalidValidationID.selector, validationID) ); - posValidatorManager.initializeEndValidation(validationID, true, 0); + posValidatorManager.initiateValidatorRemoval(validationID, true, 0); } function testInitializeDelegatorRegistration() public { @@ -337,14 +337,14 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.expectRevert( abi.encodeWithSelector(PoSValidatorManager.UnauthorizedOwner.selector, address(1)) ); - posValidatorManager.initializeEndValidation(validationID, false, 0); + posValidatorManager.initiateValidatorRemoval(validationID, false, 0); } function testInitializeEndDelegation() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -362,7 +362,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: address(this), delegationID: delegationID, @@ -386,7 +386,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.MinStakeDurationNotPassed.selector, invalidEndTime ) ); - _initializeEndDelegation({ + _initiateEndDelegation({ sender: address(this), delegationID: delegationID, endDelegationTimestamp: invalidEndTime, @@ -407,7 +407,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.MinStakeDurationNotPassed.selector, invalidEndTime ) ); - _initializeEndDelegation({ + _initiateEndDelegation({ sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, endDelegationTimestamp: invalidEndTime, @@ -452,7 +452,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); // Initialize end delegation will also call _completeEndDelegation because the validator is copmleted. - _initializeEndDelegation({ + _initiateEndDelegation({ sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, endDelegationTimestamp: invalidEndTime, @@ -473,14 +473,14 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); vm.warp(DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP); vm.prank(DEFAULT_DELEGATOR_ADDRESS); - posValidatorManager.initializeEndDelegation(delegationID, false, 0); + posValidatorManager.initiateEndDelegation(delegationID, false, 0); } - function testForceInitializeEndDelegation() public { + function testforceInitiateEndDelegation() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -494,11 +494,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testForceInitializeEndDelegationInsufficientUptime() public { + function testforceInitiateEndDelegationInsufficientUptime() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -516,7 +516,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -541,7 +541,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -600,7 +600,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _endDefaultValidatorWithChecks(validationID, 2); // Validator is Completed, so this will also complete the delegation. - _initializeEndDelegation({ + _initiateEndDelegation({ sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, @@ -628,7 +628,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID = _registerDefaultDelegator(validationID); address rewardRecipient = address(42); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -673,7 +673,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address newRewardRecipient = address(0); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -703,7 +703,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address badActor = address(43); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -730,7 +730,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID = _registerDefaultDelegator(validationID); address rewardRecipient = address(42); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -779,7 +779,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address newRewardRecipient = address(43); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -830,7 +830,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -846,7 +846,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ValidatorManager.InvalidValidatorStatus.selector, ValidatorStatus.PendingRemoved ) ); - _initializeDelegatorRegistration( + _initiateDelegatorRegistration( validationID, DEFAULT_DELEGATOR_ADDRESS, DEFAULT_DELEGATOR_WEIGHT ); } @@ -869,7 +869,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -887,7 +887,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); } - // Delegator cannot initialize end delegation when validator is pending removed. + // Delegator cannot initiate end delegation when validator is pending removed. function testInitializeEndDelegationValidatorPendingRemoved() public { bytes32 validationID = _registerDefaultValidator(); @@ -896,7 +896,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -912,7 +912,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ValidatorManager.InvalidValidatorStatus.selector, ValidatorStatus.PendingRemoved ) ); - _initializeDelegatorRegistration( + _initiateDelegatorRegistration( validationID, DEFAULT_DELEGATOR_ADDRESS, DEFAULT_DELEGATOR_WEIGHT ); } @@ -922,7 +922,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -941,7 +941,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, validationEndTime - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: validationEndTime, setWeightMessage: setWeightMessage, @@ -990,14 +990,14 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ValidatorManager.InvalidValidatorStatus.selector, ValidatorStatus.Completed ) ); - _initializeDelegatorRegistration( + _initiateDelegatorRegistration( validationID, DEFAULT_DELEGATOR_ADDRESS, DEFAULT_DELEGATOR_WEIGHT ); } function testCompleteDelegatorRegistrationValidatorCompleted() public { bytes32 validationID = _registerDefaultValidator(); - bytes32 delegationID = _initializeDefaultDelegatorRegistration(validationID); + bytes32 delegationID = _initiateDefaultDelegatorRegistration(validationID); _endDefaultValidatorWithChecks(validationID, 2); @@ -1052,7 +1052,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { // warp to right after validator ended vm.warp(delegationEndTime); vm.prank(DEFAULT_DELEGATOR_ADDRESS); - posValidatorManager.initializeEndDelegation(delegationID, false, 0); + posValidatorManager.initiateEndDelegation(delegationID, false, 0); assertEq( _getStakeAssetBalance(DEFAULT_DELEGATOR_ADDRESS), @@ -1064,7 +1064,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -1127,7 +1127,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); // Initialize end delegation for both delegators - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: delegator1, delegationID: delegationID1, @@ -1139,7 +1139,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { force: false, rewardRecipient: address(0) }); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: delegator2, delegationID: delegationID2, @@ -1191,7 +1191,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); // Initialize end delegation for both delegators - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: delegator1, delegationID: delegationID1, @@ -1203,7 +1203,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { force: false, rewardRecipient: address(0) }); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: delegator2, delegationID: delegationID2, @@ -1246,7 +1246,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1283,7 +1283,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); address rewardRecipient = address(42); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1322,7 +1322,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address newRecipient = address(43); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1361,7 +1361,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address newRecipient = address(this); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1402,7 +1402,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address newRecipient = address(0); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1431,7 +1431,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address badActor = address(43); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1457,7 +1457,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1488,7 +1488,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { emit UptimeUpdated(validationID, uptime1); posValidatorManager.submitUptimeProof(validationID, 0); - // Submit a second uptime proof via initializeEndValidation. This one is not sufficient for rewards + // Submit a second uptime proof via initiateValidatorRemoval. This one is not sufficient for rewards // Submit an uptime proof via submitUptime uint64 uptimePercentage2 = 79; uint64 uptime2 = ( @@ -1503,7 +1503,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _initializeEndValidation(validationID, true, address(0)); + _initiateValidatorRemoval(validationID, true, address(0)); } function testInitializeEndValidationWithoutNewUptime() public { @@ -1532,7 +1532,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _initializeEndValidation(validationID, false, address(0)); + _initiateValidatorRemoval(validationID, false, address(0)); } function testInitializeEndValidationInsufficientUptime() public { @@ -1557,7 +1557,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - _initializeEndValidation(validationID, true, address(0)); + _initiateValidatorRemoval(validationID, true, address(0)); } function testSubmitUptimeProofPoaValidator() public { @@ -1580,7 +1580,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1612,7 +1612,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _initializeEndValidation(validationID, false, address(0)); + _initiateValidatorRemoval(validationID, false, address(0)); uint256 balanceBefore = _getStakeAssetBalance(address(this)); @@ -1636,7 +1636,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - _initializeDelegatorRegistration( + _initiateDelegatorRegistration( defaultInitialValidationID, DEFAULT_DELEGATOR_ADDRESS, DEFAULT_DELEGATOR_WEIGHT ); } @@ -1654,7 +1654,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - _initializeDelegatorRegistration(validationID, DEFAULT_DELEGATOR_ADDRESS, delegatorWeight); + _initiateDelegatorRegistration(validationID, DEFAULT_DELEGATOR_ADDRESS, delegatorWeight); } function testCompleteDelegatorRegistrationAlreadyRegistered() public { @@ -1672,7 +1672,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function testCompleteDelegatorRegistrationWrongValidationID() public { bytes32 validationID = _registerDefaultValidator(); - bytes32 delegationID = _initializeDefaultDelegatorRegistration(validationID); + bytes32 delegationID = _initiateDefaultDelegatorRegistration(validationID); bytes memory setValidatorWeightPayload = ValidatorMessages.packL1ValidatorWeightMessage( delegationID, 1, DEFAULT_DELEGATOR_WEIGHT + DEFAULT_WEIGHT @@ -1690,7 +1690,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -1714,7 +1714,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function testInitializeEndDelegationNotRegistered() public { bytes32 validationID = _registerDefaultValidator(); - bytes32 delegationID = _initializeDefaultDelegatorRegistration(validationID); + bytes32 delegationID = _initiateDefaultDelegatorRegistration(validationID); vm.expectRevert( abi.encodeWithSelector( @@ -1722,7 +1722,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - posValidatorManager.initializeEndDelegation(delegationID, true, 0); + posValidatorManager.initiateEndDelegation(delegationID, true, 0); } function testInitializeEndDelegationWrongSender() public { @@ -1734,14 +1734,14 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); vm.prank(address(123)); - posValidatorManager.initializeEndDelegation(delegationID, true, 0); + posValidatorManager.initiateEndDelegation(delegationID, true, 0); } function testCompleteDelegatorRegistrationForDelegatorRegisteredWhileValidatorPendingRemoved() public { bytes32 validationID = _registerDefaultValidator(); - bytes32 delegationID = _initializeDefaultDelegatorRegistration(validationID); + bytes32 delegationID = _initiateDefaultDelegatorRegistration(validationID); bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 2, 0); @@ -1749,7 +1749,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1780,7 +1780,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.warp(DEFAULT_COMPLETION_TIMESTAMP + 1 + DEFAULT_MINIMUM_STAKE_DURATION); _expectStakeUnlock(DEFAULT_DELEGATOR_ADDRESS, _weightToValue(DEFAULT_DELEGATOR_WEIGHT)); - posValidatorManager.initializeEndDelegation(delegationID, true, 0); + posValidatorManager.initiateEndDelegation(delegationID, true, 0); } function testCompleteEndDelegationWhileActive() public { @@ -1798,7 +1798,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function testCompleteDelegatorRegistrationValidatorPendingRemoved() public { bytes32 validationID = _registerDefaultValidator(); - bytes32 delegationID = _initializeDefaultDelegatorRegistration(validationID); + bytes32 delegationID = _initiateDefaultDelegatorRegistration(validationID); bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 2, 0); @@ -1806,7 +1806,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1825,7 +1825,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - posValidatorManager.initializeEndDelegation(delegationID, false, 0); + posValidatorManager.initiateEndDelegation(delegationID, false, 0); } function testResendEndDelegationWhileActive() public { @@ -1841,14 +1841,14 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.resendUpdateDelegation(delegationID); } - function testForceInitializeEndValidation() public { + function testforceinitiateValidatorRemoval() public { bytes32 validationID = _registerDefaultValidator(); bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1858,7 +1858,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testForceInitializeEndValidationInsufficientUptime() public { + function testforceinitiateValidatorRemovalInsufficientUptime() public { bytes32 validationID = _registerDefaultValidator(); uint64 uptimePercentage = 79; @@ -1879,7 +1879,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _forceInitializeEndValidation(validationID, true, address(0)); + _forceinitiateValidatorRemoval(validationID, true, address(0)); } function testValueToWeightTruncated() public { @@ -1925,34 +1925,34 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); } - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput memory registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount ) internal virtual returns (bytes32); - function _initializeEndValidation( + function _initiateValidatorRemoval( bytes32 validationID, bool includeUptime, address recipientAddress ) internal virtual override { - posValidatorManager.initializeEndValidation( + posValidatorManager.initiateValidatorRemoval( validationID, includeUptime, 0, recipientAddress ); } - function _forceInitializeEndValidation( + function _forceinitiateValidatorRemoval( bytes32 validationID, bool includeUptime, address recipientAddress ) internal virtual override { - posValidatorManager.forceInitializeEndValidation( + posValidatorManager.forceinitiateValidatorRemoval( validationID, includeUptime, 0, recipientAddress ); } - function _initializeDelegatorRegistration( + function _initiateDelegatorRegistration( bytes32 validationID, address delegatorAddress, uint64 weight @@ -1993,7 +1993,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { setWeightMessageID: bytes32(0) }); - return _initializeDelegatorRegistration(validationID, delegatorAddress, weight); + return _initiateDelegatorRegistration(validationID, delegatorAddress, weight); } function _setUpCompleteDelegatorRegistration( @@ -2045,7 +2045,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function _initializeDefaultDelegatorRegistration(bytes32 validationID) + function _initiateDefaultDelegatorRegistration(bytes32 validationID) internal returns (bytes32) { @@ -2074,7 +2074,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { } function _completeDefaultDelegator(bytes32 validationID, bytes32 delegationID) internal { - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -2133,7 +2133,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { return delegationID; } - function _initializeEndDelegationValidatorActiveWithChecks( + function _initiateEndDelegationValidatorActiveWithChecks( bytes32 validationID, address sender, bytes32 delegationID, @@ -2162,7 +2162,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit DelegatorRemovalInitialized({delegationID: delegationID, validationID: validationID}); - _initializeEndDelegationValidatorActive({ + _initiateEndDelegationValidatorActive({ sender: sender, delegationID: delegationID, endDelegationTimestamp: endDelegationTimestamp, @@ -2174,7 +2174,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function _initializeEndDelegationValidatorActive( + function _initiateEndDelegationValidatorActive( address sender, bytes32 delegationID, uint64 endDelegationTimestamp, @@ -2189,7 +2189,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { if (includeUptime) { _mockGetUptimeWarpMessage(uptimePayload, true); } - _initializeEndDelegation({ + _initiateEndDelegation({ sender: sender, delegationID: delegationID, endDelegationTimestamp: endDelegationTimestamp, @@ -2199,7 +2199,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function _initializeEndDelegation( + function _initiateEndDelegation( address sender, bytes32 delegationID, uint64 endDelegationTimestamp, @@ -2210,11 +2210,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.warp(endDelegationTimestamp); vm.prank(sender); if (force) { - posValidatorManager.forceInitializeEndDelegation( + posValidatorManager.forceInitiateEndDelegation( delegationID, includeUptime, 0, rewardRecipient ); } else { - posValidatorManager.initializeEndDelegation( + posValidatorManager.initiateEndDelegation( delegationID, includeUptime, 0, rewardRecipient ); } @@ -2259,7 +2259,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, completionTimestamp - completeRegistrationTimestamp ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: completionTimestamp, setWeightMessage: setWeightMessage, @@ -2385,11 +2385,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.completeEndDelegation(delegationID, 0); } - function _initializeAndCompleteEndDelegationWithChecks( + function _initiateAndCompleteEndDelegationWithChecks( bytes32 validationID, bytes32 delegationID ) internal { - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 4f1ac7a2a..5b5a9ea30 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -136,7 +136,7 @@ abstract contract ValidatorManagerTest is Test { vm.expectRevert( abi.encodeWithSelector(ValidatorManager.InvalidPChainOwnerThreshold.selector, 2, 1) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( ValidatorRegistrationInput({ nodeID: DEFAULT_NODE_ID, blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, @@ -157,7 +157,7 @@ abstract contract ValidatorManagerTest is Test { vm.expectRevert( abi.encodeWithSelector(ValidatorManager.InvalidPChainOwnerThreshold.selector, 0, 1) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( ValidatorRegistrationInput({ nodeID: DEFAULT_NODE_ID, blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, @@ -180,7 +180,7 @@ abstract contract ValidatorManagerTest is Test { vm.expectRevert( abi.encodeWithSelector(ValidatorManager.PChainOwnerAddressesNotSorted.selector) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( ValidatorRegistrationInput({ nodeID: DEFAULT_NODE_ID, blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, @@ -228,7 +228,7 @@ abstract contract ValidatorManagerTest is Test { bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); bytes memory uptimeMessage; - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -243,7 +243,7 @@ abstract contract ValidatorManagerTest is Test { bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); bytes memory uptimeMessage; - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -263,7 +263,7 @@ abstract contract ValidatorManagerTest is Test { bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); bytes memory uptimeMessage; - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -327,7 +327,7 @@ abstract contract ValidatorManagerTest is Test { bytes32 validationID = sha256(abi.encodePacked(DEFAULT_SUBNET_ID, uint32(0))); vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, 4)); - _forceInitializeEndValidation(validationID, false, address(0)); + _forceinitiateValidatorRemoval(validationID, false, address(0)); } function testCumulativeChurnRegistration() public { @@ -354,7 +354,7 @@ abstract contract ValidatorManagerTest is Test { churnThreshold + _valueToWeight(DEFAULT_MINIMUM_STAKE_AMOUNT) ) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( ValidatorRegistrationInput({ nodeID: DEFAULT_NODE_ID, blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, @@ -401,7 +401,7 @@ abstract contract ValidatorManagerTest is Test { ) ); - _initializeEndValidation(validationID, false, address(0)); + _initiateValidatorRemoval(validationID, false, address(0)); } function testValidatorManagerStorageSlot() public view { @@ -455,7 +455,7 @@ abstract contract ValidatorManagerTest is Test { validationID, nodeID, bytes32(0), registrationExpiry, weight ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( ValidatorRegistrationInput({ nodeID: nodeID, blsPublicKey: blsPublicKey, @@ -490,7 +490,7 @@ abstract contract ValidatorManagerTest is Test { validatorManager.completeValidatorRegistration(0); } - function _initializeEndValidation( + function _initiateValidatorRemoval( bytes32 validationID, uint64 completionTimestamp, bytes memory setWeightMessage, @@ -505,13 +505,13 @@ abstract contract ValidatorManagerTest is Test { vm.warp(completionTimestamp); if (force) { - _forceInitializeEndValidation(validationID, includeUptime, address(0)); + _forceinitiateValidatorRemoval(validationID, includeUptime, address(0)); } else { - _initializeEndValidation(validationID, includeUptime, address(0)); + _initiateValidatorRemoval(validationID, includeUptime, address(0)); } } - function _initializeEndValidation( + function _initiateValidatorRemoval( bytes32 validationID, uint64 completionTimestamp, bytes memory setWeightMessage, @@ -527,9 +527,9 @@ abstract contract ValidatorManagerTest is Test { vm.warp(completionTimestamp); if (force) { - _forceInitializeEndValidation(validationID, includeUptime, recipientAddress); + _forceinitiateValidatorRemoval(validationID, includeUptime, recipientAddress); } else { - _initializeEndValidation(validationID, includeUptime, recipientAddress); + _initiateValidatorRemoval(validationID, includeUptime, recipientAddress); } } @@ -612,18 +612,18 @@ abstract contract ValidatorManagerTest is Test { ); } - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput memory input, uint64 weight ) internal virtual returns (bytes32); - function _initializeEndValidation( + function _initiateValidatorRemoval( bytes32 validationID, bool includeUptime, address rewardRecipient ) internal virtual; - function _forceInitializeEndValidation( + function _forceinitiateValidatorRemoval( bytes32 validationID, bool includeUptime, address rewardRecipient From 433cca22d252d43570ce733905b1ac0c694561ee Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 16:10:46 -0600 Subject: [PATCH 3/6] rename delegator methods to be consistent with ACP-99 --- .../validator-manager/PoSValidatorManager.sol | 69 +++--- contracts/validator-manager/README.md | 10 +- .../interfaces/IPoSValidatorManager.sol | 32 +-- .../tests/PoAValidatorManagerTests.t.sol | 2 +- .../tests/PoSValidatorManagerTests.t.sol | 199 +++++++++--------- .../tests/ValidatorManagerTests.t.sol | 8 +- 6 files changed, 160 insertions(+), 160 deletions(-) diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 31663b0f6..7c8b93057 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -252,9 +252,9 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-forceinitiateValidatorRemoval}. + * @notice See {IPoSValidatorManager-forceInitiateValidatorRemoval}. */ - function forceinitiateValidatorRemoval( + function forceInitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex @@ -264,9 +264,9 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-forceinitiateValidatorRemoval}. + * @notice See {IPoSValidatorManager-forceInitiateValidatorRemoval}. */ - function forceinitiateValidatorRemoval( + function forceInitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, @@ -575,7 +575,7 @@ abstract contract PoSValidatorManager is $._delegatorStakes[delegationID].startingNonce = nonce; $._delegatorStakes[delegationID].endingNonce = 0; - emit DelegatorAdded({ + emit InitiatedDelegatorRegistration({ delegationID: delegationID, validationID: validationID, delegatorAddress: delegatorAddress, @@ -607,7 +607,7 @@ abstract contract PoSValidatorManager is // In the case where the validator has completed its validation period, we can no // longer stake and should move our status directly to completed and return the stake. if (validator.status == ValidatorStatus.Completed) { - return _completeEndDelegation(delegationID); + return _completeDelegatorRemoval(delegationID); } // If we've already received a weight update with a nonce greater than the delegation's starting nonce, @@ -627,7 +627,7 @@ abstract contract PoSValidatorManager is $._delegatorStakes[delegationID].status = DelegatorStatus.Active; $._delegatorStakes[delegationID].startTime = uint64(block.timestamp); - emit DelegatorRegistered({ + emit CompletedDelegatorRegistration({ delegationID: delegationID, validationID: validationID, startTime: uint64(block.timestamp) @@ -635,66 +635,70 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-initiateEndDelegation}. + * @notice See {IPoSValidatorManager-initiateDelegatorRemoval}. */ - function initiateEndDelegation( + function initiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external { - _initiateEndDelegationWithCheck(delegationID, includeUptimeProof, messageIndex, address(0)); + _initiateDelegatorRemovalWithCheck( + delegationID, includeUptimeProof, messageIndex, address(0) + ); } /** - * @notice See {IPoSValidatorManager-initiateEndDelegation}. + * @notice See {IPoSValidatorManager-initiateDelegatorRemoval}. */ - function initiateEndDelegation( + function initiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) external { - _initiateEndDelegationWithCheck( + _initiateDelegatorRemovalWithCheck( delegationID, includeUptimeProof, messageIndex, rewardRecipient ); } - function _initiateEndDelegationWithCheck( + function _initiateDelegatorRemovalWithCheck( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) internal { if ( - !_initiateEndDelegation(delegationID, includeUptimeProof, messageIndex, rewardRecipient) + !_initiateDelegatorRemoval( + delegationID, includeUptimeProof, messageIndex, rewardRecipient + ) ) { revert DelegatorIneligibleForRewards(delegationID); } } /** - * @notice See {IPoSValidatorManager-forceInitiateEndDelegation}. + * @notice See {IPoSValidatorManager-forceInitiateDelegatorRemoval}. */ - function forceInitiateEndDelegation( + function forceInitiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external { // Ignore the return value here to force end delegation, regardless of possible missed rewards - _initiateEndDelegation(delegationID, includeUptimeProof, messageIndex, address(0)); + _initiateDelegatorRemoval(delegationID, includeUptimeProof, messageIndex, address(0)); } /** - * @notice See {IPoSValidatorManager-forceInitiateEndDelegation}. + * @notice See {IPoSValidatorManager-forceInitiateDelegatorRemoval}. */ - function forceInitiateEndDelegation( + function forceInitiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) external { // Ignore the return value here to force end delegation, regardless of possible missed rewards - _initiateEndDelegation(delegationID, includeUptimeProof, messageIndex, rewardRecipient); + _initiateDelegatorRemoval(delegationID, includeUptimeProof, messageIndex, rewardRecipient); } /** @@ -702,7 +706,7 @@ abstract contract PoSValidatorManager is * Returns false if it is possible for the delegator to claim rewards, but it is not eligible. * Returns true otherwise. */ - function _initiateEndDelegation( + function _initiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, @@ -756,14 +760,11 @@ abstract contract PoSValidatorManager is uint256 reward = _calculateAndSetDelegationReward(delegator, rewardRecipient, delegationID); - emit DelegatorRemovalInitialized({ - delegationID: delegationID, - validationID: validationID - }); + emit InitiatedDelegatorRemoval({delegationID: delegationID, validationID: validationID}); return (reward > 0); } else if (validator.status == ValidatorStatus.Completed) { _calculateAndSetDelegationReward(delegator, rewardRecipient, delegationID); - _completeEndDelegation(delegationID); + _completeDelegatorRemoval(delegationID); // If the validator has completed, then no further uptimes may be submitted, so we always // end the delegation. return true; @@ -820,11 +821,11 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-resendUpdateDelegation}. + * @notice See {IPoSValidatorManager-resendUpdateDelegator}. * @dev Resending the latest validator weight with the latest nonce is safe because all weight changes are * cumulative, so the latest weight change will always include the weight change for any added delegators. */ - function resendUpdateDelegation(bytes32 delegationID) external { + function resendUpdateDelegator(bytes32 delegationID) external { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); Delegator memory delegator = $._delegatorStakes[delegationID]; if ( @@ -849,9 +850,9 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-completeEndDelegation}. + * @notice See {IPoSValidatorManager-completeDelegatorRemoval}. */ - function completeEndDelegation( + function completeDelegatorRemoval( bytes32 delegationID, uint32 messageIndex ) external nonReentrant { @@ -885,10 +886,10 @@ abstract contract PoSValidatorManager is } } - _completeEndDelegation(delegationID); + _completeDelegatorRemoval(delegationID); } - function _completeEndDelegation(bytes32 delegationID) internal { + function _completeDelegatorRemoval(bytes32 delegationID) internal { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); Delegator memory delegator = $._delegatorStakes[delegationID]; @@ -916,7 +917,7 @@ abstract contract PoSValidatorManager is // Unlock the delegator's stake. _unlock(delegator.owner, weightToValue(delegator.weight)); - emit DelegationEnded(delegationID, validationID, delegationRewards, validatorFees); + emit CompletedDelegatorRemoval(delegationID, validationID, delegationRewards, validatorFees); } /** diff --git a/contracts/validator-manager/README.md b/contracts/validator-manager/README.md index 68c94a37b..98460dbae 100644 --- a/contracts/validator-manager/README.md +++ b/contracts/validator-manager/README.md @@ -22,8 +22,8 @@ note for ValidatorManager "Implements most of ACP99Manager" class PoSValidatorManager { +initiateValidatorRemoval() +completeDelegatorRegistration() - +initiateEndDelegation() - +completeEndDelegation() + +initiateDelegatorRemoval() + +completeDelegatorRemoval() } <> PoSValidatorManager class ERC20TokenStakingManager { @@ -145,13 +145,13 @@ Disabled L1 validators can re-activate at any time by increasing their balance w ### (PoS only) Remove a Delegator -Delegators removal may be initiated by calling `initiateEndDelegation`, as long as churn restrictions are not violated. Similar to `initiateValidatorRemoval`, an uptime proof may be provided to be used to determine delegator rewards eligibility. If no proof is provided, the latest known uptime will be used (see [(PoS only) Submit and Uptime Proof](#pos-only-submit-an-uptime-proof)). The validator's weight is updated on the P-Chain by the same mechanism used to register a delegator. The `L1ValidatorWeightMessage` from the P-Chain is delivered to the `PoSValidatorManager` in the call to `completeEndDelegation`. +Delegators removal may be initiated by calling `initiateDelegatorRemoval`, as long as churn restrictions are not violated. Similar to `initiateValidatorRemoval`, an uptime proof may be provided to be used to determine delegator rewards eligibility. If no proof is provided, the latest known uptime will be used (see [(PoS only) Submit and Uptime Proof](#pos-only-submit-an-uptime-proof)). The validator's weight is updated on the P-Chain by the same mechanism used to register a delegator. The `L1ValidatorWeightMessage` from the P-Chain is delivered to the `PoSValidatorManager` in the call to `completeDelegatorRemoval`. Either the delegator owner or the validator owner may initiate removing a delegator. This is to prevent the validator from being unable to remove itself due to churn limitations if it is has too high a proportion of the Subnet's total weight due to delegator additions. The validator owner may only remove Delegators after the minimum stake duration has elapsed. ### (PoS only) Submit an Uptime Proof -The [rewards calculator](./interfaces/IRewardCalculator.sol) is a function of uptime seconds since the validator's start time. In addition to doing so in the calls to `initiateValidatorRemoval` and `initiateEndDelegation` as described above, uptime proofs may also be supplied by calling `submitUptimeProof`. Unlike `initiateValidatorRemoval` and `initiateEndDelegation`, `submitUptimeProof` may be called by anyone, decreasing the likelihood of a validation or delegation not being able to claim rewards that it deserved based on its actual uptime. +The [rewards calculator](./interfaces/IRewardCalculator.sol) is a function of uptime seconds since the validator's start time. In addition to doing so in the calls to `initiateValidatorRemoval` and `initiateDelegatorRemoval` as described above, uptime proofs may also be supplied by calling `submitUptimeProof`. Unlike `initiateValidatorRemoval` and `initiateDelegatorRemoval`, `submitUptimeProof` may be called by anyone, decreasing the likelihood of a validation or delegation not being able to claim rewards that it deserved based on its actual uptime. ### (PoS only) Collect Staking Rewards @@ -161,7 +161,7 @@ Validation rewards are distributed in the call to `completeEndValidation`. #### Delegation Rewards -Delegation rewards are distributed in the call to `completeEndDelegation`. +Delegation rewards are distributed in the call to `completeDelegatorRemoval`. #### Delegation Fees diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index a70de5cb8..2fb59ad2a 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -81,7 +81,7 @@ interface IPoSValidatorManager { * @param delegatorWeight The weight of the delegator * @param setWeightMessageID The ID of the ICM message that updates the validator's weight on the P-Chain */ - event DelegatorAdded( + event InitiatedDelegatorRegistration( bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, @@ -97,7 +97,7 @@ interface IPoSValidatorManager { * @param validationID The ID of the validation period * @param startTime The time at which the registration was completed */ - event DelegatorRegistered( + event CompletedDelegatorRegistration( bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime ); @@ -106,7 +106,7 @@ interface IPoSValidatorManager { * @param delegationID The ID of the delegation * @param validationID The ID of the validation period the delegator was staked to */ - event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID); + event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID); /** * @notice Event emitted when delegator removal is completed @@ -115,7 +115,7 @@ interface IPoSValidatorManager { * @param rewards The rewards given to the delegator * @param fees The portion of the delegator's rewards paid to the validator */ - event DelegationEnded( + event CompletedDelegatorRemoval( bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees ); @@ -173,17 +173,17 @@ interface IPoSValidatorManager { * the latest known uptime will be used. * @param messageIndex The index of the ICM message to be received providing the uptime proof. */ - function forceinitiateValidatorRemoval( + function forceInitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex ) external; /** - * @notice See {IPoSValidatorManager-forceinitiateValidatorRemoval} for details of the first three parameters + * @notice See {IPoSValidatorManager-forceInitiateValidatorRemoval} for details of the first three parameters * @param recipientAddress Address to receive the rewards. */ - function forceinitiateValidatorRemoval( + function forceInitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, @@ -218,17 +218,17 @@ interface IPoSValidatorManager { * @param messageIndex If {includeUptimeProof} is true, the index of the ICM message to be received providing the * uptime proof. */ - function initiateEndDelegation( + function initiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external; /** - * @notice See {IPoSValidatorManager-initiateEndDelegation} for details of the first three parameters + * @notice See {IPoSValidatorManager-initiateDelegatorRemoval} for details of the first three parameters * @param recipientAddress The address to receive the rewards. If the 0-address is provided, the rewards will be sent to the delegator. */ - function initiateEndDelegation( + function initiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, @@ -249,17 +249,17 @@ interface IPoSValidatorManager { * @param messageIndex If {includeUptimeProof} is true, the index of the ICM message to be received providing the * uptime proof. */ - function forceInitiateEndDelegation( + function forceInitiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external; /** - * @notice See {IPoSValidatorManager-forceInitiateEndDelegation} for details of the first three parameters + * @notice See {IPoSValidatorManager-forceInitiateDelegatorRemoval} for details of the first three parameters * @param recipientAddress The address to receive the rewards. */ - function forceInitiateEndDelegation( + function forceInitiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, @@ -271,7 +271,7 @@ interface IPoSValidatorManager { * Only necessary if the original message can't be delivered due to validator churn. * @param delegationID The ID of the delegation. */ - function resendUpdateDelegation(bytes32 delegationID) external; + function resendUpdateDelegator(bytes32 delegationID) external; /** * @notice Completes the process of ending a delegation by receiving an acknowledgement from the P-Chain. @@ -284,7 +284,7 @@ interface IPoSValidatorManager { * @param delegationID The ID of the delegation being removed. * @param messageIndex The index of the ICM message to be received providing the acknowledgement. */ - function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) external; + function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) external; /** * @notice Withdraws the delegation fees from completed delegations to the owner of the validator. @@ -300,7 +300,7 @@ interface IPoSValidatorManager { function changeValidatorRewardRecipient(bytes32 validationID, address recipient) external; /** - * @notice Changes the address of the recipient of the delegator's rewards for a delegation period. This method can be called any time before {completeEndDelegation}. + * @notice Changes the address of the recipient of the delegator's rewards for a delegation period. This method can be called any time before {completeDelegatorRemoval}. * @param delegationID The ID of the validation period being ended. * @param recipient The address to receive the rewards. */ diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index e26cd1e41..742ae5d90 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -98,7 +98,7 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { return app.initiateValidatorRemoval(validationID); } - function _forceinitiateValidatorRemoval( + function _forceInitiateValidatorRemoval( bytes32 validationID, bool, address diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index f445d93be..e84f33da9 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -51,7 +51,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { disableOwner: DEFAULT_P_CHAIN_OWNER }); - event DelegatorAdded( + event InitiatedDelegatorRegistration( bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, @@ -61,13 +61,13 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 setWeightMessageID ); - event DelegatorRegistered( + event CompletedDelegatorRegistration( bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime ); - event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID); + event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID); - event DelegationEnded( + event CompletedDelegatorRemoval( bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees ); @@ -221,10 +221,10 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.initiateValidatorRemoval(validationID, true, 0); } - function testInitializeDelegatorRegistration() public { + function testInitiateDelegatorRegistration() public { bytes32 validationID = _registerDefaultValidator(); - _setUpInitializeDelegatorRegistration({ + _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: DEFAULT_DELEGATOR_ADDRESS, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -237,7 +237,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function testResendDelegatorRegistration() public { bytes32 validationID = _registerDefaultValidator(); - bytes32 delegationID = _setUpInitializeDelegatorRegistration({ + bytes32 delegationID = _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: DEFAULT_DELEGATOR_ADDRESS, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -249,7 +249,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, 1, DEFAULT_WEIGHT + DEFAULT_DELEGATOR_WEIGHT ); _mockSendWarpMessage(setValidatorWeightPayload, bytes32(0)); - posValidatorManager.resendUpdateDelegation(delegationID); + posValidatorManager.resendUpdateDelegator(delegationID); } function testCompleteDelegatorRegistration() public { @@ -263,7 +263,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { // Initialize two delegations address delegator1 = DEFAULT_DELEGATOR_ADDRESS; - _setUpInitializeDelegatorRegistration({ + _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: delegator1, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -272,7 +272,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedNonce: 1 }); address delegator2 = address(0x5678567856785678567856785678567856785678); - bytes32 delegationID2 = _setUpInitializeDelegatorRegistration({ + bytes32 delegationID2 = _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: delegator2, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -300,7 +300,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { // Initialize two delegations address delegator1 = DEFAULT_DELEGATOR_ADDRESS; - bytes32 delegationID1 = _setUpInitializeDelegatorRegistration({ + bytes32 delegationID1 = _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: delegator1, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -309,7 +309,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedNonce: 1 }); address delegator2 = address(0x5678567856785678567856785678567856785678); - _setUpInitializeDelegatorRegistration({ + _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: delegator2, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -340,11 +340,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.initiateValidatorRemoval(validationID, false, 0); } - function testInitializeEndDelegation() public { + function testInitiateDelegatorRemoval() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -358,11 +358,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testInitializeEndDelegationByValidator() public { + function testInitiateDelegatorRemovalByValidator() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: address(this), delegationID: delegationID, @@ -376,7 +376,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testInitializeEndDelegationByValidatorMinStakeDurationNotPassed() public { + function testInitiateDelegatorRemovalByValidatorMinStakeDurationNotPassed() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); @@ -386,7 +386,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.MinStakeDurationNotPassed.selector, invalidEndTime ) ); - _initiateEndDelegation({ + _initiateDelegatorRemoval({ sender: address(this), delegationID: delegationID, endDelegationTimestamp: invalidEndTime, @@ -396,7 +396,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testInitializeEndDelegationMinStakeDurationNotPassed() public { + function testInitiateDelegatorRemovalMinStakeDurationNotPassed() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); @@ -407,7 +407,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.MinStakeDurationNotPassed.selector, invalidEndTime ) ); - _initiateEndDelegation({ + _initiateDelegatorRemoval({ sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, endDelegationTimestamp: invalidEndTime, @@ -451,8 +451,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - // Initialize end delegation will also call _completeEndDelegation because the validator is copmleted. - _initiateEndDelegation({ + // Initialize end delegation will also call _completeDelegatorRemoval because the validator is copmleted. + _initiateDelegatorRemoval({ sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, endDelegationTimestamp: invalidEndTime, @@ -462,7 +462,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testInitializeEndDelegationInsufficientUptime() public { + function testInitiateDelegatorRemovalInsufficientUptime() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); @@ -473,14 +473,14 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); vm.warp(DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP); vm.prank(DEFAULT_DELEGATOR_ADDRESS); - posValidatorManager.initiateEndDelegation(delegationID, false, 0); + posValidatorManager.initiateDelegatorRemoval(delegationID, false, 0); } - function testforceInitiateEndDelegation() public { + function testforceInitiateDelegatorRemoval() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -494,11 +494,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testforceInitiateEndDelegationInsufficientUptime() public { + function testforceInitiateDelegatorRemovalInsufficientUptime() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -516,7 +516,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -531,7 +531,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory setValidatorWeightPayload = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 2, DEFAULT_WEIGHT); _mockSendWarpMessage(setValidatorWeightPayload, bytes32(0)); - posValidatorManager.resendUpdateDelegation(delegationID); + posValidatorManager.resendUpdateDelegator(delegationID); } function testResendEndValidation() public override { @@ -600,7 +600,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _endDefaultValidatorWithChecks(validationID, 2); // Validator is Completed, so this will also complete the delegation. - _initiateEndDelegation({ + _initiateDelegatorRemoval({ sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, @@ -628,7 +628,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID = _registerDefaultDelegator(validationID); address rewardRecipient = address(42); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -653,7 +653,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; - _completeEndDelegationWithChecks({ + _completeDelegatorRemovalWithChecks({ validationID: validationID, delegationID: delegationID, delegator: DEFAULT_DELEGATOR_ADDRESS, @@ -673,7 +673,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address newRewardRecipient = address(0); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -703,7 +703,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address badActor = address(43); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -730,7 +730,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID = _registerDefaultDelegator(validationID); address rewardRecipient = address(42); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -759,7 +759,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; - _completeEndDelegationWithChecks({ + _completeDelegatorRemovalWithChecks({ validationID: validationID, delegationID: delegationID, delegator: DEFAULT_DELEGATOR_ADDRESS, @@ -779,7 +779,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address newRewardRecipient = address(43); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -807,7 +807,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; - _completeEndDelegationWithChecks({ + _completeDelegatorRemovalWithChecks({ validationID: validationID, delegationID: delegationID, delegator: DEFAULT_DELEGATOR_ADDRESS, @@ -822,7 +822,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { } // Delegator registration is not allowed when Validator is pending removed. - function testInitializeDelegatorRegistrationValidatorPendingRemoved() public { + function testInitiateDelegatorRegistrationValidatorPendingRemoved() public { bytes32 validationID = _registerDefaultValidator(); bytes memory setWeightMessage = @@ -855,7 +855,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function testCompleteRegisterDelegatorValidatorPendingRemoved() public { bytes32 validationID = _registerDefaultValidator(); - bytes32 delegationID = _setUpInitializeDelegatorRegistration({ + bytes32 delegationID = _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: DEFAULT_DELEGATOR_ADDRESS, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -888,7 +888,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { } // Delegator cannot initiate end delegation when validator is pending removed. - function testInitializeEndDelegationValidatorPendingRemoved() public { + function testInitiateDelegatorRemovalValidatorPendingRemoved() public { bytes32 validationID = _registerDefaultValidator(); bytes memory setWeightMessage = @@ -922,7 +922,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -964,7 +964,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address delegator = DEFAULT_DELEGATOR_ADDRESS; - _completeEndDelegationWithChecks({ + _completeDelegatorRemovalWithChecks({ validationID: validationID, delegationID: delegationID, delegator: delegator, @@ -978,7 +978,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testInitializeDelegatorRegistrationValidatorCompleted() public { + function testInitiateDelegatorRegistrationValidatorCompleted() public { bytes32 validationID = _registerDefaultValidator(); _endDefaultValidatorWithChecks(validationID, 1); @@ -1001,9 +1001,9 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _endDefaultValidatorWithChecks(validationID, 2); - // completeDelegatorRegistration should fall through to _completeEndDelegation and refund the stake + // completeDelegatorRegistration should fall through to _completeDelegatorRemoval and refund the stake vm.expectEmit(true, true, true, true, address(validatorManager)); - emit DelegationEnded(delegationID, validationID, 0, 0); + emit CompletedDelegatorRemoval(delegationID, validationID, 0, 0); uint256 balanceBefore = _getStakeAssetBalance(DEFAULT_DELEGATOR_ADDRESS); @@ -1019,7 +1019,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); } - function testInitializeEndDelegationValidatorCompleted() public { + function testInitiateDelegatorRemovalValidatorCompleted() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); @@ -1038,9 +1038,9 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 expectedValidatorFees = expectedTotalReward * DEFAULT_DELEGATION_FEE_BIPS / 10000; uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; - // completeDelegatorRegistration should fall through to _completeEndDelegation and refund the stake + // completeDelegatorRegistration should fall through to _completeDelegatorRemoval and refund the stake vm.expectEmit(true, true, true, true, address(validatorManager)); - emit DelegationEnded( + emit CompletedDelegatorRemoval( delegationID, validationID, expectedDelegatorReward, expectedValidatorFees ); @@ -1052,7 +1052,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { // warp to right after validator ended vm.warp(delegationEndTime); vm.prank(DEFAULT_DELEGATOR_ADDRESS); - posValidatorManager.initiateEndDelegation(delegationID, false, 0); + posValidatorManager.initiateDelegatorRemoval(delegationID, false, 0); assertEq( _getStakeAssetBalance(DEFAULT_DELEGATOR_ADDRESS), @@ -1064,7 +1064,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -1085,7 +1085,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit DelegationEnded( + emit CompletedDelegatorRemoval( delegationID, validationID, expectedDelegatorReward, expectedValidatorFees ); uint256 balanceBefore = _getStakeAssetBalance(DEFAULT_DELEGATOR_ADDRESS); @@ -1093,7 +1093,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _expectStakeUnlock(DEFAULT_DELEGATOR_ADDRESS, _weightToValue(DEFAULT_DELEGATOR_WEIGHT)); _expectRewardIssuance(DEFAULT_DELEGATOR_ADDRESS, expectedDelegatorReward); - posValidatorManager.completeEndDelegation(delegationID, 0); + posValidatorManager.completeDelegatorRemoval(delegationID, 0); assertEq( _getStakeAssetBalance(DEFAULT_DELEGATOR_ADDRESS), @@ -1127,7 +1127,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); // Initialize end delegation for both delegators - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: delegator1, delegationID: delegationID1, @@ -1139,7 +1139,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { force: false, rewardRecipient: address(0) }); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: delegator2, delegationID: delegationID2, @@ -1161,7 +1161,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockGetPChainWarpMessage(setValidatorWeightPayload, true); vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, nonce)); - posValidatorManager.completeEndDelegation(delegationID2, 0); + posValidatorManager.completeDelegatorRemoval(delegationID2, 0); } function testCompleteEndDelegationImplicitNonce() public { @@ -1191,7 +1191,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); // Initialize end delegation for both delegators - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: delegator1, delegationID: delegationID1, @@ -1203,7 +1203,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { force: false, rewardRecipient: address(0) }); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: delegator2, delegationID: delegationID2, @@ -1225,7 +1225,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address delegator = DEFAULT_DELEGATOR_ADDRESS; // Complete delegation1 by delivering the weight update from nonce 4 (delegator2's nonce) - _completeEndDelegationWithChecks({ + _completeDelegatorRemovalWithChecks({ validationID: validationID, delegationID: delegationID1, delegator: delegator, @@ -1690,7 +1690,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -1709,10 +1709,10 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, 2)); - posValidatorManager.completeEndDelegation(delegationID, 0); + posValidatorManager.completeDelegatorRemoval(delegationID, 0); } - function testInitializeEndDelegationNotRegistered() public { + function testInitiateDelegatorRemovalNotRegistered() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _initiateDefaultDelegatorRegistration(validationID); @@ -1722,10 +1722,10 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - posValidatorManager.initiateEndDelegation(delegationID, true, 0); + posValidatorManager.initiateDelegatorRemoval(delegationID, true, 0); } - function testInitializeEndDelegationWrongSender() public { + function testInitiateDelegatorRemovalWrongSender() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); @@ -1734,12 +1734,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); vm.prank(address(123)); - posValidatorManager.initiateEndDelegation(delegationID, true, 0); + posValidatorManager.initiateDelegatorRemoval(delegationID, true, 0); } - function testCompleteDelegatorRegistrationForDelegatorRegisteredWhileValidatorPendingRemoved() - public - { + function testCompleteDelegatorRegistrationForCompletedDelegatorRegistrationWhileValidatorPendingRemoved( + ) public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _initiateDefaultDelegatorRegistration(validationID); @@ -1780,7 +1779,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.warp(DEFAULT_COMPLETION_TIMESTAMP + 1 + DEFAULT_MINIMUM_STAKE_DURATION); _expectStakeUnlock(DEFAULT_DELEGATOR_ADDRESS, _weightToValue(DEFAULT_DELEGATOR_WEIGHT)); - posValidatorManager.initiateEndDelegation(delegationID, true, 0); + posValidatorManager.initiateDelegatorRemoval(delegationID, true, 0); } function testCompleteEndDelegationWhileActive() public { @@ -1793,7 +1792,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - posValidatorManager.completeEndDelegation(delegationID, 0); + posValidatorManager.completeDelegatorRemoval(delegationID, 0); } function testCompleteDelegatorRegistrationValidatorPendingRemoved() public { @@ -1825,7 +1824,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - posValidatorManager.initiateEndDelegation(delegationID, false, 0); + posValidatorManager.initiateDelegatorRemoval(delegationID, false, 0); } function testResendEndDelegationWhileActive() public { @@ -1838,10 +1837,10 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - posValidatorManager.resendUpdateDelegation(delegationID); + posValidatorManager.resendUpdateDelegator(delegationID); } - function testforceinitiateValidatorRemoval() public { + function testforceInitiateValidatorRemoval() public { bytes32 validationID = _registerDefaultValidator(); bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); @@ -1858,7 +1857,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testforceinitiateValidatorRemovalInsufficientUptime() public { + function testforceInitiateValidatorRemovalInsufficientUptime() public { bytes32 validationID = _registerDefaultValidator(); uint64 uptimePercentage = 79; @@ -1879,7 +1878,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _forceinitiateValidatorRemoval(validationID, true, address(0)); + _forceInitiateValidatorRemoval(validationID, true, address(0)); } function testValueToWeightTruncated() public { @@ -1942,12 +1941,12 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); } - function _forceinitiateValidatorRemoval( + function _forceInitiateValidatorRemoval( bytes32 validationID, bool includeUptime, address recipientAddress ) internal virtual override { - posValidatorManager.forceinitiateValidatorRemoval( + posValidatorManager.forceInitiateValidatorRemoval( validationID, includeUptime, 0, recipientAddress ); } @@ -1961,7 +1960,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { // // Delegation setup utilities // - function _setUpInitializeDelegatorRegistration( + function _setUpInitiateDelegatorRegistration( bytes32 validationID, address delegatorAddress, uint64 weight, @@ -1983,7 +1982,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit DelegatorAdded({ + emit InitiatedDelegatorRegistration({ delegationID: keccak256(abi.encodePacked(validationID, expectedNonce)), validationID: validationID, delegatorAddress: delegatorAddress, @@ -2020,7 +2019,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit CompletedValidatorWeightUpdate(validationID, expectedNonce, expectedValidatorWeight); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit DelegatorRegistered({ + emit CompletedDelegatorRegistration({ delegationID: delegationID, validationID: validationID, startTime: completeRegistrationTimestamp @@ -2049,7 +2048,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { internal returns (bytes32) { - return _setUpInitializeDelegatorRegistration({ + return _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: DEFAULT_DELEGATOR_ADDRESS, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -2074,7 +2073,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { } function _completeDefaultDelegator(bytes32 validationID, bytes32 delegationID) internal { - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -2092,7 +2091,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; - _completeEndDelegationWithChecks({ + _completeDelegatorRemovalWithChecks({ validationID: validationID, delegationID: delegationID, delegator: DEFAULT_DELEGATOR_ADDRESS, @@ -2115,7 +2114,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint64 expectedValidatorWeight, uint64 expectedNonce ) internal returns (bytes32) { - bytes32 delegationID = _setUpInitializeDelegatorRegistration({ + bytes32 delegationID = _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: delegatorAddress, weight: weight, @@ -2133,7 +2132,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { return delegationID; } - function _initiateEndDelegationValidatorActiveWithChecks( + function _initiateDelegatorRemovalValidatorActiveWithChecks( bytes32 validationID, address sender, bytes32 delegationID, @@ -2160,9 +2159,9 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit DelegatorRemovalInitialized({delegationID: delegationID, validationID: validationID}); + emit InitiatedDelegatorRemoval({delegationID: delegationID, validationID: validationID}); - _initiateEndDelegationValidatorActive({ + _initiateDelegatorRemovalValidatorActive({ sender: sender, delegationID: delegationID, endDelegationTimestamp: endDelegationTimestamp, @@ -2174,7 +2173,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function _initiateEndDelegationValidatorActive( + function _initiateDelegatorRemovalValidatorActive( address sender, bytes32 delegationID, uint64 endDelegationTimestamp, @@ -2189,7 +2188,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { if (includeUptime) { _mockGetUptimeWarpMessage(uptimePayload, true); } - _initiateEndDelegation({ + _initiateDelegatorRemoval({ sender: sender, delegationID: delegationID, endDelegationTimestamp: endDelegationTimestamp, @@ -2199,7 +2198,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function _initiateEndDelegation( + function _initiateDelegatorRemoval( address sender, bytes32 delegationID, uint64 endDelegationTimestamp, @@ -2210,11 +2209,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.warp(endDelegationTimestamp); vm.prank(sender); if (force) { - posValidatorManager.forceInitiateEndDelegation( + posValidatorManager.forceInitiateDelegatorRemoval( delegationID, includeUptime, 0, rewardRecipient ); } else { - posValidatorManager.initiateEndDelegation( + posValidatorManager.initiateDelegatorRemoval( delegationID, includeUptime, 0, rewardRecipient ); } @@ -2328,7 +2327,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.completeValidatorRemoval(0); } - function _completeEndDelegationWithChecks( + function _completeDelegatorRemovalWithChecks( bytes32 validationID, bytes32 delegationID, address delegator, @@ -2347,7 +2346,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { emit CompletedValidatorWeightUpdate(validationID, expectedNonce, validatorWeight); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit DelegationEnded( + emit CompletedDelegatorRemoval( delegationID, validationID, expectedDelegatorReward, expectedValidatorFees ); uint256 balanceBefore = _getStakeAssetBalance(delegator); @@ -2356,7 +2355,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _expectStakeUnlock(delegator, _weightToValue(delegatorWeight)); _expectRewardIssuance(rewardRecipient, expectedDelegatorReward); - _completeEndDelegation(delegationID, weightUpdateMessage); + _completeDelegatorRemoval(delegationID, weightUpdateMessage); assertEq(posValidatorManager.getValidator(validationID).weight, expectedValidatorWeight); @@ -2377,19 +2376,19 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { } } - function _completeEndDelegation( + function _completeDelegatorRemoval( bytes32 delegationID, bytes memory weightUpdateMessage ) internal { _mockGetPChainWarpMessage(weightUpdateMessage, true); - posValidatorManager.completeEndDelegation(delegationID, 0); + posValidatorManager.completeDelegatorRemoval(delegationID, 0); } function _initiateAndCompleteEndDelegationWithChecks( bytes32 validationID, bytes32 delegationID ) internal { - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -2415,7 +2414,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; address delegator = DEFAULT_DELEGATOR_ADDRESS; - _completeEndDelegationWithChecks({ + _completeDelegatorRemovalWithChecks({ validationID: validationID, delegationID: delegationID, delegator: delegator, diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 5b5a9ea30..e2c69978e 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -327,7 +327,7 @@ abstract contract ValidatorManagerTest is Test { bytes32 validationID = sha256(abi.encodePacked(DEFAULT_SUBNET_ID, uint32(0))); vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, 4)); - _forceinitiateValidatorRemoval(validationID, false, address(0)); + _forceInitiateValidatorRemoval(validationID, false, address(0)); } function testCumulativeChurnRegistration() public { @@ -505,7 +505,7 @@ abstract contract ValidatorManagerTest is Test { vm.warp(completionTimestamp); if (force) { - _forceinitiateValidatorRemoval(validationID, includeUptime, address(0)); + _forceInitiateValidatorRemoval(validationID, includeUptime, address(0)); } else { _initiateValidatorRemoval(validationID, includeUptime, address(0)); } @@ -527,7 +527,7 @@ abstract contract ValidatorManagerTest is Test { vm.warp(completionTimestamp); if (force) { - _forceinitiateValidatorRemoval(validationID, includeUptime, recipientAddress); + _forceInitiateValidatorRemoval(validationID, includeUptime, recipientAddress); } else { _initiateValidatorRemoval(validationID, includeUptime, recipientAddress); } @@ -623,7 +623,7 @@ abstract contract ValidatorManagerTest is Test { address rewardRecipient ) internal virtual; - function _forceinitiateValidatorRemoval( + function _forceInitiateValidatorRemoval( bytes32 validationID, bool includeUptime, address rewardRecipient From 23dc08d1685bed9b5b602e7e043406236016370e Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 17:20:41 -0600 Subject: [PATCH 4/6] remove ValidatorRegistrationInput struct --- .../ERC20TokenStakingManager.sol | 22 ++-- .../NativeTokenStakingManager.sol | 24 +++-- .../validator-manager/PoAValidatorManager.sol | 21 ++-- .../validator-manager/PoSValidatorManager.sol | 19 ++-- .../validator-manager/ValidatorManager.sol | 11 -- .../interfaces/IERC20TokenStakingManager.sol | 14 ++- .../interfaces/INativeTokenStakingManager.sol | 14 ++- .../interfaces/IPoAValidatorManager.sol | 14 ++- .../tests/ERC20TokenStakingManagerTests.t.sol | 64 +++++++---- .../NativeTokenStakingManagerTests.t.sol | 39 +++++-- .../tests/PoAValidatorManagerTests.t.sol | 56 +++++----- .../tests/PoSValidatorManagerTests.t.sol | 100 +++++++++++------- .../tests/ValidatorManagerTests.t.sol | 97 ++++++++--------- 13 files changed, 295 insertions(+), 200 deletions(-) diff --git a/contracts/validator-manager/ERC20TokenStakingManager.sol b/contracts/validator-manager/ERC20TokenStakingManager.sol index 096fc4443..46e416d07 100644 --- a/contracts/validator-manager/ERC20TokenStakingManager.sol +++ b/contracts/validator-manager/ERC20TokenStakingManager.sol @@ -7,8 +7,7 @@ pragma solidity 0.8.25; import {PoSValidatorManager} from "./PoSValidatorManager.sol"; import {PoSValidatorManagerSettings} from "./interfaces/IPoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "./ValidatorManager.sol"; -import {IERC20TokenStakingManager} from "./interfaces/IERC20TokenStakingManager.sol"; +import {IERC20TokenStakingManager, PChainOwner} from "./interfaces/IERC20TokenStakingManager.sol"; import {IERC20Mintable} from "./interfaces/IERC20Mintable.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; import {SafeERC20TransferFrom} from "@utilities/SafeERC20TransferFrom.sol"; @@ -99,14 +98,25 @@ contract ERC20TokenStakingManager is * @notice See {IERC20TokenStakingManager-initiateValidatorRegistration} */ function initiateValidatorRegistration( - ValidatorRegistrationInput calldata registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount ) external nonReentrant returns (bytes32 validationID) { - return _initiateValidatorRegistration( - registrationInput, delegationFeeBips, minStakeDuration, stakeAmount - ); + return _initiateValidatorRegistration({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + delegationFeeBips: delegationFeeBips, + minStakeDuration: minStakeDuration, + stakeAmount: stakeAmount + }); } /** diff --git a/contracts/validator-manager/NativeTokenStakingManager.sol b/contracts/validator-manager/NativeTokenStakingManager.sol index fc875cb33..b0b188955 100644 --- a/contracts/validator-manager/NativeTokenStakingManager.sol +++ b/contracts/validator-manager/NativeTokenStakingManager.sol @@ -7,8 +7,9 @@ pragma solidity 0.8.25; import {PoSValidatorManager} from "./PoSValidatorManager.sol"; import {PoSValidatorManagerSettings} from "./interfaces/IPoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "./ValidatorManager.sol"; -import {INativeTokenStakingManager} from "./interfaces/INativeTokenStakingManager.sol"; +import { + INativeTokenStakingManager, PChainOwner +} from "./interfaces/INativeTokenStakingManager.sol"; import {INativeMinter} from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/INativeMinter.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; @@ -62,13 +63,24 @@ contract NativeTokenStakingManager is * @notice See {INativeTokenStakingManager-initiateValidatorRegistration}. */ function initiateValidatorRegistration( - ValidatorRegistrationInput calldata registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration ) external payable nonReentrant returns (bytes32) { - return _initiateValidatorRegistration( - registrationInput, delegationFeeBips, minStakeDuration, msg.value - ); + return _initiateValidatorRegistration({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + delegationFeeBips: delegationFeeBips, + minStakeDuration: minStakeDuration, + stakeAmount: msg.value + }); } /** diff --git a/contracts/validator-manager/PoAValidatorManager.sol b/contracts/validator-manager/PoAValidatorManager.sol index 9604bf074..b6f716bfa 100644 --- a/contracts/validator-manager/PoAValidatorManager.sol +++ b/contracts/validator-manager/PoAValidatorManager.sol @@ -5,9 +5,8 @@ pragma solidity 0.8.25; -import {ValidatorManager} from "./ValidatorManager.sol"; -import {ValidatorManagerSettings, ValidatorRegistrationInput} from "./ValidatorManager.sol"; -import {IPoAValidatorManager} from "./interfaces/IPoAValidatorManager.sol"; +import {ValidatorManager, ValidatorManagerSettings} from "./ValidatorManager.sol"; +import {IPoAValidatorManager, PChainOwner} from "./interfaces/IPoAValidatorManager.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable@5.0.2/access/OwnableUpgradeable.sol"; @@ -49,15 +48,19 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU * @notice See {IPoAValidatorManager-initiateValidatorRegistration}. */ function initiateValidatorRegistration( - ValidatorRegistrationInput calldata registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint64 weight ) external onlyOwner returns (bytes32 validationID) { return _initiateValidatorRegistration({ - nodeID: registrationInput.nodeID, - blsPublicKey: registrationInput.blsPublicKey, - registrationExpiry: registrationInput.registrationExpiry, - remainingBalanceOwner: registrationInput.remainingBalanceOwner, - disableOwner: registrationInput.disableOwner, + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, weight: weight }); } diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 7c8b93057..398127438 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -14,8 +14,7 @@ import { PoSValidatorInfo, PoSValidatorManagerSettings } from "./interfaces/IPoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "./ValidatorManager.sol"; -import {Validator, ValidatorStatus} from "./ACP99Manager.sol"; +import {Validator, ValidatorStatus, PChainOwner} from "./ACP99Manager.sol"; import {IRewardCalculator} from "./interfaces/IRewardCalculator.sol"; import {WarpMessage} from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/IWarpMessenger.sol"; @@ -455,7 +454,11 @@ abstract contract PoSValidatorManager is } function _initiateValidatorRegistration( - ValidatorRegistrationInput calldata registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount @@ -483,11 +486,11 @@ abstract contract PoSValidatorManager is uint64 weight = valueToWeight(lockedValue); bytes32 validationID = _initiateValidatorRegistration({ - nodeID: registrationInput.nodeID, - blsPublicKey: registrationInput.blsPublicKey, - registrationExpiry: registrationInput.registrationExpiry, - remainingBalanceOwner: registrationInput.remainingBalanceOwner, - disableOwner: registrationInput.disableOwner, + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, weight: weight }); diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 3d9e61328..9cead8ddf 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -46,17 +46,6 @@ struct ValidatorManagerSettings { uint8 maximumChurnPercentage; } -/** - * @dev Specifies a validator to register. - */ -struct ValidatorRegistrationInput { - bytes nodeID; - bytes blsPublicKey; - uint64 registrationExpiry; - PChainOwner remainingBalanceOwner; - PChainOwner disableOwner; -} - /** * @dev Implementation of the {ACP99Manager} abstract contract. * diff --git a/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol b/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol index b3b1a4095..df6d27982 100644 --- a/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol +++ b/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol @@ -5,8 +5,8 @@ pragma solidity 0.8.25; -import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {IPoSValidatorManager} from "./IPoSValidatorManager.sol"; +import {PChainOwner} from "../ACP99Manager.sol"; /** * Proof of Stake Validator Manager that stakes ERC20 tokens. @@ -14,13 +14,21 @@ import {IPoSValidatorManager} from "./IPoSValidatorManager.sol"; interface IERC20TokenStakingManager is IPoSValidatorManager { /** * @notice Begins the validator registration process. Locks the specified ERC20 tokens in the contract as the stake. - * @param registrationInput The inputs for a validator registration. + * @param nodeID The ID of the node to add to the L1. + * @param blsPublicKey The BLS public key of the validator. + * @param registrationExpiry The time after which this message is invalid. + * @param remainingBalanceOwner The remaining balance owner of the validator. + * @param disableOwner The disable owner of the validator. * @param delegationFeeBips The fee that delegators must pay to delegate to this validator. * @param minStakeDuration The minimum amount of time this validator must be staked for in seconds. * @param stakeAmount The amount of tokens to stake. */ function initiateValidatorRegistration( - ValidatorRegistrationInput calldata registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount diff --git a/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol b/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol index 2f6f6d380..24f38a718 100644 --- a/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol +++ b/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol @@ -5,8 +5,8 @@ pragma solidity 0.8.25; -import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {IPoSValidatorManager} from "./IPoSValidatorManager.sol"; +import {PChainOwner} from "../ACP99Manager.sol"; /** * Proof of Stake Validator Manager that stakes the blockchain's native tokens. @@ -14,12 +14,20 @@ import {IPoSValidatorManager} from "./IPoSValidatorManager.sol"; interface INativeTokenStakingManager is IPoSValidatorManager { /** * @notice Begins the validator registration process. Locks the provided native asset in the contract as the stake. - * @param registrationInput The inputs for a validator registration. + * @param nodeID The ID of the node to add to the L1. + * @param blsPublicKey The BLS public key of the validator. + * @param registrationExpiry The time after which this message is invalid. + * @param remainingBalanceOwner The remaining balance owner of the validator. + * @param disableOwner The disable owner of the validator. * @param delegationFeeBips The fee that delegators must pay to delegate to this validator. * @param minStakeDuration The minimum amount of time this validator must be staked for in seconds. */ function initiateValidatorRegistration( - ValidatorRegistrationInput calldata registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration ) external payable returns (bytes32 validationID); diff --git a/contracts/validator-manager/interfaces/IPoAValidatorManager.sol b/contracts/validator-manager/interfaces/IPoAValidatorManager.sol index 818edf346..b98f906a0 100644 --- a/contracts/validator-manager/interfaces/IPoAValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoAValidatorManager.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.25; -import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; +import {PChainOwner} from "../ACP99Manager.sol"; /** * @notice Interface for Proof of Authority Validator Manager contracts @@ -13,11 +13,19 @@ import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; interface IPoAValidatorManager { /** * @notice Begins the validator registration process, and sets the {weight} of the validator. - * @param registrationInput The inputs for a validator registration. + * @param nodeID The ID of the node to add to the L1. + * @param blsPublicKey The BLS public key of the validator. + * @param registrationExpiry The time after which this message is invalid. + * @param remainingBalanceOwner The remaining balance owner of the validator. + * @param disableOwner The disable owner of the validator. * @param weight The weight of the validator being registered. */ function initiateValidatorRegistration( - ValidatorRegistrationInput calldata registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint64 weight ) external returns (bytes32 validationID); diff --git a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol index 12977c56e..97126a058 100644 --- a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol @@ -9,7 +9,6 @@ import {PoSValidatorManagerTest} from "./PoSValidatorManagerTests.t.sol"; import {ERC20TokenStakingManager} from "../ERC20TokenStakingManager.sol"; import {PoSValidatorManager, PoSValidatorManagerSettings} from "../PoSValidatorManager.sol"; import {ExampleRewardCalculator} from "../ExampleRewardCalculator.sol"; -import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {ICMInitializable} from "../../utilities/ICMInitializable.sol"; import {ExampleERC20} from "@mocks/ExampleERC20.sol"; import {IERC20} from "@openzeppelin/contracts@5.0.2/token/ERC20/IERC20.sol"; @@ -17,7 +16,7 @@ import {IERC20Mintable} from "../interfaces/IERC20Mintable.sol"; import {SafeERC20} from "@openzeppelin/contracts@5.0.2/token/ERC20/utils/SafeERC20.sol"; import {Initializable} from "@openzeppelin/contracts@5.0.2/proxy/utils/Initializable.sol"; import {ValidatorManagerTest} from "./ValidatorManagerTests.t.sol"; -import {ACP99Manager} from "../ACP99Manager.sol"; +import {ACP99Manager, PChainOwner} from "../ACP99Manager.sol"; contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { using SafeERC20 for IERC20Mintable; @@ -140,13 +139,6 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { } function testInvalidValidatorMinStakeDuration() public { - ValidatorRegistrationInput memory input = ValidatorRegistrationInput({ - nodeID: DEFAULT_NODE_ID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - registrationExpiry: DEFAULT_EXPIRY, - remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, - disableOwner: DEFAULT_P_CHAIN_OWNER - }); uint256 stakeAmount = _weightToValue(DEFAULT_WEIGHT); vm.expectRevert( abi.encodeWithSelector( @@ -154,9 +146,16 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { DEFAULT_MINIMUM_STAKE_DURATION - 1 ) ); - app.initiateValidatorRegistration( - input, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION - 1, stakeAmount - ); + app.initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationExpiry: DEFAULT_EXPIRY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION - 1, + stakeAmount: stakeAmount + }); } function testERC20TokenStakingManagerStorageSlot() public view { @@ -167,26 +166,45 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { } function _initiateValidatorRegistration( - ValidatorRegistrationInput memory registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount ) internal virtual override returns (bytes32) { - return app.initiateValidatorRegistration( - registrationInput, delegationFeeBips, minStakeDuration, stakeAmount - ); + return app.initiateValidatorRegistration({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + delegationFeeBips: delegationFeeBips, + minStakeDuration: minStakeDuration, + stakeAmount: stakeAmount + }); } function _initiateValidatorRegistration( - ValidatorRegistrationInput memory input, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint64 weight ) internal virtual override returns (bytes32) { - return app.initiateValidatorRegistration( - input, - DEFAULT_DELEGATION_FEE_BIPS, - DEFAULT_MINIMUM_STAKE_DURATION, - _weightToValue(weight) - ); + return app.initiateValidatorRegistration({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION, + stakeAmount: _weightToValue(weight) + }); } function _initiateDelegatorRegistration( diff --git a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol index 69ba0db9c..b32dae9e8 100644 --- a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol @@ -9,14 +9,13 @@ import {Test} from "@forge-std/Test.sol"; import {PoSValidatorManagerTest} from "./PoSValidatorManagerTests.t.sol"; import {NativeTokenStakingManager} from "../NativeTokenStakingManager.sol"; import {PoSValidatorManager, PoSValidatorManagerSettings} from "../PoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {ExampleRewardCalculator} from "../ExampleRewardCalculator.sol"; import {ICMInitializable} from "../../utilities/ICMInitializable.sol"; import {INativeMinter} from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/INativeMinter.sol"; import {ValidatorManagerTest} from "./ValidatorManagerTests.t.sol"; import {Initializable} from "@openzeppelin/contracts@5.0.2/proxy/utils/Initializable.sol"; -import {ACP99Manager} from "../ACP99Manager.sol"; +import {ACP99Manager, PChainOwner} from "../ACP99Manager.sol"; contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { NativeTokenStakingManager public app; @@ -128,23 +127,43 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { // Helpers function _initiateValidatorRegistration( - ValidatorRegistrationInput memory registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount ) internal virtual override returns (bytes32) { - return app.initiateValidatorRegistration{value: stakeAmount}( - registrationInput, delegationFeeBips, minStakeDuration - ); + return app.initiateValidatorRegistration{value: stakeAmount}({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + delegationFeeBips: delegationFeeBips, + minStakeDuration: minStakeDuration + }); } function _initiateValidatorRegistration( - ValidatorRegistrationInput memory input, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint64 weight ) internal virtual override returns (bytes32) { - return app.initiateValidatorRegistration{value: _weightToValue(weight)}( - input, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION - ); + return app.initiateValidatorRegistration{value: _weightToValue(weight)}({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION + }); } function _initiateDelegatorRegistration( diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index 742ae5d90..23e77fd09 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -6,14 +6,13 @@ pragma solidity 0.8.25; import {PoAValidatorManager} from "../PoAValidatorManager.sol"; -import {ValidatorManagerSettings, ValidatorRegistrationInput} from "../ValidatorManager.sol"; +import {ValidatorManager, ValidatorManagerSettings} from "../ValidatorManager.sol"; import {ValidatorManagerTest} from "./ValidatorManagerTests.t.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; -import {ValidatorManager} from "../ValidatorManager.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable@5.0.2/access/OwnableUpgradeable.sol"; import {Initializable} from "@openzeppelin/contracts@5.0.2/proxy/utils/Initializable.sol"; -import {ACP99Manager} from "../ACP99Manager.sol"; +import {ACP99Manager, PChainOwner} from "../ACP99Manager.sol"; contract PoAValidatorManagerTest is ValidatorManagerTest { PoAValidatorManager public app; @@ -49,16 +48,14 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { OwnableUpgradeable.OwnableUnauthorizedAccount.selector, vm.addr(1) ) ); - _initiateValidatorRegistration( - ValidatorRegistrationInput({ - nodeID: DEFAULT_NODE_ID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - registrationExpiry: DEFAULT_EXPIRY, - remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, - disableOwner: DEFAULT_P_CHAIN_OWNER - }), - DEFAULT_WEIGHT - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationExpiry: DEFAULT_EXPIRY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + weight: DEFAULT_WEIGHT + }); } // This test applies to all ValidatorManagers, but we test it here to avoid @@ -71,23 +68,32 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, weight) ); - _initiateValidatorRegistration( - ValidatorRegistrationInput({ - nodeID: nodeID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, - disableOwner: DEFAULT_P_CHAIN_OWNER, - registrationExpiry: DEFAULT_EXPIRY - }), - weight - ); + _initiateValidatorRegistration({ + nodeID: nodeID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + registrationExpiry: DEFAULT_EXPIRY, + weight: weight + }); } function _initiateValidatorRegistration( - ValidatorRegistrationInput memory input, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint64 weight ) internal virtual override returns (bytes32) { - return app.initiateValidatorRegistration(input, weight); + return app.initiateValidatorRegistration({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + registrationExpiry: registrationExpiry, + weight: weight + }); } function _initiateValidatorRemoval( diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index e84f33da9..076c82460 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -11,13 +11,15 @@ import {PoSValidatorManager} from "../PoSValidatorManager.sol"; import { DelegatorStatus, PoSValidatorManagerSettings } from "../interfaces/IPoSValidatorManager.sol"; -import {ValidatorManager, ValidatorStatus} from "../ValidatorManager.sol"; -import {ValidatorManagerSettings, ValidatorRegistrationInput} from "../ValidatorManager.sol"; +import { + ValidatorManager, ValidatorStatus, ValidatorManagerSettings +} from "../ValidatorManager.sol"; import {ValidatorMessages} from "../ValidatorMessages.sol"; import { WarpMessage, IWarpMessenger } from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/IWarpMessenger.sol"; +import {PChainOwner} from "../ACP99Manager.sol"; abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint64 public constant DEFAULT_UPTIME = uint64(100); @@ -43,14 +45,6 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager public posValidatorManager; IRewardCalculator public rewardCalculator; - ValidatorRegistrationInput public defaultRegistrationInput = ValidatorRegistrationInput({ - nodeID: DEFAULT_NODE_ID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - registrationExpiry: DEFAULT_EXPIRY, - remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, - disableOwner: DEFAULT_P_CHAIN_OWNER - }); - event InitiatedDelegatorRegistration( bytes32 indexed delegationID, bytes32 indexed validationID, @@ -80,12 +74,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { DEFAULT_MINIMUM_DELEGATION_FEE_BIPS - 1 ) ); - _initiateValidatorRegistration( - defaultRegistrationInput, - DEFAULT_MINIMUM_DELEGATION_FEE_BIPS - 1, - DEFAULT_MINIMUM_STAKE_DURATION, - DEFAULT_MINIMUM_STAKE_AMOUNT - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationExpiry: DEFAULT_EXPIRY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + delegationFeeBips: DEFAULT_MINIMUM_DELEGATION_FEE_BIPS - 1, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION, + stakeAmount: DEFAULT_MINIMUM_STAKE_AMOUNT + }); } function testDelegationFeeBipsTooHigh() public { @@ -96,12 +94,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - _initiateValidatorRegistration( - defaultRegistrationInput, - delegationFeeBips, - DEFAULT_MINIMUM_STAKE_DURATION, - DEFAULT_MINIMUM_STAKE_AMOUNT - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationExpiry: DEFAULT_EXPIRY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + delegationFeeBips: delegationFeeBips, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION, + stakeAmount: DEFAULT_MINIMUM_STAKE_AMOUNT + }); } function testInvalidMinStakeDuration() public { @@ -111,12 +113,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { DEFAULT_MINIMUM_STAKE_DURATION - 1 ) ); - _initiateValidatorRegistration( - defaultRegistrationInput, - DEFAULT_DELEGATION_FEE_BIPS, - DEFAULT_MINIMUM_STAKE_DURATION - 1, - DEFAULT_MINIMUM_STAKE_AMOUNT - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationExpiry: DEFAULT_EXPIRY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION - 1, + stakeAmount: DEFAULT_MINIMUM_STAKE_AMOUNT + }); } function testStakeAmountTooLow() public { @@ -125,12 +131,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.InvalidStakeAmount.selector, DEFAULT_MINIMUM_STAKE_AMOUNT - 1 ) ); - _initiateValidatorRegistration( - defaultRegistrationInput, - DEFAULT_DELEGATION_FEE_BIPS, - DEFAULT_MINIMUM_STAKE_DURATION, - DEFAULT_MINIMUM_STAKE_AMOUNT - 1 - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationExpiry: DEFAULT_EXPIRY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION, + stakeAmount: DEFAULT_MINIMUM_STAKE_AMOUNT - 1 + }); } function testStakeAmountTooHigh() public { @@ -139,12 +149,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.InvalidStakeAmount.selector, DEFAULT_MAXIMUM_STAKE_AMOUNT + 1 ) ); - _initiateValidatorRegistration( - defaultRegistrationInput, - DEFAULT_DELEGATION_FEE_BIPS, - DEFAULT_MINIMUM_STAKE_DURATION, - DEFAULT_MAXIMUM_STAKE_AMOUNT + 1 - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationExpiry: DEFAULT_EXPIRY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION, + stakeAmount: DEFAULT_MAXIMUM_STAKE_AMOUNT + 1 + }); } function testInvalidInitializeEndTime() public { @@ -1925,7 +1939,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { } function _initiateValidatorRegistration( - ValidatorRegistrationInput memory registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index e2c69978e..d8aa5aaa3 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -8,7 +8,6 @@ pragma solidity 0.8.25; import {Test} from "@forge-std/Test.sol"; import {ValidatorManager} from "../ValidatorManager.sol"; import {ValidatorMessages} from "../ValidatorMessages.sol"; -import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import { WarpMessage, IWarpMessenger @@ -136,16 +135,14 @@ abstract contract ValidatorManagerTest is Test { vm.expectRevert( abi.encodeWithSelector(ValidatorManager.InvalidPChainOwnerThreshold.selector, 2, 1) ); - _initiateValidatorRegistration( - ValidatorRegistrationInput({ - nodeID: DEFAULT_NODE_ID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - remainingBalanceOwner: invalidPChainOwner1, - disableOwner: DEFAULT_P_CHAIN_OWNER, - registrationExpiry: DEFAULT_EXPIRY - }), - DEFAULT_WEIGHT - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + remainingBalanceOwner: invalidPChainOwner1, + disableOwner: DEFAULT_P_CHAIN_OWNER, + registrationExpiry: DEFAULT_EXPIRY, + weight: DEFAULT_WEIGHT + }); } function testInitializeValidatorRegistrationZeroPChainOwnerThreshold() public { @@ -157,16 +154,14 @@ abstract contract ValidatorManagerTest is Test { vm.expectRevert( abi.encodeWithSelector(ValidatorManager.InvalidPChainOwnerThreshold.selector, 0, 1) ); - _initiateValidatorRegistration( - ValidatorRegistrationInput({ - nodeID: DEFAULT_NODE_ID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - remainingBalanceOwner: invalidPChainOwner1, - disableOwner: DEFAULT_P_CHAIN_OWNER, - registrationExpiry: DEFAULT_EXPIRY - }), - DEFAULT_WEIGHT - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + remainingBalanceOwner: invalidPChainOwner1, + disableOwner: DEFAULT_P_CHAIN_OWNER, + registrationExpiry: DEFAULT_EXPIRY, + weight: DEFAULT_WEIGHT + }); } function testInitializeValidatorRegistrationPChainOwnerAddressesUnsorted() public { @@ -180,16 +175,14 @@ abstract contract ValidatorManagerTest is Test { vm.expectRevert( abi.encodeWithSelector(ValidatorManager.PChainOwnerAddressesNotSorted.selector) ); - _initiateValidatorRegistration( - ValidatorRegistrationInput({ - nodeID: DEFAULT_NODE_ID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - remainingBalanceOwner: invalidPChainOwner1, - disableOwner: DEFAULT_P_CHAIN_OWNER, - registrationExpiry: DEFAULT_EXPIRY - }), - DEFAULT_WEIGHT - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + remainingBalanceOwner: invalidPChainOwner1, + disableOwner: DEFAULT_P_CHAIN_OWNER, + registrationExpiry: DEFAULT_EXPIRY, + weight: DEFAULT_WEIGHT + }); } // The following tests call functions that are implemented in ValidatorManager, but access state that's @@ -354,16 +347,14 @@ abstract contract ValidatorManagerTest is Test { churnThreshold + _valueToWeight(DEFAULT_MINIMUM_STAKE_AMOUNT) ) ); - _initiateValidatorRegistration( - ValidatorRegistrationInput({ - nodeID: DEFAULT_NODE_ID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, - disableOwner: DEFAULT_P_CHAIN_OWNER, - registrationExpiry: DEFAULT_REGISTRATION_TIMESTAMP + 1 - }), - _valueToWeight(DEFAULT_MINIMUM_STAKE_AMOUNT) - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + registrationExpiry: DEFAULT_REGISTRATION_TIMESTAMP + 1, + weight: _valueToWeight(DEFAULT_MINIMUM_STAKE_AMOUNT) + }); } function testCumulativeChurnRegistrationAndEndValidation() public { @@ -455,16 +446,14 @@ abstract contract ValidatorManagerTest is Test { validationID, nodeID, bytes32(0), registrationExpiry, weight ); - _initiateValidatorRegistration( - ValidatorRegistrationInput({ - nodeID: nodeID, - blsPublicKey: blsPublicKey, - remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, - disableOwner: DEFAULT_P_CHAIN_OWNER, - registrationExpiry: registrationExpiry - }), - weight - ); + _initiateValidatorRegistration({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + registrationExpiry: registrationExpiry, + weight: weight + }); } function _registerValidator( @@ -613,7 +602,11 @@ abstract contract ValidatorManagerTest is Test { } function _initiateValidatorRegistration( - ValidatorRegistrationInput memory input, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint64 weight ) internal virtual returns (bytes32); From 1c90d162cca0b2b80688e3cc3639040330d5ca49 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 17:26:55 -0600 Subject: [PATCH 5/6] update & integrate bindings --- .../ERC20TokenStakingManager.go | 871 +++++++++--------- .../NativeTokenStakingManager.go | 871 +++++++++--------- .../PoAValidatorManager.go | 85 +- .../IPoSValidatorManager.go | 494 +++++----- .../validator-manager/erc20_token_staking.go | 8 +- .../validator-manager/native_token_staking.go | 8 +- tests/flows/validator-manager/poa_to_pos.go | 12 +- tests/utils/validator_manager.go | 57 +- 8 files changed, 1190 insertions(+), 1216 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index bf80ea3f3..271e88e5c 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -93,19 +93,10 @@ type ValidatorMessagesValidationPeriod struct { Weight uint64 } -// ValidatorRegistrationInput is an auto generated low-level Go binding around an user-defined struct. -type ValidatorRegistrationInput struct { - NodeID []byte - BlsPublicKey []byte - RegistrationExpiry uint64 - RemainingBalanceOwner PChainOwner - DisableOwner PChainOwner -} - // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"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\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615e76380380615e7683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d298061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614cce565b6105f4565b005b610277610287366004614d09565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614cce565b610898565b6102776102cc366004614d20565b6108a4565b6102776102df366004614d6e565b610e12565b6102f76102f2366004614d09565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614da3565b610eda565b61027761034c366004614cce565b610eed565b61036461035f366004614e16565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614da3565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d6e565b610f49565b6103646103cb366004614e7d565b61119a565b6103645f81565b6102776103e5366004614cce565b6111ba565b5f80516020615cb4833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614da3565b6111c6565b61027761043c366004614d6e565b6111d2565b610294603081565b610277610457366004614e98565b6113c5565b61027761046a366004614d09565b611476565b61036461047d366004614ec6565b61150a565b610277610490366004614da3565b6115e3565b6103646104a3366004614edf565b6115ef565b6102776104b6366004614eff565b61161b565b6103646104c9366004614ec6565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d09565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d09565b611b70565b610294601481565b61057361056e366004614ec6565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d09565b611e0f565b6040516102a29190614fa7565b6102f76202a30081565b6103645f80516020615cb483398151915281565b6102776105dc366004614e98565b611f5e565b6103646105ef36600461505d565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f32565b600581111561065957610659614f32565b815260200160018201805461066d906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150c8565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f32565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615209565b6040518263ffffffff1660e01b8152600401610852919061523a565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610892919061524c565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061524c565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615263565b6001600160a01b0316146109ba576109956060840160408501615263565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c8606085018561527e565b905090505f805b828163ffffffff161015610c08575f6109eb606088018861527e565b8363ffffffff16818110610a0157610a016152c3565b9050602002810190610a1391906152d7565b610a1c90615342565b80516040519192505f916006880191610a34916153bd565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f919060040161523a565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153bd565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb919061524c565b90508086600601835f0151604051610b0391906153bd565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615412565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154e1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615501565b60405180910390a2505080610c019061552b565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff168361554d565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123aa565b604001516040518263ffffffff1660e01b8152600401610cc2919061523a565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d01919061524c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156a3565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615209565b90505f600282604051610d8f91906153bd565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd919061524c565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c614f32565b14610e7c578060405163170cc93360e21b815260040161078f9190615100565b61089283836124e9565b5f80610e90612788565b60030154610e9e9084615737565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127ac565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f80516020615cd483398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c77565b5f610f52612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f32565b6003811115610f9c57610f9c614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b905060018351600381111561102957611029614f32565b1461104a578251604051633b0d540d60e21b815261078f9190600401615756565b60048151600581111561105f5761105f614f32565b036110755761106d86612ca3565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612788565b60030154610ed4906001600160401b038416615770565b6106008383835f612c77565b610ee6848484846127ac565b6111da6129f3565b5f6111e3612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c614f32565b600381111561122d5761122d614f32565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a6614f32565b146112c7578051604051633b0d540d60e21b815261078f9190600401615756565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f8614f32565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca3565b5050506113c160015f80516020615cd483398151915255565b5050565b5f6113ce612788565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612788565b90505f61148b83611e0f565b51905060048160058111156114a2576114a2614f32565b146114c2578060405163170cc93360e21b815260040161078f9190615100565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e74565b5f6115136129f3565b5f61151c612788565b90505f8061152985612e9e565b91509150611536826124c0565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b614f32565b036115aa576115aa8185612e74565b6115c0826115bb856040015161119a565b613253565b509193505050505b6115de60015f80516020615cd483398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613276565b9050610ed460015f80516020615cd483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134bb565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123aa565b604001516040518263ffffffff1660e01b815260040161174b919061523a565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615787565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c9906150c8565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561181457611814614f32565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f828152600484016020526040812061185f91614c1a565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615823565b60405180910390a2509392505050565b5f6118fe612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561193757611937614f32565b600381111561194857611948614f32565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c1614f32565b141580156119e257506003815160038111156119df576119df614f32565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615756565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af29190810190615209565b6040518263ffffffff1660e01b8152600401611b0e919061523a565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061524c565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b97906150c8565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be2614f32565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615835565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610600919061524c565b5f805f611c98846123aa565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd8919061523a565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615847565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17614c51565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a614f32565b6005811115611e6b57611e6b614f32565b8152602001600182018054611e7f906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab906150c8565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612788565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615887565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612788565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c0614f32565b60038111156120d1576120d1614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e614f32565b1461217f578251604051633b0d540d60e21b815261078f9190600401615756565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b0316906154e1565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561223057612230614f32565b036123525760028401546080840151612252916001600160401b0316906154e1565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124e9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615896565b6134d5565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561231484888c61369f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561236757612367614f32565b0361238e5761237783878b61369f565b5061238189612ca3565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615100565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243591908101906158b6565b915091508061245757604051636b2f19e960e01b815260040160405180910390fd5b81511561247d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124b9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124ca612788565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261255b91908101906158b6565b915091508061257d57604051636b2f19e960e01b815260040160405180910390fd5b5f612586612788565b60058101548451919250146125b4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561262c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612669919061523a565b6040805180830381865af4158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190615946565b915091508188146126ce5760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b03908116908216111561275f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261277d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127b6612788565b90506127c18661388d565b5f6127cb87611e0f565b90506127d6876124c0565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b0316906154e1565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124e9565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061524c565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615969565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cd4833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612788565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613b78565b90505f612b0682610e86565b90505f612bcd612b168a8061597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c61597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01614e7d565b612ba860608e018e6159be565b612bb1906159d2565b612bbe60808f018f6159be565b612bc7906159d2565b87613b9b565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cd483398151915255565b612c83848484846127ac565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cac612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce557612ce5614f32565b6003811115612cf657612cf6614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6a613f54565b8260800151612d7991906154e1565b6001600160401b0316421015612dad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e08575060208201515b5f80612e15838886613f6f565b91509150612e2e85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7d612788565b5f838152600a8201602052604081208054919055909150610892848261401c565b5f612ea7614c51565b5f612eb0612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed7886123aa565b604001516040518263ffffffff1660e01b8152600401612ef7919061523a565b6040805180830381865af4158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190615787565b915091508015612f5c57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9457612f94614f32565b6005811115612fa557612fa5614f32565b8152602001600182018054612fb9906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe5906150c8565b80156130305780601f1061300757610100808354040283529160200191613030565b820191905f5260205f20905b81548152906001019060200180831161301357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a8576130a8614f32565b141580156130c957506001815160058111156130c6576130c6614f32565b14155b156130ea57805160405163170cc93360e21b815261078f9190600401615100565b6003815160058111156130ff576130ff614f32565b0361310d5760048152613112565b600581525b83600601816020015160405161312891906153bd565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316b5761316b614f32565b0217905550602082015160018201906131849082615412565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615cb4833981519152546113c1906001600160a01b03168383614092565b5f80613280612788565b90505f61328f6102f285613b78565b90505f61329b87611e0f565b90506132a6876124c0565b6132c6576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132db576132db614f32565b146132fc57805160405163170cc93360e21b815261078f9190600401615100565b5f828260a0015161330d91906154e1565b905083600201600a9054906101000a90046001600160401b03168260400151613336919061554d565b6001600160401b0316816001600160401b0316111561337357604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f8061337f8a846134d5565b915091505f8a836040516020016133ad92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134c36140f1565b6134cc8261413c565b6113c1816141b9565b5f805f6134e0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135108582614221565b5f61351a8761448e565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135e59190810190615209565b6040518263ffffffff1660e01b8152600401613601919061523a565b6020604051808303815f875af115801561361d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613641919061524c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136a9612788565b90505f6136b98660400151611e0f565b90505f6003825160058111156136d1576136d1614f32565b14806136ef57506004825160058111156136ed576136ed614f32565b145b156136ff575060e081015161373c565b60028251600581111561371457613714614f32565b0361372057504261373c565b815160405163170cc93360e21b815261078f9190600401615100565b86608001516001600160401b0316816001600160401b031611613764575f93505050506134b4565b600483015460608801515f916001600160a01b031690634f22429f906137899061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561380a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382e919061524c565b90506001600160a01b03871661384657876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613896612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138d0576138d0614f32565b60058111156138e1576138e1614f32565b81526020016001820180546138f5906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613921906150c8565b801561396c5780601f106139435761010080835404028352916020019161396c565b820191905f5260205f20905b81548152906001019060200180831161394f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139e4576139e4614f32565b14613a17575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a5c57613a5c614f32565b021790555060208201516001820190613a759082615412565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b1584826134d5565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b6a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615cb4833981519152546001600160a01b0316906144f7565b5f613ba4612059565b6007015460ff16613bc857604051637fab81e560e01b815260040160405180910390fd5b5f613bd1612059565b905042866001600160401b0316111580613c005750613bf36202a30042615969565b866001600160401b031610155b15613c2957604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c4c90600160401b90048216858316615969565b1115613c7657604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c7f85614503565b613c8884614503565b8651603014613caf5786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613cd25787604051633e08a12560e11b815260040161078f919061523a565b5f801b8160060189604051613ce791906153bd565b90815260200160405180910390205414613d16578760405163a41f772f60e01b815260040161078f919061523a565b613d20835f614221565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613da09190615aff565b5f60405180830381865af4158015613dba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613de19190810190615bb6565b5f82815260048601602052604090209193509150613dff8282615412565b5081836006018b604051613e1391906153bd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e4f90859060040161523a565b6020604051808303815f875af1158015613e6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8f919061524c565b5f8481526005860160205260409020805460ff19166001908117825591925001613eb98c82615412565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f3d908e9085908e908c90615bf9565b60405180910390a250909998505050505050505050565b5f613f5d612059565b600101546001600160401b0316919050565b5f805f613f7a612788565b5f8681526008820160205260408120805490829055919250908190801561400e575f87815260068501602052604090205461271090613fc490600160a01b900461ffff1683615770565b613fce9190615737565b91508184600a015f8981526020019081526020015f205f828254613ff29190615969565b9091555061400290508282615c31565b925061400e898461401c565b509097909650945050505050565b5f5f80516020615cb483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614077575f80fd5b505af1158015614089573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614622565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413a57604051631afcd79f60e31b815260040160405180910390fd5b565b6141446140f1565b61414d81614683565b61415561469c565b6141b66060820135608083013561417260c0850160a08601614e7d565b61418260e0860160c08701615c44565b614193610100870160e08801615c5d565b6101008701356141ab61014089016101208a01615263565b8861014001356146ac565b50565b6141c16140f1565b5f80516020615cb48339815191526001600160a01b03821661420157604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61422a612059565b90505f826001600160401b0316846001600160401b03161115614258576142518385615896565b9050614265565b6142628484615896565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142d25750600184015481516142ce916001600160401b031690615969565b8210155b156142fa576001600160401b0380841660608301528282526040820151166020820152614319565b828160600181815161430c91906154e1565b6001600160401b03169052505b606081015161432990606461554d565b602082015160018601546001600160401b0392909216916143549190600160401b900460ff1661554d565b6001600160401b0316101561438d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b858160400181815161439f91906154e1565b6001600160401b03169052506040810180518691906143bf908390615896565b6001600160401b0316905250600184015460408201516064916143ed91600160401b90910460ff169061554d565b6001600160401b03161015614426576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614498612059565b5f84815260058201602052604090206002018054919250906008906144cc90600160401b90046001600160401b0316615c7d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134b483338461486e565b805163ffffffff1615801561451c575060208101515115155b1561455057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561459357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c15760208201516145b3600183615c31565b815181106145c3576145c36152c3565b60200260200101516001600160a01b0316826020015182815181106145ea576145ea6152c3565b60200260200101516001600160a01b0316101561461a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614596565b5f6146366001600160a01b038416836149d1565b905080515f1415801561465a5750808060200190518101906146589190615c98565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b61468b6140f1565b6146936149de565b6141b6816149e6565b6146a46140f1565b61413a614aca565b6146b46140f1565b5f6146bd612788565b905061ffff861615806146d5575061271061ffff8716115b156146f957604051635f12e6c360e11b815261ffff8716600482015260240161078f565b8789111561471d5760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147305750600a60ff8616115b156147535760405163170db35960e31b815260ff8616600482015260240161078f565b61475b613f54565b6001600160401b0316876001600160401b03161015614797576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147b75760405163a733007160e01b815260040160405180910390fd5b816147d857604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148d8919061524c565b90506148ef6001600160a01b038616853086614ad2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614933573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614957919061524c565b90508181116149bd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149c78282615c31565b9695505050505050565b60606134b483835f614b0b565b61413a6140f1565b6149ee6140f1565b5f6149f7612059565b8235815590506014614a0f6060840160408501615c5d565b60ff161180614a2e5750614a296060830160408401615c5d565b60ff16155b15614a6257614a436060830160408401615c5d565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a726060830160408401615c5d565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa36040830160208401614e7d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c646140f1565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140bf565b606081471015614b305760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b4b91906153bd565b5f6040518083038185875af1925050503d805f8114614b85576040519150601f19603f3d011682016040523d82523d5f602084013e614b8a565b606091505b50915091506149c7868383606082614baa57614ba582614bf1565b6134b4565b8151158015614bc157506001600160a01b0384163b155b15614bea57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134b4565b805115614c015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c26906150c8565b5f825580601f10614c35575050565b601f0160209004905f5260205f20908101906141b69190614c96565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614caa575f8155600101614c97565b5090565b80151581146141b6575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215614ce0575f80fd5b833592506020840135614cf281614cae565b9150614d0060408501614cbb565b90509250925092565b5f60208284031215614d19575f80fd5b5035919050565b5f8060408385031215614d31575f80fd5b82356001600160401b03811115614d46575f80fd5b830160808186031215614d57575f80fd5b9150614d6560208401614cbb565b90509250929050565b5f8060408385031215614d7f575f80fd5b82359150614d6560208401614cbb565b6001600160a01b03811681146141b6575f80fd5b5f805f8060808587031215614db6575f80fd5b843593506020850135614dc881614cae565b9250614dd660408601614cbb565b91506060850135614de681614d8f565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b03811681146141b6575f80fd5b5f805f8060808587031215614e29575f80fd5b84356001600160401b03811115614e3e575f80fd5b850160a08188031215614e4f575f80fd5b9350614e5d60208601614df1565b92506040850135614e6d81614e02565b9396929550929360600135925050565b5f60208284031215614e8d575f80fd5b81356134b481614e02565b5f8060408385031215614ea9575f80fd5b823591506020830135614ebb81614d8f565b809150509250929050565b5f60208284031215614ed6575f80fd5b6134b482614cbb565b5f8060408385031215614ef0575f80fd5b50508035926020909101359150565b5f80828403610180811215614f12575f80fd5b61016080821215614f21575f80fd5b8493508301359050614ebb81614d8f565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5657614f56614f32565b9052565b5f5b83811015614f74578181015183820152602001614f5c565b50505f910152565b5f8151808452614f93816020860160208601614f5a565b601f01601f19169290920160200192915050565b60208152614fb9602082018351614f46565b5f6020830151610100806040850152614fd6610120850183614f7c565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161501560a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f806020838503121561506e575f80fd5b82356001600160401b0380821115615084575f80fd5b818501915085601f830112615097575f80fd5b8135818111156150a5575f80fd5b8660208285010111156150b6575f80fd5b60209290920196919550909350505050565b600181811c908216806150dc57607f821691505b6020821081036150fa57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f46565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151445761514461510e565b60405290565b604080519081016001600160401b03811182821017156151445761514461510e565b604051601f8201601f191681016001600160401b03811182821017156151945761519461510e565b604052919050565b5f6001600160401b038211156151b4576151b461510e565b50601f01601f191660200190565b5f82601f8301126151d1575f80fd5b81516151e46151df8261519c565b61516c565b8181528460208386010111156151f8575f80fd5b610f26826020830160208701614f5a565b5f60208284031215615219575f80fd5b81516001600160401b0381111561522e575f80fd5b610f26848285016151c2565b602081525f6134b46020830184614f7c565b5f6020828403121561525c575f80fd5b5051919050565b5f60208284031215615273575f80fd5b81356134b481614d8f565b5f808335601e19843603018112615293575f80fd5b8301803591506001600160401b038211156152ac575f80fd5b6020019150600581901b3603821315613698575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152eb575f80fd5b9190910192915050565b5f82601f830112615304575f80fd5b81356153126151df8261519c565b818152846020838601011115615326575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615352575f80fd5b61535a615122565b82356001600160401b0380821115615370575f80fd5b61537c368387016152f5565b83526020850135915080821115615391575f80fd5b5061539e368286016152f5565b60208301525060408301356153b281614e02565b604082015292915050565b5f82516152eb818460208701614f5a565b601f82111561060057805f5260205f20601f840160051c810160208510156153f35750805b601f840160051c820191505b81811015610ee6575f81556001016153ff565b81516001600160401b0381111561542b5761542b61510e565b61543f8161543984546150c8565b846153ce565b602080601f831160018114615472575f841561545b5750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154a057888601518255948401946001909101908401615481565b50858210156154bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124b9576124b96154cd565b604081525f6155136040830185614f7c565b90506001600160401b03831660208301529392505050565b5f63ffffffff808316818103615543576155436154cd565b6001019392505050565b6001600160401b03818116838216028082169190828114615570576155706154cd565b505092915050565b5f808335601e1984360301811261558d575f80fd5b83016020810192503590506001600160401b038111156155ab575f80fd5b803603821315613698575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569657848303601f19018952813536889003605e1901811261561d575f80fd5b8701606061562b8280615578565b82875261563b83880182846155b9565b9250505061564b86830183615578565b8683038888015261565d8382846155b9565b92505050604080830135925061567283614e02565b6001600160401b0392909216949091019390935297830197908301906001016155f8565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c781614d8f565b6001600160a01b031660608381019190915283013536849003601e190181126156ee575f80fd5b83016020810190356001600160401b03811115615709575f80fd5b8060051b360382131561571a575f80fd5b60808085015261572e60a0850182846155e1565b95945050505050565b5f8261575157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576a5761576a614f32565b91905290565b8082028115828204841417610ed457610ed46154cd565b5f8060408385031215615798575f80fd5b825191506020830151614ebb81614cae565b5f81546157b6816150c8565b8085526020600183811680156157d357600181146157ed57615818565b60ff1985168884015283151560051b880183019550615818565b865f52825f205f5b858110156158105781548a82018601529083019084016157f5565b890184019650505b505050505092915050565b604081525f61551360408301856157aa565b602081525f6134b460208301846157aa565b5f805f60608486031215615859575f80fd5b83519250602084015161586b81614e02565b604085015190925061587c81614e02565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124b9576124b96154cd565b5f80604083850312156158c7575f80fd5b82516001600160401b03808211156158dd575f80fd5b90840190606082870312156158f0575f80fd5b6158f8615122565b82518152602083015161590a81614d8f565b6020820152604083015182811115615920575f80fd5b61592c888286016151c2565b6040830152508094505050506020830151614ebb81614cae565b5f8060408385031215615957575f80fd5b825191506020830151614ebb81614e02565b80820180821115610ed457610ed46154cd565b5f808335601e19843603018112615991575f80fd5b8301803591506001600160401b038211156159aa575f80fd5b602001915036819003821315613698575f80fd5b5f8235603e198336030181126152eb575f80fd5b5f604082360312156159e2575f80fd5b6159ea61514a565b6159f383614cbb565b81526020808401356001600160401b0380821115615a0f575f80fd5b9085019036601f830112615a21575f80fd5b813581811115615a3357615a3361510e565b8060051b9150615a4484830161516c565b8181529183018401918481019036841115615a5d575f80fd5b938501935b83851015615a875784359250615a7783614d8f565b8282529385019390850190615a62565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af45784516001600160a01b03168252938301936001929092019190830190615acb565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b25610100840182614f7c565b90506040840151601f1980858403016060860152615b438383614f7c565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b738383615a99565b925060a08601519150808584030160c086015250615b918282615a99565b91505060c0840151615bae60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc7575f80fd5b8251915060208301516001600160401b03811115615be3575f80fd5b615bef858286016151c2565b9150509250929050565b608081525f615c0b6080830187614f7c565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154cd565b5f60208284031215615c54575f80fd5b6134b482614df1565b5f60208284031215615c6d575f80fd5b813560ff811681146134b4575f80fd5b5f6001600160401b03808316818103615543576155436154cd565b5f60208284031215615ca8575f80fd5b81516134b481614cae56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220eb3ee0daa57d2aebbba17cb5368b3b61076fec41c0f031fbf4fa7f5c0eb64b4e64736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"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\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initiateDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initiateValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615dfb380380615dfb83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615cae8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638af5499e1161014b578063bb0b1938116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063bb0b193814610503578063bc5fbfec1461050b578063bee0a03f14610532578063c974d1b614610545578063cc71bbba1461054d575f80fd5b8063a3a65e4811610110578063a3a65e4814610495578063a9778a7a14610369578063aac80c39146104a8578063afb98096146104bb578063b2c1712e146104e2578063b771b3bc146104f5575f80fd5b80638af5499e146104365780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639e478eea14610482575f80fd5b80632e2194d8116101e257806360ad7784116101a757806360ad7784146103bd57806362065856146103d0578063732214f8146103e3578063739b4eff146103ea578063785e9e86146103fd5780638280a25a1461042e575f80fd5b80632e2194d81461033e57806335455ded146103695780634b396bcc146103855780635dc1f5351461039857806360305d62146103a0575f80fd5b806320d91b7a1161022857806320d91b7a146102df578063245dafcb146102f257806325e1c7761461030557806327bf60cd146103185780632aa566381461032b575f80fd5b80630322ed98146102645780631340964514610279578063151d30d11461028c57806316679564146102ab5780631af1872b146102be575b5f80fd5b610277610272366004614c04565b6105f4565b005b610277610287366004614c2e565b610887565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614c65565b610a7a565b6102d16102cc366004614eb3565b610a86565b6040519081526020016102a2565b6102776102ed366004614f92565b610ac3565b610277610300366004614c04565b611031565b610277610313366004614c2e565b611291565b610277610326366004614c65565b611305565b610277610339366004614c65565b611311565b61035161034c366004614c04565b611322565b6040516001600160401b0390911681526020016102a2565b61037261271081565b60405161ffff90911681526020016102a2565b610277610393366004614fd7565b611376565b6102d1611382565b6103a8601481565b60405163ffffffff90911681526020016102a2565b6102776103cb366004614c2e565b611391565b6102d16103de366004615025565b6115e2565b6102d15f81565b6102d16103f8366004615040565b611602565b5f80516020615c39833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610294603081565b610277610444366004614fd7565b61162e565b610277610457366004615060565b61163a565b61027761046a366004614c04565b6116eb565b6102d161047d36600461508e565b61177f565b6102776104903660046150a7565b611858565b6102d16104a336600461508e565b611937565b6102776104b6366004614fd7565b611b32565b6102d17f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6102776104f0366004614c65565b611b3e565b6104166005600160991b0181565b610351611b4a565b6102d17fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610540366004614c04565b611b6c565b610294601481565b61027761055b366004614fd7565b611c88565b61057361056e36600461508e565b611c94565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614c04565b611e17565b6040516102a2919061514f565b6103516202a30081565b6102d15f80516020615c3983398151915281565b6102776105dc366004615060565b611f66565b6102d16105ef366004615205565b611ffd565b5f6105fd612035565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115610637576106376150da565b6005811115610648576106486150da565b815260200160018201805461065c90615270565b80601f016020809104026020016040519081016040528092919081815260200182805461068890615270565b80156106d35780601f106106aa576101008083540402835291602001916106d3565b820191905f5260205f20905b8154815290600101906020018083116106b657829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561074b5761074b6150da565b14610787575f8381526005830160205260409081902054905163170cc93360e21b815261077e9160ff16906004016152a8565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156107fe573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261082591908101906152f8565b6040518263ffffffff1660e01b81526004016108419190615329565b6020604051808303815f875af115801561085d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610881919061533b565b50505050565b61088f612059565b5f610898612090565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156108d1576108d16150da565b60038111156108e2576108e26150da565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561095b5761095b6150da565b1461097c578051604051633b0d540d60e21b815261077e9190600401615352565b5f61098a8260400151611e17565b9050600461099b8360400151611e17565b5160058111156109ad576109ad6150da565b141580156109d457508160c001516001600160401b031681608001516001600160401b0316105b15610a54575f806109e486611c94565b9150915081846040015114610a0f5760405163089938b360e11b81526004810183905260240161077e565b806001600160401b03168460c001516001600160401b03161115610a5157604051632e19bc2d60e11b81526001600160401b038216600482015260240161077e565b50505b610a5d856120b4565b505050610a7660015f80516020615c5983398151915255565b5050565b6108818383835f612298565b5f610a8f612059565b610a9f89898989898989896124df565b9050610ab760015f80516020615c5983398151915255565b98975050505050505050565b5f610acc612035565b600781015490915060ff1615610af557604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5c919061533b565b836020013514610b85576040516372b0a7e760e11b81526020840135600482015260240161077e565b30610b96606085016040860161536c565b6001600160a01b031614610bd957610bb4606084016040850161536c565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161077e565b5f610be76060850185615387565b905090505f805b828163ffffffff161015610e27575f610c0a6060880188615387565b8363ffffffff16818110610c2057610c206153cc565b9050602002810190610c3291906153e0565b610c3b906153fe565b80516040519192505f916006880191610c5391615479565b90815260200160405180910390205414610c8357805160405163a41f772f60e01b815261077e9190600401615329565b5f6002885f013584604051602001610cb292919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610ccc91615479565b602060405180830381855afa158015610ce7573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d0a919061533b565b90508086600601835f0151604051610d229190615479565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610d6290826154ce565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610dd1908561559d565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e0c9291906155bd565b60405180910390a2505080610e20906155e7565b9050610bee565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610e6a910460ff1683615609565b6001600160401b03161015610e9d57604051633e1a785160e01b81526001600160401b038216600482015260240161077e565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ec187612667565b604001516040518263ffffffff1660e01b8152600401610ee19190615329565b602060405180830381865af4158015610efc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f20919061533b565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f5a919061575f565b5f60405180830381865af4158015610f74573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f9b91908101906152f8565b90505f600282604051610fae9190615479565b602060405180830381855afa158015610fc9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fec919061533b565b90508281146110185760405163baaea89d60e01b8152600481018290526024810184905260440161077e565b5050506007909201805460ff1916600117905550505050565b5f61103a612090565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611073576110736150da565b6003811115611084576110846150da565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156110fd576110fd6150da565b1415801561111e575060038151600381111561111b5761111b6150da565b14155b1561113f578051604051633b0d540d60e21b815261077e9190600401615352565b5f61114d8260400151611e17565b905080606001516001600160401b03165f0361117f576040516339b894f960e21b81526004810185905260240161077e565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f936111ed93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611207573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261122e91908101906152f8565b6040518263ffffffff1660e01b815260040161124a9190615329565b6020604051808303815f875af1158015611266573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128a919061533b565b5050505050565b61129a8261277d565b6112ba576040516330efa98b60e01b81526004810183905260240161077e565b5f6112c483611e17565b51905060028160058111156112db576112db6150da565b146112fb578060405163170cc93360e21b815260040161077e91906152a8565b61088183836127a6565b6108818383835f612a45565b61131d8383835f612d72565b505050565b5f8061132c612090565b6003015461133a90846157f3565b905080158061134f57506001600160401b0381115b156113705760405163222d164360e21b81526004810184905260240161077e565b92915050565b61128a84848484612298565b5f61138b612035565b54919050565b5f61139a612090565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156113d3576113d36150da565b60038111156113e4576113e46150da565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61145a82611e17565b9050600183516003811115611471576114716150da565b14611492578251604051633b0d540d60e21b815261077e9190600401615352565b6004815160058111156114a7576114a76150da565b036114bd576114b5866120b4565b505050505050565b8260a001516001600160401b031681608001516001600160401b0316101561155b575f806114ea87611c94565b9150915081841461151657846040015160405163089938b360e11b815260040161077e91815260200190565b8460a001516001600160401b0316816001600160401b0316101561155857604051632e19bc2d60e11b81526001600160401b038216600482015260240161077e565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa910160405180910390a3505050505050565b5f6115eb612090565b60030154611370906001600160401b038416615812565b5f61160b612059565b611616833384612d9e565b905061137060015f80516020615c5983398151915255565b61088184848484612d72565b5f611643612090565b90506001600160a01b0382166116775760405163caa903f960e01b81526001600160a01b038316600482015260240161077e565b5f8381526006820160205260409020546001600160a01b031633146116bd57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161077e565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116f4612090565b90505f61170083611e17565b5190506004816005811115611717576117176150da565b14611737578060405163170cc93360e21b815260040161077e91906152a8565b5f8381526006830160205260409020546001600160a01b0316331461175c5733611698565b5f83815260068301602052604090205461131d906001600160a01b031684612fe3565b5f611788612059565b5f611791612090565b90505f8061179e8561300d565b915091506117ab8261277d565b6117b95750915061183d9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117fb5750805b600483516005811115611810576118106150da565b0361181f5761181f8185612fe3565b6118358261183085604001516115e2565b6133c2565b509193505050505b61185360015f80516020615c5983398151915255565b919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806118a1575080546001600160401b03808416911610155b156118bf5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556118ea84846133e5565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611941612035565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61196887612667565b604001516040518263ffffffff1660e01b81526004016119889190615329565b6040805180830381865af41580156119a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c69190615829565b91509150806119ec57604051632d07135360e01b8152811515600482015260240161077e565b5f82815260048401602052604090208054611a0690615270565b90505f03611a2a5760405163089938b360e11b81526004810183905260240161077e565b60015f838152600580860160205260409091205460ff1690811115611a5157611a516150da565b14611a84575f8281526005840160205260409081902054905163170cc93360e21b815261077e9160ff16906004016152a8565b5f8281526004840160205260408120611a9c91614b70565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611b2293600190910192600160c01b90920416906158c5565b60405180910390a2509392505050565b61128a84848484612a45565b61131d8383835f6133ff565b5f611b53612035565b60030154600160401b90046001600160401b0316919050565b5f611b75612035565b5f8381526004820160205260409020805491925090611b9390615270565b90505f03611bb75760405163089938b360e11b81526004810183905260240161077e565b60015f838152600580840160205260409091205460ff1690811115611bde57611bde6150da565b14611c11575f8281526005820160205260409081902054905163170cc93360e21b815261077e9160ff16906004016152a8565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4892016158d7565b6020604051808303815f875af1158015611c64573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131d919061533b565b610881848484846133ff565b5f805f611ca084612667565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611ce09190615329565b606060405180830381865af4158015611cfb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d1f91906158e9565b9250925092505f611d2e612035565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d8257604051632e19bc2d60e11b81526001600160401b038416600482015260240161077e565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611e0290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e1f614ba7565b5f611e28612035565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e6257611e626150da565b6005811115611e7357611e736150da565b8152602001600182018054611e8790615270565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb390615270565b8015611efe5780601f10611ed557610100808354040283529160200191611efe565b820191905f5260205f20905b815481529060010190602001808311611ee157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f985760405163caa903f960e01b81526001600160a01b038216600482015260240161077e565b5f611fa1612090565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fcf5733611698565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80612007612035565b905080600601848460405161201d929190615929565b90815260200160405180910390205491505092915050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80516020615c5983398151915280546001190161208a57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f6120bd612090565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120f6576120f66150da565b6003811115612107576121076150da565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015281015190915061217b61342b565b826080015161218a919061559d565b6001600160401b03164210156121be5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161077e565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612219575060208201515b5f80612226838886613446565b9150915061223f856020015161183087606001516115e2565b6040805183815260208101839052859189917f5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e910160405180910390a350505050505050565b60015f80516020615c5983398151915255565b5f806122a2612090565b90506122ad866134f3565b5f6122b787611e17565b90506122c28761277d565b6122d1576001925050506124d7565b5f8781526006830160205260409020546001600160a01b031633146122f65733611698565b5f87815260068301602052604090205460c082015161232591600160b01b90046001600160401b03169061559d565b6001600160401b03168160e001516001600160401b0316101561236c5760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161077e565b5f86156123845761237d88876127a6565b90506123a2565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906123c7906115e2565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612431573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612455919061533b565b90506001600160a01b038616612481575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906124a0908490615938565b90915550505f898152600b94909401602052604090932080546001600160a01b0319166001600160a01b0387161790555050151590505b949350505050565b5f806124e9612090565b600281015490915061ffff600160401b90910481169086161080612512575061271061ffff8616115b1561253657604051635f12e6c360e11b815261ffff8616600482015260240161077e565b60028101546001600160401b039081169085161015612572576040516202a06d60e11b81526001600160401b038516600482015260240161077e565b80548310806125845750806001015483115b156125a55760405163222d164360e21b81526004810184905260240161077e565b5f6125af846137de565b90505f6125bb82611322565b90505f6125cc8d8d8d8d8d87613801565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b03191690961790955550939998505050505050505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156126cb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126f2919081019061594b565b915091508061271457604051636b2f19e960e01b815260040160405180910390fd5b81511561273a578151604051636ba589a560e01b8152600481019190915260240161077e565b60208201516001600160a01b031615612776576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161077e565b5092915050565b5f80612787612090565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156127f1573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612818919081019061594b565b915091508061283a57604051636b2f19e960e01b815260040160405180910390fd5b5f612843612090565b6005810154845191925014612871578251604051636ba589a560e01b8152600481019190915260240161077e565b60208301516001600160a01b0316156128ad576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161077e565b60208301516001600160a01b0316156128e9576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161077e565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016129269190615329565b6040805180830381865af4158015612940573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061296491906159db565b9150915081881461298b5760405163089938b360e11b81526004810189905260240161077e565b5f8881526006840160205260409020600101546001600160401b039081169082161115612a1c575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612a3a565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b5f80612a4f612090565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612a8857612a886150da565b6003811115612a9957612a996150da565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f612b0f82611e17565b9050600283516003811115612b2657612b266150da565b14612b47578251604051633b0d540d60e21b815261077e9190600401615352565b60208301516001600160a01b03163314612be3575f8281526006850160205260409020546001600160a01b03163314612b805733611698565b5f82815260068501602052604090205460c0820151612baf91600160b01b90046001600160401b03169061559d565b6001600160401b0316421015612be35760405163fb6ce63f60e01b81526001600160401b034216600482015260240161077e565b600281516005811115612bf857612bf86150da565b03612d1a5760028401546080840151612c1a916001600160401b03169061559d565b6001600160401b0316421015612c4e5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161077e565b8715612c6057612c5e82886127a6565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a0820151612c99918491612c9491906159fe565b613bba565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612cdc84888c613d84565b9050828a7f5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf60405160405180910390a3151594506124d79350505050565b600481516005811115612d2f57612d2f6150da565b03612d5657612d3f83878b613d84565b50612d49896120b4565b60019450505050506124d7565b805160405163170cc93360e21b815261077e91906004016152a8565b612d7e84848484612a45565b61088157604051631036cf9160e11b81526004810185905260240161077e565b5f80612da8612090565b90505f612db761034c856137de565b90505f612dc387611e17565b9050612dce8761277d565b612dee576040516330efa98b60e01b81526004810188905260240161077e565b600281516005811115612e0357612e036150da565b14612e2457805160405163170cc93360e21b815261077e91906004016152a8565b5f828260a00151612e35919061559d565b905083600201600a9054906101000a90046001600160401b03168260400151612e5e9190615609565b6001600160401b0316816001600160401b03161115612e9b57604051636d51fe0560e11b81526001600160401b038216600482015260240161077e565b5f80612ea78a84613bba565b915091505f8a83604051602001612ed592919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d19060800160405180910390a496505050505050505b9392505050565b5f612fec612090565b5f838152600a82016020526040812080549190559091506108818482613f72565b5f613016614ba7565b5f61301f612035565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61304688612667565b604001516040518263ffffffff1660e01b81526004016130669190615329565b6040805180830381865af4158015613080573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130a49190615829565b9150915080156130cb57604051632d07135360e01b8152811515600482015260240161077e565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115613103576131036150da565b6005811115613114576131146150da565b815260200160018201805461312890615270565b80601f016020809104026020016040519081016040528092919081815260200182805461315490615270565b801561319f5780601f106131765761010080835404028352916020019161319f565b820191905f5260205f20905b81548152906001019060200180831161318257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c09091015290915081516005811115613217576132176150da565b141580156132385750600181516005811115613235576132356150da565b14155b1561325957805160405163170cc93360e21b815261077e91906004016152a8565b60038151600581111561326e5761326e6150da565b0361327c5760048152613281565b600581525b8360060181602001516040516132979190615479565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156132da576132da6150da565b0217905550602082015160018201906132f390826154ce565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615c3983398151915254610a76906001600160a01b03168383613fe8565b6133ed614047565b6133f682614092565b610a768161410f565b61340b84848484612298565b61088157604051635bff683f60e11b81526004810185905260240161077e565b5f613434612035565b600101546001600160401b0316919050565b5f805f613451612090565b5f868152600882016020526040812080549082905591925090819080156134e5575f8781526006850160205260409020546127109061349b90600160a01b900461ffff1683615812565b6134a591906157f3565b91508184600a015f8981526020019081526020015f205f8282546134c99190615938565b909155506134d990508282615a1e565b92506134e58984613f72565b509097909650945050505050565b5f6134fc612035565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613536576135366150da565b6005811115613547576135476150da565b815260200160018201805461355b90615270565b80601f016020809104026020016040519081016040528092919081815260200182805461358790615270565b80156135d25780601f106135a9576101008083540402835291602001916135d2565b820191905f5260205f20905b8154815290600101906020018083116135b557829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c0909101529091508151600581111561364a5761364a6150da565b1461367d575f8381526005830160205260409081902054905163170cc93360e21b815261077e9160ff16906004016152a8565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff19169060019084908111156136c2576136c26150da565b0217905550602082015160018201906136db90826154ce565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f61377b8482613bba565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a00151426040516137d0939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f611370825f80516020615c39833981519152546001600160a01b031690614177565b5f61380a612035565b6007015460ff1661382e57604051637fab81e560e01b815260040160405180910390fd5b5f613837612035565b905042866001600160401b031611158061386657506138596202a30042615938565b866001600160401b031610155b1561388f57604051635879da1360e11b81526001600160401b038716600482015260240161077e565b60038101546001600160401b03906138b290600160401b90048216858316615938565b11156138dc57604051633e1a785160e01b81526001600160401b038416600482015260240161077e565b6138e585614183565b6138ee84614183565b86516030146139155786516040516326475b2f60e11b815260040161077e91815260200190565b87515f036139385787604051633e08a12560e11b815260040161077e9190615329565b5f801b816006018960405161394d9190615479565b9081526020016040518091039020541461397c578760405163a41f772f60e01b815260040161077e9190615329565b613986835f6142a2565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613a069190615a97565b5f60405180830381865af4158015613a20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613a479190810190615b4e565b5f82815260048601602052604090209193509150613a6582826154ce565b5081836006018b604051613a799190615479565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613ab5908590600401615329565b6020604051808303815f875af1158015613ad1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af5919061533b565b5f8481526005860160205260409020805460ff19166001908117825591925001613b1f8c826154ce565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613ba3908e9085908e908c90615b91565b60405180910390a250909998505050505050505050565b5f805f613bc5612035565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b0316613bf585826142a2565b5f613bff8761450f565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613ca3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613cca91908101906152f8565b6040518263ffffffff1660e01b8152600401613ce69190615329565b6020604051808303815f875af1158015613d02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d26919061533b565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f80613d8e612090565b90505f613d9e8660400151611e17565b90505f600382516005811115613db657613db66150da565b1480613dd45750600482516005811115613dd257613dd26150da565b145b15613de4575060e0810151613e21565b600282516005811115613df957613df96150da565b03613e05575042613e21565b815160405163170cc93360e21b815261077e91906004016152a8565b86608001516001600160401b0316816001600160401b031611613e49575f9350505050612fdc565b600483015460608801515f916001600160a01b031690634f22429f90613e6e906115e2565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613eef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f13919061533b565b90506001600160a01b038716613f2b57876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f5f80516020615c3983398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613fcd575f80fd5b505af1158015613fdf573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261131d91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614578565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661409057604051631afcd79f60e31b815260040160405180910390fd5b565b61409a614047565b6140a3816145d9565b6140ab6145f2565b61410c606082013560808301356140c860c0850160a08601615025565b6140d860e0860160c08701615bc9565b6140e9610100870160e08801615be2565b61010087013561410161014089016101208a0161536c565b886101400135614602565b50565b614117614047565b5f80516020615c398339815191526001600160a01b03821661415757604051637330680360e01b81526001600160a01b038316600482015260240161077e565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f612fdc8333846147c4565b805163ffffffff1615801561419c575060208101515115155b156141d057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161077e565b602081015151815163ffffffff16111561421357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161077e565b60015b816020015151811015610a76576020820151614233600183615a1e565b81518110614243576142436153cc565b60200260200101516001600160a01b03168260200151828151811061426a5761426a6153cc565b60200260200101516001600160a01b0316101561429a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614216565b5f6142ab612035565b90505f826001600160401b0316846001600160401b031611156142d9576142d283856159fe565b90506142e6565b6142e384846159fe565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061435357506001840154815161434f916001600160401b031690615938565b8210155b1561437b576001600160401b038084166060830152828252604082015116602082015261439a565b828160600181815161438d919061559d565b6001600160401b03169052505b60608101516143aa906064615609565b602082015160018601546001600160401b0392909216916143d59190600160401b900460ff16615609565b6001600160401b0316101561440e57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161077e565b8581604001818151614420919061559d565b6001600160401b03169052506040810180518691906144409083906159fe565b6001600160401b03169052506001840154604082015160649161446e91600160401b90910460ff1690615609565b6001600160401b031610156144a7576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161077e565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614519612035565b5f848152600582016020526040902060020180549192509060089061454d90600160401b90046001600160401b0316615c02565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61458c6001600160a01b03841683614927565b905080515f141580156145b05750808060200190518101906145ae9190615c1d565b155b1561131d57604051635274afe760e01b81526001600160a01b038416600482015260240161077e565b6145e1614047565b6145e9614934565b61410c8161493c565b6145fa614047565b614090614a20565b61460a614047565b5f614613612090565b905061ffff8616158061462b575061271061ffff8716115b1561464f57604051635f12e6c360e11b815261ffff8716600482015260240161077e565b878911156146735760405163222d164360e21b8152600481018a905260240161077e565b60ff851615806146865750600a60ff8616115b156146a95760405163170db35960e31b815260ff8616600482015260240161077e565b6146b161342b565b6001600160401b0316876001600160401b031610156146ed576040516202a06d60e11b81526001600160401b038816600482015260240161077e565b835f0361470d5760405163a733007160e01b815260040160405180910390fd5b8161472e57604051632f6bd1db60e01b81526004810183905260240161077e565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa15801561480a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061482e919061533b565b90506148456001600160a01b038616853086614a28565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614889573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148ad919061533b565b90508181116149135760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161077e565b61491d8282615a1e565b9695505050505050565b6060612fdc83835f614a61565b614090614047565b614944614047565b5f61494d612035565b82358155905060146149656060840160408501615be2565b60ff161180614984575061497f6060830160408401615be2565b60ff16155b156149b8576149996060830160408401615be2565b604051634a59bbff60e11b815260ff909116600482015260240161077e565b6149c86060830160408401615be2565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149f96040830160208401615025565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612285614047565b6040516001600160a01b0384811660248301528381166044830152606482018390526108819186918216906323b872dd90608401614015565b606081471015614a865760405163cd78605960e01b815230600482015260240161077e565b5f80856001600160a01b03168486604051614aa19190615479565b5f6040518083038185875af1925050503d805f8114614adb576040519150601f19603f3d011682016040523d82523d5f602084013e614ae0565b606091505b509150915061491d868383606082614b0057614afb82614b47565b612fdc565b8151158015614b1757506001600160a01b0384163b155b15614b4057604051639996b31560e01b81526001600160a01b038516600482015260240161077e565b5080612fdc565b805115614b575780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614b7c90615270565b5f825580601f10614b8b575050565b601f0160209004905f5260205f209081019061410c9190614bec565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614c00575f8155600101614bed565b5090565b5f60208284031215614c14575f80fd5b5035919050565b803563ffffffff81168114611853575f80fd5b5f8060408385031215614c3f575f80fd5b82359150614c4f60208401614c1b565b90509250929050565b801515811461410c575f80fd5b5f805f60608486031215614c77575f80fd5b833592506020840135614c8981614c58565b9150614c9760408501614c1b565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715614cd657614cd6614ca0565b60405290565b604051606081016001600160401b0381118282101715614cd657614cd6614ca0565b604051601f8201601f191681016001600160401b0381118282101715614d2657614d26614ca0565b604052919050565b5f6001600160401b03821115614d4657614d46614ca0565b50601f01601f191660200190565b5f82601f830112614d63575f80fd5b8135614d76614d7182614d2e565b614cfe565b818152846020838601011115614d8a575f80fd5b816020850160208301375f918101602001919091529392505050565b6001600160401b038116811461410c575f80fd5b803561185381614da6565b6001600160a01b038116811461410c575f80fd5b5f60408284031215614de9575f80fd5b614df1614cb4565b9050614dfc82614c1b565b81526020808301356001600160401b0380821115614e18575f80fd5b818501915085601f830112614e2b575f80fd5b813581811115614e3d57614e3d614ca0565b8060051b9150614e4e848301614cfe565b8181529183018401918481019088841115614e67575f80fd5b938501935b83851015614e915784359250614e8183614dc5565b8282529385019390850190614e6c565b808688015250505050505092915050565b803561ffff81168114611853575f80fd5b5f805f805f805f80610100898b031215614ecb575f80fd5b88356001600160401b0380821115614ee1575f80fd5b614eed8c838d01614d54565b995060208b0135915080821115614f02575f80fd5b614f0e8c838d01614d54565b9850614f1c60408c01614dba565b975060608b0135915080821115614f31575f80fd5b614f3d8c838d01614dd9565b965060808b0135915080821115614f52575f80fd5b50614f5f8b828c01614dd9565b945050614f6e60a08a01614ea2565b9250614f7c60c08a01614dba565b915060e089013590509295985092959890939650565b5f8060408385031215614fa3575f80fd5b82356001600160401b03811115614fb8575f80fd5b830160808186031215614fc9575f80fd5b9150614c4f60208401614c1b565b5f805f8060808587031215614fea575f80fd5b843593506020850135614ffc81614c58565b925061500a60408601614c1b565b9150606085013561501a81614dc5565b939692955090935050565b5f60208284031215615035575f80fd5b8135612fdc81614da6565b5f8060408385031215615051575f80fd5b50508035926020909101359150565b5f8060408385031215615071575f80fd5b82359150602083013561508381614dc5565b809150509250929050565b5f6020828403121561509e575f80fd5b612fdc82614c1b565b5f808284036101808112156150ba575f80fd5b610160808212156150c9575f80fd5b849350830135905061508381614dc5565b634e487b7160e01b5f52602160045260245ffd5b600681106150fe576150fe6150da565b9052565b5f5b8381101561511c578181015183820152602001615104565b50505f910152565b5f815180845261513b816020860160208601615102565b601f01601f19169290920160200192915050565b602081526151616020820183516150ee565b5f602083015161010080604085015261517e610120850183615124565b915060408501516001600160401b038082166060870152806060880151166080870152505060808501516151bd60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215615216575f80fd5b82356001600160401b038082111561522c575f80fd5b818501915085601f83011261523f575f80fd5b81358181111561524d575f80fd5b86602082850101111561525e575f80fd5b60209290920196919550909350505050565b600181811c9082168061528457607f821691505b6020821081036152a257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020810161137082846150ee565b5f82601f8301126152c5575f80fd5b81516152d3614d7182614d2e565b8181528460208386010111156152e7575f80fd5b6124d7826020830160208701615102565b5f60208284031215615308575f80fd5b81516001600160401b0381111561531d575f80fd5b6124d7848285016152b6565b602081525f612fdc6020830184615124565b5f6020828403121561534b575f80fd5b5051919050565b6020810160048310615366576153666150da565b91905290565b5f6020828403121561537c575f80fd5b8135612fdc81614dc5565b5f808335601e1984360301811261539c575f80fd5b8301803591506001600160401b038211156153b5575f80fd5b6020019150600581901b3603821315613d7d575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126153f4575f80fd5b9190910192915050565b5f6060823603121561540e575f80fd5b615416614cdc565b82356001600160401b038082111561542c575f80fd5b61543836838701614d54565b8352602085013591508082111561544d575f80fd5b5061545a36828601614d54565b602083015250604083013561546e81614da6565b604082015292915050565b5f82516153f4818460208701615102565b601f82111561131d57805f5260205f20601f840160051c810160208510156154af5750805b601f840160051c820191505b8181101561128a575f81556001016154bb565b81516001600160401b038111156154e7576154e7614ca0565b6154fb816154f58454615270565b8461548a565b602080601f83116001811461552e575f84156155175750858301515b5f19600386901b1c1916600185901b1785556114b5565b5f85815260208120601f198616915b8281101561555c5788860151825594840194600190910190840161553d565b508582101561557957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561277657612776615589565b604081525f6155cf6040830185615124565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036155ff576155ff615589565b6001019392505050565b6001600160401b0381811683821602808216919082811461562c5761562c615589565b505092915050565b5f808335601e19843603018112615649575f80fd5b83016020810192503590506001600160401b03811115615667575f80fd5b803603821315613d7d575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561575257848303601f19018952813536889003605e190181126156d9575f80fd5b870160606156e78280615634565b8287526156f78388018284615675565b9250505061570786830183615634565b86830388880152615719838284615675565b92505050604080830135925061572e83614da6565b6001600160401b0392909216949091019390935297830197908301906001016156b4565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561578381614dc5565b6001600160a01b031660608381019190915283013536849003601e190181126157aa575f80fd5b83016020810190356001600160401b038111156157c5575f80fd5b8060051b36038213156157d6575f80fd5b6080808501526157ea60a08501828461569d565b95945050505050565b5f8261580d57634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761137057611370615589565b5f806040838503121561583a575f80fd5b82519150602083015161508381614c58565b5f815461585881615270565b808552602060018381168015615875576001811461588f576158ba565b60ff1985168884015283151560051b8801830195506158ba565b865f52825f205f5b858110156158b25781548a8201860152908301908401615897565b890184019650505b505050505092915050565b604081525f6155cf604083018561584c565b602081525f612fdc602083018461584c565b5f805f606084860312156158fb575f80fd5b83519250602084015161590d81614da6565b604085015190925061591e81614da6565b809150509250925092565b818382375f9101908152919050565b8082018082111561137057611370615589565b5f806040838503121561595c575f80fd5b82516001600160401b0380821115615972575f80fd5b9084019060608287031215615985575f80fd5b61598d614cdc565b82518152602083015161599f81614dc5565b60208201526040830151828111156159b5575f80fd5b6159c1888286016152b6565b604083015250809450505050602083015161508381614c58565b5f80604083850312156159ec575f80fd5b82519150602083015161508381614da6565b6001600160401b0382811682821603908082111561277657612776615589565b8181038181111561137057611370615589565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615a8c5784516001600160a01b03168252938301936001929092019190830190615a63565b509695505050505050565b60208152815160208201525f602083015160e06040840152615abd610100840182615124565b90506040840151601f1980858403016060860152615adb8383615124565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b0b8383615a31565b925060a08601519150808584030160c086015250615b298282615a31565b91505060c0840151615b4660e08501826001600160401b03169052565b509392505050565b5f8060408385031215615b5f575f80fd5b8251915060208301516001600160401b03811115615b7b575f80fd5b615b87858286016152b6565b9150509250929050565b608081525f615ba36080830187615124565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f60208284031215615bd9575f80fd5b612fdc82614ea2565b5f60208284031215615bf2575f80fd5b813560ff81168114612fdc575f80fd5b5f6001600160401b038083168181036155ff576155ff615589565b5f60208284031215615c2d575f80fd5b8151612fdc81614c5856fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122095de6f7000b95d49c02d7260b5f614bf3c65570b0bf756eb18f568c7a03bd0b964736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -951,25 +942,25 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Comp return _ERC20TokenStakingManager.Contract.CompleteDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "completeEndDelegation", delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "completeDelegatorRemoval", delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.CompleteEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteDelegatorRemoval(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteDelegatorRemoval(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.CompleteEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteDelegatorRemoval(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteDelegatorRemoval(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. @@ -1035,88 +1026,88 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Comp return _ERC20TokenStakingManager.Contract.CompleteValidatorWeightUpdate(&_ERC20TokenStakingManager.TransactOpts, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitializeEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitializeEndDelegation", delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitiateDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitiateDelegatorRemoval", delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateDelegatorRemoval(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateDelegatorRemoval(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitiateDelegatorRemoval0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitiateDelegatorRemoval0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateDelegatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateDelegatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitializeEndValidation", validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitiateValidatorRemoval(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitiateValidatorRemoval", validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateValidatorRemoval(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateValidatorRemoval(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitializeEndValidation0", validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitiateValidatorRemoval0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitiateValidatorRemoval0", validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateValidatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateValidatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } // Initialize is a paid mutator transaction binding the contract method 0x9e478eea. @@ -1140,151 +1131,151 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Init return _ERC20TokenStakingManager.Contract.Initialize(&_ERC20TokenStakingManager.TransactOpts, settings, token) } -// InitializeDelegatorRegistration is a paid mutator transaction binding the contract method 0x9e1bc4ef. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeDelegatorRegistration(bytes32 validationID, uint256 delegationAmount) returns(bytes32) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeDelegatorRegistration(opts *bind.TransactOpts, validationID [32]byte, delegationAmount *big.Int) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeDelegatorRegistration", validationID, delegationAmount) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messageIndex) } -// InitializeDelegatorRegistration is a paid mutator transaction binding the contract method 0x9e1bc4ef. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeDelegatorRegistration(bytes32 validationID, uint256 delegationAmount) returns(bytes32) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeDelegatorRegistration(validationID [32]byte, delegationAmount *big.Int) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, validationID, delegationAmount) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeValidatorSet(&_ERC20TokenStakingManager.TransactOpts, conversionData, messageIndex) } -// InitializeDelegatorRegistration is a paid mutator transaction binding the contract method 0x9e1bc4ef. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeDelegatorRegistration(bytes32 validationID, uint256 delegationAmount) returns(bytes32) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeDelegatorRegistration(validationID [32]byte, delegationAmount *big.Int) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, validationID, delegationAmount) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeValidatorSet(&_ERC20TokenStakingManager.TransactOpts, conversionData, messageIndex) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRegistration is a paid mutator transaction binding the contract method 0x739b4eff. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndDelegation", delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRegistration(bytes32 validationID, uint256 delegationAmount) returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitiateDelegatorRegistration(opts *bind.TransactOpts, validationID [32]byte, delegationAmount *big.Int) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initiateDelegatorRegistration", validationID, delegationAmount) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRegistration is a paid mutator transaction binding the contract method 0x739b4eff. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRegistration(bytes32 validationID, uint256 delegationAmount) returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitiateDelegatorRegistration(validationID [32]byte, delegationAmount *big.Int) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, validationID, delegationAmount) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRegistration is a paid mutator transaction binding the contract method 0x739b4eff. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRegistration(bytes32 validationID, uint256 delegationAmount) returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitiateDelegatorRegistration(validationID [32]byte, delegationAmount *big.Int) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, validationID, delegationAmount) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitiateDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initiateDelegatorRemoval", delegationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateDelegatorRemoval(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateDelegatorRemoval(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitiateDelegatorRemoval0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initiateDelegatorRemoval0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateDelegatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateDelegatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0x1af1872b. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndValidation0", validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount) returns(bytes32 validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitiateValidatorRegistration(opts *bind.TransactOpts, nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, delegationFeeBips uint16, minStakeDuration uint64, stakeAmount *big.Int) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initiateValidatorRegistration", nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, delegationFeeBips, minStakeDuration, stakeAmount) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0x1af1872b. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount) returns(bytes32 validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitiateValidatorRegistration(nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, delegationFeeBips uint16, minStakeDuration uint64, stakeAmount *big.Int) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateValidatorRegistration(&_ERC20TokenStakingManager.TransactOpts, nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, delegationFeeBips, minStakeDuration, stakeAmount) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0x1af1872b. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount) returns(bytes32 validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitiateValidatorRegistration(nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, delegationFeeBips uint16, minStakeDuration uint64, stakeAmount *big.Int) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateValidatorRegistration(&_ERC20TokenStakingManager.TransactOpts, nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, delegationFeeBips, minStakeDuration, stakeAmount) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x4bee0040. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount) returns(bytes32 validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeValidatorRegistration(opts *bind.TransactOpts, registrationInput ValidatorRegistrationInput, delegationFeeBips uint16, minStakeDuration uint64, stakeAmount *big.Int) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeValidatorRegistration", registrationInput, delegationFeeBips, minStakeDuration, stakeAmount) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitiateValidatorRemoval(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initiateValidatorRemoval", validationID, includeUptimeProof, messageIndex) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x4bee0040. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount) returns(bytes32 validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeValidatorRegistration(registrationInput ValidatorRegistrationInput, delegationFeeBips uint16, minStakeDuration uint64, stakeAmount *big.Int) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeValidatorRegistration(&_ERC20TokenStakingManager.TransactOpts, registrationInput, delegationFeeBips, minStakeDuration, stakeAmount) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateValidatorRemoval(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x4bee0040. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount) returns(bytes32 validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeValidatorRegistration(registrationInput ValidatorRegistrationInput, delegationFeeBips uint16, minStakeDuration uint64, stakeAmount *big.Int) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeValidatorRegistration(&_ERC20TokenStakingManager.TransactOpts, registrationInput, delegationFeeBips, minStakeDuration, stakeAmount) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateValidatorRemoval(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitiateValidatorRemoval0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initiateValidatorRemoval0", validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeValidatorSet(&_ERC20TokenStakingManager.TransactOpts, conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateValidatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeValidatorSet(&_ERC20TokenStakingManager.TransactOpts, conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateValidatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } // ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. @@ -1329,25 +1320,25 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Rese return _ERC20TokenStakingManager.Contract.ResendRegisterValidatorMessage(&_ERC20TokenStakingManager.TransactOpts, validationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ResendUpdateDelegation(opts *bind.TransactOpts, delegationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "resendUpdateDelegation", delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ResendUpdateDelegator(opts *bind.TransactOpts, delegationID [32]byte) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "resendUpdateDelegator", delegationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ResendUpdateDelegation(delegationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ResendUpdateDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ResendUpdateDelegator(delegationID [32]byte) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ResendUpdateDelegator(&_ERC20TokenStakingManager.TransactOpts, delegationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ResendUpdateDelegation(delegationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ResendUpdateDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ResendUpdateDelegator(delegationID [32]byte) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ResendUpdateDelegator(&_ERC20TokenStakingManager.TransactOpts, delegationID) } // SubmitUptimeProof is a paid mutator transaction binding the contract method 0x25e1c776. @@ -1371,9 +1362,9 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Subm return _ERC20TokenStakingManager.Contract.SubmitUptimeProof(&_ERC20TokenStakingManager.TransactOpts, validationID, messageIndex) } -// ERC20TokenStakingManagerCompletedValidatorRegistrationIterator is returned from FilterCompletedValidatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedValidatorRegistration events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerCompletedValidatorRegistrationIterator struct { - Event *ERC20TokenStakingManagerCompletedValidatorRegistration // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerCompletedDelegatorRegistrationIterator is returned from FilterCompletedDelegatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedDelegatorRegistration events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedDelegatorRegistrationIterator struct { + Event *ERC20TokenStakingManagerCompletedDelegatorRegistration // 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 @@ -1387,7 +1378,7 @@ type ERC20TokenStakingManagerCompletedValidatorRegistrationIterator struct { // 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 *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Next() bool { +func (it *ERC20TokenStakingManagerCompletedDelegatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1396,7 +1387,7 @@ func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Next() if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerCompletedValidatorRegistration) + it.Event = new(ERC20TokenStakingManagerCompletedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1411,7 +1402,7 @@ func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Next() // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerCompletedValidatorRegistration) + it.Event = new(ERC20TokenStakingManagerCompletedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1427,53 +1418,61 @@ func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Next() } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedDelegatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedDelegatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerCompletedValidatorRegistration struct { +// ERC20TokenStakingManagerCompletedDelegatorRegistration represents a CompletedDelegatorRegistration event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedDelegatorRegistration struct { + DelegationID [32]byte ValidationID [32]byte - NodeID []byte - Weight uint64 + StartTime *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// FilterCompletedDelegatorRegistration is a free log retrieval operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorRegistrationIterator, error) { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedDelegatorRegistration(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedDelegatorRegistrationIterator, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRegistration", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedDelegatorRegistration", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerCompletedValidatorRegistrationIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedDelegatorRegistrationIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedDelegatorRegistration", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// WatchCompletedDelegatorRegistration is a free log subscription operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedDelegatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedDelegatorRegistration, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRegistration", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedDelegatorRegistration", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1483,8 +1482,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchComplete select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerCompletedValidatorRegistration) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { + event := new(ERC20TokenStakingManagerCompletedDelegatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRegistration", log); err != nil { return err } event.Raw = log @@ -1505,21 +1504,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchComplete }), nil } -// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// ParseCompletedDelegatorRegistration is a log parse operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorRegistration, error) { - event := new(ERC20TokenStakingManagerCompletedValidatorRegistration) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedDelegatorRegistration(log types.Log) (*ERC20TokenStakingManagerCompletedDelegatorRegistration, error) { + event := new(ERC20TokenStakingManagerCompletedDelegatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerCompletedValidatorRemovalIterator is returned from FilterCompletedValidatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedValidatorRemoval events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerCompletedValidatorRemovalIterator struct { - Event *ERC20TokenStakingManagerCompletedValidatorRemoval // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerCompletedDelegatorRemovalIterator is returned from FilterCompletedDelegatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedDelegatorRemoval events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedDelegatorRemovalIterator struct { + Event *ERC20TokenStakingManagerCompletedDelegatorRemoval // 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 @@ -1533,7 +1532,7 @@ type ERC20TokenStakingManagerCompletedValidatorRemovalIterator struct { // 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 *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Next() bool { +func (it *ERC20TokenStakingManagerCompletedDelegatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1542,7 +1541,7 @@ func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Next() bool if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerCompletedValidatorRemoval) + it.Event = new(ERC20TokenStakingManagerCompletedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1557,7 +1556,7 @@ func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Next() bool // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerCompletedValidatorRemoval) + it.Event = new(ERC20TokenStakingManagerCompletedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1573,51 +1572,62 @@ func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Next() bool } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedDelegatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedDelegatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerCompletedValidatorRemoval struct { +// ERC20TokenStakingManagerCompletedDelegatorRemoval represents a CompletedDelegatorRemoval event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedDelegatorRemoval struct { + DelegationID [32]byte ValidationID [32]byte + Rewards *big.Int + Fees *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// FilterCompletedDelegatorRemoval is a free log retrieval operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorRemovalIterator, error) { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedDelegatorRemoval(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedDelegatorRemovalIterator, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRemoval", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerCompletedValidatorRemovalIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedDelegatorRemovalIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedDelegatorRemoval", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// WatchCompletedDelegatorRemoval is a free log subscription operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedDelegatorRemoval(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedDelegatorRemoval, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRemoval", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1627,8 +1637,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchComplete select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerCompletedValidatorRemoval) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { + event := new(ERC20TokenStakingManagerCompletedDelegatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRemoval", log); err != nil { return err } event.Raw = log @@ -1649,21 +1659,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchComplete }), nil } -// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// ParseCompletedDelegatorRemoval is a log parse operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorRemoval(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorRemoval, error) { - event := new(ERC20TokenStakingManagerCompletedValidatorRemoval) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedDelegatorRemoval(log types.Log) (*ERC20TokenStakingManagerCompletedDelegatorRemoval, error) { + event := new(ERC20TokenStakingManagerCompletedDelegatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator is returned from FilterCompletedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for CompletedValidatorWeightUpdate events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator struct { - Event *ERC20TokenStakingManagerCompletedValidatorWeightUpdate // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerCompletedValidatorRegistrationIterator is returned from FilterCompletedValidatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedValidatorRegistration events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorRegistrationIterator struct { + Event *ERC20TokenStakingManagerCompletedValidatorRegistration // 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 @@ -1677,7 +1687,7 @@ type ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator struct { // 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 *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() bool { +func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1686,7 +1696,7 @@ func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1701,7 +1711,7 @@ func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1717,53 +1727,53 @@ func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerCompletedValidatorWeightUpdate struct { +// ERC20TokenStakingManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorRegistration struct { ValidationID [32]byte - Nonce uint64 + NodeID []byte Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedValidatorRegistrationIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } @@ -1773,8 +1783,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchComplete select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { + event := new(ERC20TokenStakingManagerCompletedValidatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -1795,21 +1805,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchComplete }), nil } -// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorWeightUpdate(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorWeightUpdate, error) { - event := new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorRegistration, error) { + event := new(ERC20TokenStakingManagerCompletedValidatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerDelegationEndedIterator is returned from FilterDelegationEnded and is used to iterate over the raw logs and unpacked data for DelegationEnded events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegationEndedIterator struct { - Event *ERC20TokenStakingManagerDelegationEnded // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerCompletedValidatorRemovalIterator is returned from FilterCompletedValidatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedValidatorRemoval events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorRemovalIterator struct { + Event *ERC20TokenStakingManagerCompletedValidatorRemoval // 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 @@ -1823,7 +1833,7 @@ type ERC20TokenStakingManagerDelegationEndedIterator struct { // 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 *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { +func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1832,7 +1842,7 @@ func (it *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegationEnded) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1847,7 +1857,7 @@ func (it *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegationEnded) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1863,62 +1873,51 @@ func (it *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegationEndedIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegationEndedIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegationEnded represents a DelegationEnded event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegationEnded struct { - DelegationID [32]byte +// ERC20TokenStakingManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorRemoval struct { ValidationID [32]byte - Rewards *big.Int - Fees *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterDelegationEnded is a free log retrieval operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegationEnded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerDelegationEndedIterator, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorRemovalIterator, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegationEndedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegationEnded", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedValidatorRemovalIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchDelegationEnded is a free log subscription operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegationEnded(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegationEnded, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -1928,8 +1927,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegati select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerDelegationEnded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { + event := new(ERC20TokenStakingManagerCompletedValidatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -1950,21 +1949,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegati }), nil } -// ParseDelegationEnded is a log parse operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegationEnded(log types.Log) (*ERC20TokenStakingManagerDelegationEnded, error) { - event := new(ERC20TokenStakingManagerDelegationEnded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorRemoval(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorRemoval, error) { + event := new(ERC20TokenStakingManagerCompletedValidatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerDelegatorAddedIterator is returned from FilterDelegatorAdded and is used to iterate over the raw logs and unpacked data for DelegatorAdded events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorAddedIterator struct { - Event *ERC20TokenStakingManagerDelegatorAdded // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator is returned from FilterCompletedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for CompletedValidatorWeightUpdate events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator struct { + Event *ERC20TokenStakingManagerCompletedValidatorWeightUpdate // 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 @@ -1978,7 +1977,7 @@ type ERC20TokenStakingManagerDelegatorAddedIterator struct { // 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 *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { +func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1987,7 +1986,7 @@ func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorAdded) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2002,7 +2001,7 @@ func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorAdded) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2018,73 +2017,53 @@ func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegatorAdded represents a DelegatorAdded event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorAdded struct { - DelegationID [32]byte - ValidationID [32]byte - DelegatorAddress common.Address - Nonce uint64 - ValidatorWeight uint64 - DelegatorWeight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorAdded is a free log retrieval operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorAdded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*ERC20TokenStakingManagerDelegatorAddedIterator, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegatorAddedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorAdded", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil } -// WatchDelegatorAdded is a free log subscription operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegatorAdded(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegatorAdded, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } @@ -2094,8 +2073,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerDelegatorAdded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { + event := new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { return err } event.Raw = log @@ -2116,21 +2095,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato }), nil } -// ParseDelegatorAdded is a log parse operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegatorAdded(log types.Log) (*ERC20TokenStakingManagerDelegatorAdded, error) { - event := new(ERC20TokenStakingManagerDelegatorAdded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorWeightUpdate(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorWeightUpdate, error) { + event := new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerDelegatorRegisteredIterator is returned from FilterDelegatorRegistered and is used to iterate over the raw logs and unpacked data for DelegatorRegistered events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorRegisteredIterator struct { - Event *ERC20TokenStakingManagerDelegatorRegistered // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitializedIterator struct { + Event *ERC20TokenStakingManagerInitialized // 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 @@ -2144,7 +2123,7 @@ type ERC20TokenStakingManagerDelegatorRegisteredIterator struct { // 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 *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { +func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2153,7 +2132,7 @@ func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorRegistered) + it.Event = new(ERC20TokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2168,7 +2147,7 @@ func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorRegistered) + it.Event = new(ERC20TokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2184,61 +2163,41 @@ func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Error() error { +func (it *ERC20TokenStakingManagerInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Close() error { +func (it *ERC20TokenStakingManagerInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegatorRegistered represents a DelegatorRegistered event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorRegistered struct { - DelegationID [32]byte - ValidationID [32]byte - StartTime *big.Int - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerInitialized represents a Initialized event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRegistered is a free log retrieval operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorRegistered(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerDelegatorRegisteredIterator, error) { - - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } +// Solidity: event Initialized(uint64 version) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC20TokenStakingManagerInitializedIterator, error) { - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "Initialized") if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegatorRegisteredIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorRegistered", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil } -// WatchDelegatorRegistered is a free log subscription operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegatorRegistered(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegatorRegistered, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { - - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } +// Solidity: event Initialized(uint64 version) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitialized) (event.Subscription, error) { - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "Initialized") if err != nil { return nil, err } @@ -2248,8 +2207,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerDelegatorRegistered) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { + event := new(ERC20TokenStakingManagerInitialized) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { return err } event.Raw = log @@ -2270,21 +2229,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato }), nil } -// ParseDelegatorRegistered is a log parse operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegatorRegistered(log types.Log) (*ERC20TokenStakingManagerDelegatorRegistered, error) { - event := new(ERC20TokenStakingManagerDelegatorRegistered) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { +// Solidity: event Initialized(uint64 version) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitialized(log types.Log) (*ERC20TokenStakingManagerInitialized, error) { + event := new(ERC20TokenStakingManagerInitialized) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerDelegatorRemovalInitializedIterator is returned from FilterDelegatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for DelegatorRemovalInitialized events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorRemovalInitializedIterator struct { - Event *ERC20TokenStakingManagerDelegatorRemovalInitialized // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerInitiatedDelegatorRegistrationIterator is returned from FilterInitiatedDelegatorRegistration and is used to iterate over the raw logs and unpacked data for InitiatedDelegatorRegistration events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedDelegatorRegistrationIterator struct { + Event *ERC20TokenStakingManagerInitiatedDelegatorRegistration // 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 @@ -2298,7 +2257,7 @@ type ERC20TokenStakingManagerDelegatorRemovalInitializedIterator struct { // 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 *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bool { +func (it *ERC20TokenStakingManagerInitiatedDelegatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2307,7 +2266,7 @@ func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bo if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorRemovalInitialized) + it.Event = new(ERC20TokenStakingManagerInitiatedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2322,7 +2281,7 @@ func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bo // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorRemovalInitialized) + it.Event = new(ERC20TokenStakingManagerInitiatedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2338,28 +2297,33 @@ func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Error() error { +func (it *ERC20TokenStakingManagerInitiatedDelegatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Close() error { +func (it *ERC20TokenStakingManagerInitiatedDelegatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorRemovalInitialized struct { - DelegationID [32]byte - ValidationID [32]byte - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerInitiatedDelegatorRegistration represents a InitiatedDelegatorRegistration event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedDelegatorRegistration struct { + DelegationID [32]byte + ValidationID [32]byte + DelegatorAddress common.Address + Nonce uint64 + ValidatorWeight uint64 + DelegatorWeight uint64 + SetWeightMessageID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// FilterInitiatedDelegatorRegistration is a free log retrieval operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerDelegatorRemovalInitializedIterator, error) { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitiatedDelegatorRegistration(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*ERC20TokenStakingManagerInitiatedDelegatorRegistrationIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -2369,18 +2333,22 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegat for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) + } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "InitiatedDelegatorRegistration", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegatorRemovalInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerInitiatedDelegatorRegistrationIterator{contract: _ERC20TokenStakingManager.contract, event: "InitiatedDelegatorRegistration", logs: logs, sub: sub}, nil } -// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// WatchInitiatedDelegatorRegistration is a free log subscription operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegatorRemovalInitialized, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiatedDelegatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitiatedDelegatorRegistration, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -2390,8 +2358,12 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) + } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "InitiatedDelegatorRegistration", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } @@ -2401,8 +2373,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerDelegatorRemovalInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { + event := new(ERC20TokenStakingManagerInitiatedDelegatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRegistration", log); err != nil { return err } event.Raw = log @@ -2423,21 +2395,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato }), nil } -// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// ParseInitiatedDelegatorRegistration is a log parse operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegatorRemovalInitialized(log types.Log) (*ERC20TokenStakingManagerDelegatorRemovalInitialized, error) { - event := new(ERC20TokenStakingManagerDelegatorRemovalInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitiatedDelegatorRegistration(log types.Log) (*ERC20TokenStakingManagerInitiatedDelegatorRegistration, error) { + event := new(ERC20TokenStakingManagerInitiatedDelegatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerInitializedIterator struct { - Event *ERC20TokenStakingManagerInitialized // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerInitiatedDelegatorRemovalIterator is returned from FilterInitiatedDelegatorRemoval and is used to iterate over the raw logs and unpacked data for InitiatedDelegatorRemoval events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedDelegatorRemovalIterator struct { + Event *ERC20TokenStakingManagerInitiatedDelegatorRemoval // 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 @@ -2451,7 +2423,7 @@ type ERC20TokenStakingManagerInitializedIterator struct { // 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 *ERC20TokenStakingManagerInitializedIterator) Next() bool { +func (it *ERC20TokenStakingManagerInitiatedDelegatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2460,7 +2432,7 @@ func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerInitialized) + it.Event = new(ERC20TokenStakingManagerInitiatedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2475,7 +2447,7 @@ func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerInitialized) + it.Event = new(ERC20TokenStakingManagerInitiatedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2491,41 +2463,60 @@ func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerInitializedIterator) Error() error { +func (it *ERC20TokenStakingManagerInitiatedDelegatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerInitializedIterator) Close() error { +func (it *ERC20TokenStakingManagerInitiatedDelegatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerInitialized represents a Initialized event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerInitialized struct { - Version uint64 - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerInitiatedDelegatorRemoval represents a InitiatedDelegatorRemoval event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedDelegatorRemoval struct { + DelegationID [32]byte + ValidationID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// FilterInitiatedDelegatorRemoval is a free log retrieval operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event Initialized(uint64 version) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC20TokenStakingManagerInitializedIterator, error) { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitiatedDelegatorRemoval(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerInitiatedDelegatorRemovalIterator, error) { - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "Initialized") + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "InitiatedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerInitiatedDelegatorRemovalIterator{contract: _ERC20TokenStakingManager.contract, event: "InitiatedDelegatorRemoval", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// WatchInitiatedDelegatorRemoval is a free log subscription operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event Initialized(uint64 version) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitialized) (event.Subscription, error) { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiatedDelegatorRemoval(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitiatedDelegatorRemoval, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "Initialized") + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "InitiatedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -2535,8 +2526,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiali select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(ERC20TokenStakingManagerInitiatedDelegatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRemoval", log); err != nil { return err } event.Raw = log @@ -2557,12 +2548,12 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiali }), nil } -// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// ParseInitiatedDelegatorRemoval is a log parse operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event Initialized(uint64 version) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitialized(log types.Log) (*ERC20TokenStakingManagerInitialized, error) { - event := new(ERC20TokenStakingManagerInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitiatedDelegatorRemoval(log types.Log) (*ERC20TokenStakingManagerInitiatedDelegatorRemoval, error) { + event := new(ERC20TokenStakingManagerInitiatedDelegatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRemoval", log); err != nil { return nil, err } event.Raw = log diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index 0d5175691..18a7469aa 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -93,19 +93,10 @@ type ValidatorMessagesValidationPeriod struct { Weight uint64 } -// ValidatorRegistrationInput is an auto generated low-level Go binding around an user-defined struct. -type ValidatorRegistrationInput struct { - NodeID []byte - BlsPublicKey []byte - RegistrationExpiry uint64 - RemainingBalanceOwner PChainOwner - DisableOwner PChainOwner -} - // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"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\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615bce380380615bce83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a818061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614ab4565b610792565b005b348015610279575f80fd5b5061026c610288366004614aef565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b06565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614ab4565b610b13565b348015610301575f80fd5b5061026c610310366004614b1d565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b6b565b61108d565b34801561033f575f80fd5b5061035361034e366004614aef565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614ba0565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614ab4565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614ba0565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b6b565b61118f565b348015610497575f80fd5b506104176104a6366004614c02565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614ab4565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614ba0565b61140c565b348015610507575f80fd5b5061026c610516366004614b6b565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c1d565b61160b565b348015610559575f80fd5b5061026c610568366004614aef565b6116bc565b348015610578575f80fd5b50610417610587366004614c4b565b611750565b348015610597575f80fd5b5061026c6105a6366004614ba0565b611829565b3480156105b6575f80fd5b506104176105c5366004614c4b565b611835565b6104176105d8366004614c75565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614aef565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614aef565b611cdf565b6104176106bd366004614aef565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c4b565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614aef565b611faa565b6040516102ce9190614d4b565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c1d565b6120f9565b34801561077e575f80fd5b5061041761078d366004614e01565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614cd6565b60058111156107f7576107f7614cd6565b815260200160018201805461080b90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e6c565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614cd6565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fa7565b6040518263ffffffff1660e01b81526004016109f09190614fd8565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190614fea565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190614fea565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615001565b6001600160a01b031614610c3557610c106060840160408501615001565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c43606085018561501c565b905090505f805b828163ffffffff161015610e83575f610c66606088018861501c565b8363ffffffff16818110610c7c57610c7c615061565b9050602002810190610c8e9190615075565b610c97906150e0565b80516040519192505f916006880191610caf9161515b565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fd8565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d289161515b565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190614fea565b90508086600601835f0151604051610d7e919061515b565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151b0565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d908561527f565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e6892919061529f565b60405180910390a2505080610e7c906152c9565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836152eb565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612561565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fd8565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190614fea565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615441565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fa7565b90505f60028260405161100a919061515b565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190614fea565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612677565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d7614cd6565b146110f7578060405163170cc93360e21b815260040161092d9190614e9e565b610a3083836126a0565b5f8061110b61293f565b6003015461111990846154d5565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f612963565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f61119861293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614cd6565b60038111156111e2576111e2614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f614cd6565b14611290578251604051633b0d540d60e21b815261092d91906004016154f4565b6004815160058111156112a5576112a5614cd6565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e961293f565b6003015461114f906001600160401b03841661550e565b61079e8383835f612baa565b61116184848484612963565b611420612da7565b5f61142961293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146257611462614cd6565b600381111561147357611473614cd6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec614cd6565b1461150d578051604051633b0d540d60e21b815261092d91906004016154f4565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e614cd6565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615a2c83398151915255565b5050565b5f61161461293f565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c561293f565b90505f6116d183611faa565b51905060048160058111156116e8576116e8614cd6565b14611708578060405163170cc93360e21b815260040161092d9190614e9e565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f61176261293f565b90505f8061176f85612e1b565b9150915061177c82612677565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e1614cd6565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615a2c83398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61186687612561565b604001516040518263ffffffff1660e01b81526004016118869190614fd8565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c49190615525565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490614e6c565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f614cd6565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f828152600484016020526040812061199a91614a00565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b90920416906155c1565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615a2c83398151915255565b9392505050565b5f611a6d61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa6614cd6565b6003811115611ab757611ab7614cd6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b30614cd6565b14158015611b515750600381516003811115611b4e57611b4e614cd6565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016154f4565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c619190810190614fa7565b6040518263ffffffff1660e01b8152600401611c7d9190614fd8565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190614fea565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690614e6c565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d51614cd6565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb92016155d3565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190614fea565b5f611e04612da7565b611e0f823334613412565b905061182460015f80516020615a2c83398151915255565b5f805f611e3384612561565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e739190614fd8565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb291906155e5565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614a37565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff5614cd6565b600581111561200657612006614cd6565b815260200160018201805461201a90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461204690614e6c565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f61213461293f565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b092919061561a565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612220613652565b6122298161369d565b50565b5f8061223661293f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f614cd6565b600381111561228057612280614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d614cd6565b1461232e578251604051633b0d540d60e21b815261092d91906004016154f4565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b03169061527f565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df614cd6565b036125015760028401546080840151612401916001600160401b03169061527f565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b9190615629565b613717565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124c384888c6138e1565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125599350505050565b60048151600581111561251657612516614cd6565b0361253d5761252683878b6138e1565b5061253089612bd6565b6001945050505050612559565b805160405163170cc93360e21b815261092d9190600401614e9e565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ec9190810190615649565b915091508061260e57604051636b2f19e960e01b815260040160405180910390fd5b815115612634578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612670576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268161293f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127129190810190615649565b915091508061273457604051636b2f19e960e01b815260040160405180910390fd5b5f61273d61293f565b600581015484519192501461276b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127a7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127e3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128209190614fd8565b6040805180830381865af415801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906156d9565b915091508188146128855760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b039081169082161115612916575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612934565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061296d61293f565b905061297886613acf565b5f61298287611faa565b905061298d87612677565b61299c57600192505050612559565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b03169061527f565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a0565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b209190614fea565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b9084906156fc565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb684848484612963565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c18614cd6565b6003811115612c2957612c29614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613dba565b8260800151612cac919061527f565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613dd5565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a2c833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a2c83398151915255565b5f612dfa61293f565b5f838152600a8201602052604081208054919055909150610a308482613e82565b5f612e24614a37565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e5488612561565b604001516040518263ffffffff1660e01b8152600401612e749190614fd8565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb29190615525565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f11614cd6565b6005811115612f2257612f22614cd6565b8152602001600182018054612f3690614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614e6c565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561302557613025614cd6565b14158015613046575060018151600581111561304357613043614cd6565b14155b1561306757805160405163170cc93360e21b815261092d9190600401614e9e565b60038151600581111561307c5761307c614cd6565b0361308a576004815261308f565b600581525b8360060181602001516040516130a5919061515b565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e8614cd6565b02179055506020820151600182019061310190826151b0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682613ee0565b5f806131ed61293f565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a8061570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c61570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614c02565b61335660608e018e615751565b61335f90615765565b61336c60808f018f615751565b61337590615765565b87613f73565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341c61293f565b90505f61342884611101565b90505f61343487611faa565b905061343f87612677565b61345f576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561347457613474614cd6565b1461349557805160405163170cc93360e21b815261092d9190600401614e9e565b5f828260a001516134a6919061527f565b905083600201600a9054906101000a90046001600160401b031682604001516134cf91906152eb565b6001600160401b0316816001600160401b0316111561350c57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f806135188a84613717565b915091505f8a8360405160200161354692919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661369b57604051631afcd79f60e31b815260040160405180910390fd5b565b6136a5613652565b6136ae8161432c565b6136b6614345565b612229606082013560808301356136d360c0850160a08601614c02565b6136e360e0860160c0870161582c565b6136f4610100870160e08801615845565b61010087013561370c61014089016101208a01615001565b886101400135614355565b5f805f6137226121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137528582614517565b5f61375c87614784565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613800573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138279190810190614fa7565b6040518263ffffffff1660e01b81526004016138439190614fd8565b6020604051808303815f875af115801561385f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138839190614fea565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806138eb61293f565b90505f6138fb8660400151611faa565b90505f60038251600581111561391357613913614cd6565b1480613931575060048251600581111561392f5761392f614cd6565b145b15613941575060e081015161397e565b60028251600581111561395657613956614cd6565b0361396257504261397e565b815160405163170cc93360e21b815261092d9190600401614e9e565b86608001516001600160401b0316816001600160401b0316116139a6575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f906139cb906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614fea565b90506001600160a01b038716613a8857876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613ad86121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b1257613b12614cd6565b6005811115613b2357613b23614cd6565b8152602001600182018054613b3790614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6390614e6c565b8015613bae5780601f10613b8557610100808354040283529160200191613bae565b820191905f5260205f20905b815481529060010190602001808311613b9157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c2657613c26614cd6565b14613c59575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613c9e57613c9e614cd6565b021790555060208201516001820190613cb790826151b0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d578482613717565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dac939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dc36121f4565b600101546001600160401b0316919050565b5f805f613de061293f565b5f86815260088201602052604081208054908290559192509081908015613e74575f87815260068501602052604090205461271090613e2a90600160a01b900461ffff168361550e565b613e3491906154d5565b91508184600a015f8981526020019081526020015f205f828254613e5891906156fc565b90915550613e6890508282615865565b9250613e748984613e82565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ece575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f035760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f4c576040519150601f19603f3d011682016040523d82523d5f602084013e613f51565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f7c6121f4565b6007015460ff16613fa057604051637fab81e560e01b815260040160405180910390fd5b5f613fa96121f4565b905042866001600160401b0316111580613fd85750613fcb6202a300426156fc565b866001600160401b031610155b1561400157604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061402490600160401b900482168583166156fc565b111561404e57604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b614057856147ed565b614060846147ed565b86516030146140875786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140aa5787604051633e08a12560e11b815260040161092d9190614fd8565b5f801b81600601896040516140bf919061515b565b908152602001604051809103902054146140ee578760405163a41f772f60e01b815260040161092d9190614fd8565b6140f8835f614517565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161417891906158de565b5f60405180830381865af4158015614192573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b99190810190615995565b5f828152600486016020526040902091935091506141d782826151b0565b5081836006018b6040516141eb919061515b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614227908590600401614fd8565b6020604051808303815f875af1158015614243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142679190614fea565b5f8481526005860160205260409020805460ff191660019081178255919250016142918c826151b0565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90614315908e9085908e908c906159d8565b60405180910390a250909998505050505050505050565b614334613652565b61433c61490c565b61222981614914565b61434d613652565b61369b6149f8565b61435d613652565b5f61436661293f565b905061ffff8616158061437e575061271061ffff8716115b156143a257604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143c65760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143d95750600a60ff8616115b156143fc5760405163170db35960e31b815260ff8616600482015260240161092d565b614404613dba565b6001600160401b0316876001600160401b03161015614440576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144605760405163a733007160e01b815260040160405180910390fd5b8161448157604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145206121f4565b90505f826001600160401b0316846001600160401b0316111561454e576145478385615629565b905061455b565b6145588484615629565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c85750600184015481516145c4916001600160401b0316906156fc565b8210155b156145f0576001600160401b038084166060830152828252604082015116602082015261460f565b8281606001818151614602919061527f565b6001600160401b03169052505b606081015161461f9060646152eb565b602082015160018601546001600160401b03929092169161464a9190600160401b900460ff166152eb565b6001600160401b0316101561468357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614695919061527f565b6001600160401b03169052506040810180518691906146b5908390615629565b6001600160401b0316905250600184015460408201516064916146e391600160401b90910460ff16906152eb565b6001600160401b0316101561471c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061478e6121f4565b5f84815260058201602052604090206002018054919250906008906147c290600160401b90046001600160401b0316615a10565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614806575060208101515115155b1561483a57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561487d57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b81602001515181101561160757602082015161489d600183615865565b815181106148ad576148ad615061565b60200260200101516001600160a01b0316826020015182815181106148d4576148d4615061565b60200260200101516001600160a01b0316101561490457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614880565b61369b613652565b61491c613652565b5f6149256121f4565b823581559050601461493d6060840160408501615845565b60ff16118061495c57506149576060830160408401615845565b60ff16155b15614990576149716060830160408401615845565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149a06060830160408401615845565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149d16040830160208401614c02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde613652565b508054614a0c90614e6c565b5f825580601f10614a1b575050565b601f0160209004905f5260205f20908101906122299190614a7c565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614a90575f8155600101614a7d565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614ac6575f80fd5b833592506020840135614ad881614a94565b9150614ae660408501614aa1565b90509250925092565b5f60208284031215614aff575f80fd5b5035919050565b5f6101608284031215614b17575f80fd5b50919050565b5f8060408385031215614b2e575f80fd5b82356001600160401b03811115614b43575f80fd5b830160808186031215614b54575f80fd5b9150614b6260208401614aa1565b90509250929050565b5f8060408385031215614b7c575f80fd5b82359150614b6260208401614aa1565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614bb3575f80fd5b843593506020850135614bc581614a94565b9250614bd360408601614aa1565b91506060850135614be381614b8c565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614c12575f80fd5b8135611a5d81614bee565b5f8060408385031215614c2e575f80fd5b823591506020830135614c4081614b8c565b809150509250929050565b5f60208284031215614c5b575f80fd5b611a5d82614aa1565b803561ffff81168114611824575f80fd5b5f805f60608486031215614c87575f80fd5b83356001600160401b03811115614c9c575f80fd5b840160a08187031215614cad575f80fd5b9250614cbb60208501614c64565b91506040840135614ccb81614bee565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614cfa57614cfa614cd6565b9052565b5f5b83811015614d18578181015183820152602001614d00565b50505f910152565b5f8151808452614d37816020860160208601614cfe565b601f01601f19169290920160200192915050565b60208152614d5d602082018351614cea565b5f6020830151610100806040850152614d7a610120850183614d20565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614db960a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e12575f80fd5b82356001600160401b0380821115614e28575f80fd5b818501915085601f830112614e3b575f80fd5b813581811115614e49575f80fd5b866020828501011115614e5a575f80fd5b60209290920196919550909350505050565b600181811c90821680614e8057607f821691505b602082108103614b1757634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614cea565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ee257614ee2614eac565b60405290565b604080519081016001600160401b0381118282101715614ee257614ee2614eac565b604051601f8201601f191681016001600160401b0381118282101715614f3257614f32614eac565b604052919050565b5f6001600160401b03821115614f5257614f52614eac565b50601f01601f191660200190565b5f82601f830112614f6f575f80fd5b8151614f82614f7d82614f3a565b614f0a565b818152846020838601011115614f96575f80fd5b612559826020830160208701614cfe565b5f60208284031215614fb7575f80fd5b81516001600160401b03811115614fcc575f80fd5b61255984828501614f60565b602081525f611a5d6020830184614d20565b5f60208284031215614ffa575f80fd5b5051919050565b5f60208284031215615011575f80fd5b8135611a5d81614b8c565b5f808335601e19843603018112615031575f80fd5b8301803591506001600160401b0382111561504a575f80fd5b6020019150600581901b36038213156138da575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615089575f80fd5b9190910192915050565b5f82601f8301126150a2575f80fd5b81356150b0614f7d82614f3a565b8181528460208386010111156150c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150f0575f80fd5b6150f8614ec0565b82356001600160401b038082111561510e575f80fd5b61511a36838701615093565b8352602085013591508082111561512f575f80fd5b5061513c36828601615093565b602083015250604083013561515081614bee565b604082015292915050565b5f8251615089818460208701614cfe565b601f82111561079e57805f5260205f20601f840160051c810160208510156151915750805b601f840160051c820191505b81811015611161575f815560010161519d565b81516001600160401b038111156151c9576151c9614eac565b6151dd816151d78454614e6c565b8461516c565b602080601f831160018114615210575f84156151f95750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561523e5788860151825594840194600190910190840161521f565b508582101561525b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126705761267061526b565b604081525f6152b16040830185614d20565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152e1576152e161526b565b6001019392505050565b6001600160401b0381811683821602808216919082811461530e5761530e61526b565b505092915050565b5f808335601e1984360301811261532b575f80fd5b83016020810192503590506001600160401b03811115615349575f80fd5b8036038213156138da575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543457848303601f19018952813536889003605e190181126153bb575f80fd5b870160606153c98280615316565b8287526153d98388018284615357565b925050506153e986830183615316565b868303888801526153fb838284615357565b92505050604080830135925061541083614bee565b6001600160401b039290921694909101939093529783019790830190600101615396565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561546581614b8c565b6001600160a01b031660608381019190915283013536849003601e1901811261548c575f80fd5b83016020810190356001600160401b038111156154a7575f80fd5b8060051b36038213156154b8575f80fd5b6080808501526154cc60a08501828461537f565b95945050505050565b5f826154ef57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550857615508614cd6565b91905290565b808202811582820484141761114f5761114f61526b565b5f8060408385031215615536575f80fd5b825191506020830151614c4081614a94565b5f815461555481614e6c565b808552602060018381168015615571576001811461558b576155b6565b60ff1985168884015283151560051b8801830195506155b6565b865f52825f205f5b858110156155ae5781548a8201860152908301908401615593565b890184019650505b505050505092915050565b604081525f6152b16040830185615548565b602081525f611a5d6020830184615548565b5f805f606084860312156155f7575f80fd5b83519250602084015161560981614bee565b6040850151909250614ccb81614bee565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126705761267061526b565b5f806040838503121561565a575f80fd5b82516001600160401b0380821115615670575f80fd5b9084019060608287031215615683575f80fd5b61568b614ec0565b82518152602083015161569d81614b8c565b60208201526040830151828111156156b3575f80fd5b6156bf88828601614f60565b6040830152508094505050506020830151614c4081614a94565b5f80604083850312156156ea575f80fd5b825191506020830151614c4081614bee565b8082018082111561114f5761114f61526b565b5f808335601e19843603018112615724575f80fd5b8301803591506001600160401b0382111561573d575f80fd5b6020019150368190038213156138da575f80fd5b5f8235603e19833603018112615089575f80fd5b5f60408236031215615775575f80fd5b61577d614ee8565b61578683614aa1565b81526020808401356001600160401b03808211156157a2575f80fd5b9085019036601f8301126157b4575f80fd5b8135818111156157c6576157c6614eac565b8060051b91506157d7848301614f0a565b81815291830184019184810190368411156157f0575f80fd5b938501935b8385101561581a578435925061580a83614b8c565b82825293850193908501906157f5565b94860194909452509295945050505050565b5f6020828403121561583c575f80fd5b611a5d82614c64565b5f60208284031215615855575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f61526b565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158d35784516001600160a01b031682529383019360019290920191908301906158aa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615904610100840182614d20565b90506040840151601f19808584030160608601526159228383614d20565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159528383615878565b925060a08601519150808584030160c0860152506159708282615878565b91505060c084015161598d60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159a6575f80fd5b8251915060208301516001600160401b038111156159c2575f80fd5b6159ce85828601614f60565b9150509250929050565b608081525f6159ea6080830187614d20565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152e1576152e161526b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220fefa8a178e8407d7ad158aabc54689418e8ddd5f996bf78177d3f37d09d805b164736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"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\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initiateDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initiateValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615b51380380615b5183398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a048061014d5f395ff3fe608060405260043610610249575f3560e01c80638af5499e11610134578063bb0b1938116100b3578063cc71bbba11610078578063cc71bbba146106b7578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063bb0b19381461062a578063bc5fbfec1461063e578063bee0a03f14610671578063c974d1b614610690578063cacd9755146106a4575f80fd5b8063a9778a7a116100f9578063a9778a7a1461041b578063aac80c391461059f578063afb98096146105be578063b2c1712e146105f1578063b771b3bc14610610575f80fd5b80638af5499e146105045780638ef34c981461052357806393e24598146105425780639681d94014610561578063a3a65e4814610580575f80fd5b80632aa56638116101cb5780635dc1f535116101905780635dc1f5351461046257806360305d621461047657806360ad77841461049f57806362065856146104be578063732214f8146104dd5780638280a25a146104f0575f80fd5b80632aa56638146103935780632e2194d8146103b2578063329c3e12146103e957806335455ded1461041b5780634b396bcc14610443575f80fd5b806320d91b7a1161021157806320d91b7a146102f6578063245dafcb1461031557806325e1c77614610334578063264dc6031461035357806327bf60cd14610374575f80fd5b80630322ed981461024d5780630ba512d11461026e578063134096451461028d578063151d30d1146102ac57806316679564146102d7575b5f80fd5b348015610258575f80fd5b5061026c6102673660046149e1565b610792565b005b348015610279575f80fd5b5061026c6102883660046149f8565b610a25565b348015610298575f80fd5b5061026c6102a7366004614a22565b610b02565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614a59565b610cf5565b348015610301575f80fd5b5061026c610310366004614a94565b610d01565b348015610320575f80fd5b5061026c61032f3660046149e1565b61126f565b34801561033f575f80fd5b5061026c61034e366004614a22565b6114cf565b610366610361366004614cec565b611543565b6040519081526020016102ce565b34801561037f575f80fd5b5061026c61038e366004614a59565b61157f565b34801561039e575f80fd5b5061026c6103ad366004614a59565b61158b565b3480156103bd575f80fd5b506103d16103cc3660046149e1565b61159c565b6040516001600160401b0390911681526020016102ce565b3480156103f4575f80fd5b506104036001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b348015610426575f80fd5b5061043061271081565b60405161ffff90911681526020016102ce565b34801561044e575f80fd5b5061026c61045d366004614dc1565b6115f0565b34801561046d575f80fd5b506103666115fc565b348015610481575f80fd5b5061048a601481565b60405163ffffffff90911681526020016102ce565b3480156104aa575f80fd5b5061026c6104b9366004614a22565b61160b565b3480156104c9575f80fd5b506103666104d8366004614e0f565b61185c565b3480156104e8575f80fd5b506103665f81565b3480156104fb575f80fd5b506102c0603081565b34801561050f575f80fd5b5061026c61051e366004614dc1565b61187c565b34801561052e575f80fd5b5061026c61053d366004614e2a565b611888565b34801561054d575f80fd5b5061026c61055c3660046149e1565b611939565b34801561056c575f80fd5b5061036661057b366004614e58565b6119cd565b34801561058b575f80fd5b5061036661059a366004614e58565b611aa6565b3480156105aa575f80fd5b5061026c6105b9366004614dc1565b611ca1565b3480156105c9575f80fd5b506103667f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b3480156105fc575f80fd5b5061026c61060b366004614a59565b611cad565b34801561061b575f80fd5b506104036005600160991b0181565b348015610635575f80fd5b506103d1611cb9565b348015610649575f80fd5b506103667fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561067c575f80fd5b5061026c61068b3660046149e1565b611cdb565b34801561069b575f80fd5b506102c0601481565b6103666106b23660046149e1565b611df7565b3480156106c2575f80fd5b5061026c6106d1366004614dc1565b611e23565b3480156106e1575f80fd5b506106f56106f0366004614e58565b611e2f565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c3660046149e1565b611fb2565b6040516102ce9190614ee6565b348015610749575f80fd5b506103d16202a30081565b34801561075f575f80fd5b5061026c61076e366004614e2a565b612101565b34801561077e575f80fd5b5061036661078d366004614f9c565b612198565b5f61079b6121d0565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107d5576107d5614e71565b60058111156107e6576107e6614e71565b81526020016001820180546107fa90615007565b80601f016020809104026020016040519081016040528092919081815260200182805461082690615007565b80156108715780601f1061084857610100808354040283529160200191610871565b820191905f5260205f20905b81548152906001019060200180831161085457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108e9576108e9614e71565b14610925575f8381526005830160205260409081902054905163170cc93360e21b815261091c9160ff1690600401615039565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561099c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109c39190810190615089565b6040518263ffffffff1660e01b81526004016109df91906150ba565b6020604051808303815f875af11580156109fb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a1f91906150cc565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a6e575080546001600160401b03808416911610155b15610a8c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ab6836121f4565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610b0a612208565b5f610b1361223f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610b4c57610b4c614e71565b6003811115610b5d57610b5d614e71565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529050600381516003811115610bd657610bd6614e71565b14610bf7578051604051633b0d540d60e21b815261091c91906004016150e3565b5f610c058260400151611fb2565b90506004610c168360400151611fb2565b516005811115610c2857610c28614e71565b14158015610c4f57508160c001516001600160401b031681608001516001600160401b0316105b15610ccf575f80610c5f86611e2f565b9150915081846040015114610c8a5760405163089938b360e11b81526004810183905260240161091c565b806001600160401b03168460c001516001600160401b03161115610ccc57604051632e19bc2d60e11b81526001600160401b038216600482015260240161091c565b50505b610cd885612263565b505050610cf160015f805160206159af83398151915255565b5050565b610a1f8383835f612447565b5f610d0a6121d0565b600781015490915060ff1615610d3357604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d76573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9a91906150cc565b836020013514610dc3576040516372b0a7e760e11b81526020840135600482015260240161091c565b30610dd460608501604086016150fd565b6001600160a01b031614610e1757610df260608401604085016150fd565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161091c565b5f610e256060850185615118565b905090505f805b828163ffffffff161015611065575f610e486060880188615118565b8363ffffffff16818110610e5e57610e5e61515d565b9050602002810190610e709190615171565b610e799061518f565b80516040519192505f916006880191610e919161520a565b90815260200160405180910390205414610ec157805160405163a41f772f60e01b815261091c91906004016150ba565b5f6002885f013584604051602001610ef092919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610f0a9161520a565b602060405180830381855afa158015610f25573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610f4891906150cc565b90508086600601835f0151604051610f60919061520a565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610fa0908261525f565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b03199093169290921790915561100f908561532e565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161104a92919061534e565b60405180910390a250508061105e90615378565b9050610e2c565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b03841681029190911790915560018401546064916110a8910460ff168361539a565b6001600160401b031610156110db57604051633e1a785160e01b81526001600160401b038216600482015260240161091c565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d8478846110ff8761268e565b604001516040518263ffffffff1660e01b815260040161111f91906150ba565b602060405180830381865af415801561113a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115e91906150cc565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b815260040161119891906154f0565b5f60405180830381865af41580156111b2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526111d99190810190615089565b90505f6002826040516111ec919061520a565b602060405180830381855afa158015611207573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061122a91906150cc565b90508281146112565760405163baaea89d60e01b8152600481018290526024810184905260440161091c565b5050506007909201805460ff1916600117905550505050565b5f61127861223f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156112b1576112b1614e71565b60038111156112c2576112c2614e71565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561133b5761133b614e71565b1415801561135c575060038151600381111561135957611359614e71565b14155b1561137d578051604051633b0d540d60e21b815261091c91906004016150e3565b5f61138b8260400151611fb2565b905080606001516001600160401b03165f036113bd576040516339b894f960e21b81526004810185905260240161091c565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f9361142b93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611445573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261146c9190810190615089565b6040518263ffffffff1660e01b815260040161148891906150ba565b6020604051808303815f875af11580156114a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c891906150cc565b5050505050565b6114d8826127a4565b6114f8576040516330efa98b60e01b81526004810183905260240161091c565b5f61150283611fb2565b519050600281600581111561151957611519614e71565b14611539578060405163170cc93360e21b815260040161091c9190615039565b610a1f83836127cd565b5f61154c612208565b61155c8888888888888834612a69565b905061157460015f805160206159af83398151915255565b979650505050505050565b610a1f8383835f612be6565b6115978383835f612f13565b505050565b5f806115a661223f565b600301546115b49084615584565b90508015806115c957506001600160401b0381115b156115ea5760405163222d164360e21b81526004810184905260240161091c565b92915050565b6114c884848484612447565b5f6116056121d0565b54919050565b5f61161461223f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561164d5761164d614e71565b600381111561165e5761165e614e71565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6116d482611fb2565b90506001835160038111156116eb576116eb614e71565b1461170c578251604051633b0d540d60e21b815261091c91906004016150e3565b60048151600581111561172157611721614e71565b036117375761172f86612263565b505050505050565b8260a001516001600160401b031681608001516001600160401b031610156117d5575f8061176487611e2f565b9150915081841461179057846040015160405163089938b360e11b815260040161091c91815260200190565b8460a001516001600160401b0316816001600160401b031610156117d257604051632e19bc2d60e11b81526001600160401b038216600482015260240161091c565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa910160405180910390a3505050505050565b5f61186561223f565b600301546115ea906001600160401b0384166155a3565b610a1f84848484612f13565b5f61189161223f565b90506001600160a01b0382166118c55760405163caa903f960e01b81526001600160a01b038316600482015260240161091c565b5f8381526006820160205260409020546001600160a01b0316331461190b57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161091c565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61194261223f565b90505f61194e83611fb2565b519050600481600581111561196557611965614e71565b14611985578060405163170cc93360e21b815260040161091c9190615039565b5f8381526006830160205260409020546001600160a01b031633146119aa57336118e6565b5f838152600683016020526040902054611597906001600160a01b031684612f3f565b5f6119d6612208565b5f6119df61223f565b90505f806119ec85612f69565b915091506119f9826127a4565b611a0757509150611a8b9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b03918216911680611a495750805b600483516005811115611a5e57611a5e614e71565b03611a6d57611a6d8185612f3f565b611a8382611a7e856040015161185c565b61331e565b509193505050505b611aa160015f805160206159af83398151915255565b919050565b5f80611ab06121d0565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f611ad78761268e565b604001516040518263ffffffff1660e01b8152600401611af791906150ba565b6040805180830381865af4158015611b11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b3591906155ba565b9150915080611b5b57604051632d07135360e01b8152811515600482015260240161091c565b5f82815260048401602052604090208054611b7590615007565b90505f03611b995760405163089938b360e11b81526004810183905260240161091c565b60015f838152600580860160205260409091205460ff1690811115611bc057611bc0614e71565b14611bf3575f8281526005840160205260409081902054905163170cc93360e21b815261091c9160ff1690600401615039565b5f8281526004840160205260408120611c0b9161494d565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611c9193600190910192600160c01b9092041690615656565b60405180910390a2509392505050565b6114c884848484612be6565b6115978383835f613331565b5f611cc26121d0565b60030154600160401b90046001600160401b0316919050565b5f611ce46121d0565b5f8381526004820160205260409020805491925090611d0290615007565b90505f03611d265760405163089938b360e11b81526004810183905260240161091c565b60015f838152600580840160205260409091205460ff1690811115611d4d57611d4d614e71565b14611d80575f8281526005820160205260409081902054905163170cc93360e21b815261091c9160ff1690600401615039565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611db79201615668565b6020604051808303815f875af1158015611dd3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159791906150cc565b5f611e00612208565b611e0b82333461335d565b9050611aa160015f805160206159af83398151915255565b610a1f84848484613331565b5f805f611e3b8461268e565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e7b91906150ba565b606060405180830381865af4158015611e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eba919061567a565b9250925092505f611ec96121d0565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1d57604051632e19bc2d60e11b81526001600160401b038416600482015260240161091c565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9d90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fba614984565b5f611fc36121d0565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ffd57611ffd614e71565b600581111561200e5761200e614e71565b815260200160018201805461202290615007565b80601f016020809104026020016040519081016040528092919081815260200182805461204e90615007565b80156120995780601f1061207057610100808354040283529160200191612099565b820191905f5260205f20905b81548152906001019060200180831161207c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b0381166121335760405163caa903f960e01b81526001600160a01b038216600482015260240161091c565b5f61213c61223f565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461216a57336118e6565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806121a26121d0565b90508060060184846040516121b89291906156ba565b90815260200160405180910390205491505092915050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b6121fc61359f565b612205816135ea565b50565b5f805160206159af83398151915280546001190161223957604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f61226c61223f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156122a5576122a5614e71565b60038111156122b6576122b6614e71565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015281015190915061232a613664565b8260800151612339919061532e565b6001600160401b031642101561236d5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161091c565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b0316806123c8575060208201515b5f806123d583888661367f565b915091506123ee8560200151611a7e876060015161185c565b6040805183815260208101839052859189917f5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e910160405180910390a350505050505050565b60015f805160206159af83398151915255565b5f8061245161223f565b905061245c8661372c565b5f61246687611fb2565b9050612471876127a4565b61248057600192505050612686565b5f8781526006830160205260409020546001600160a01b031633146124a557336118e6565b5f87815260068301602052604090205460c08201516124d491600160b01b90046001600160401b03169061532e565b6001600160401b03168160e001516001600160401b0316101561251b5760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161091c565b5f86156125335761252c88876127cd565b9050612551565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906125769061185c565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa1580156125e0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061260491906150cc565b90506001600160a01b038616612630575f8981526006850160205260409020546001600160a01b031695505b5f898152600a850160205260408120805483929061264f9084906156c9565b90915550505f898152600b94909401602052604090932080546001600160a01b0319166001600160a01b0387161790555050151590505b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156126f2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261271991908101906156dc565b915091508061273b57604051636b2f19e960e01b815260040160405180910390fd5b815115612761578151604051636ba589a560e01b8152600481019190915260240161091c565b60208201516001600160a01b03161561279d576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161091c565b5092915050565b5f806127ae61223f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612818573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261283f91908101906156dc565b915091508061286157604051636b2f19e960e01b815260040160405180910390fd5b5f61286a61223f565b6005810154845191925014612898578251604051636ba589a560e01b8152600481019190915260240161091c565b60208301516001600160a01b0316156128d4576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161091c565b60208301516001600160a01b031615612910576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161091c565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161294d91906150ba565b6040805180830381865af4158015612967573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061298b919061576c565b915091508188146129b25760405163089938b360e11b81526004810189905260240161091c565b5f8881526006840160205260409020600101546001600160401b039081169082161115612a43575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2611574565b50505f95865260060160205250506040909220600101546001600160401b031692915050565b5f80612a7361223f565b600281015490915061ffff600160401b90910481169086161080612a9c575061271061ffff8616115b15612ac057604051635f12e6c360e11b815261ffff8616600482015260240161091c565b60028101546001600160401b039081169085161015612afc576040516202a06d60e11b81526001600160401b038516600482015260240161091c565b8054831080612b0e5750806001015483115b15612b2f5760405163222d164360e21b81526004810184905260240161091c565b825f612b3a8261159c565b90505f612b4b8d8d8d8d8d87613a17565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b03191690961790955550939998505050505050505050565b5f80612bf061223f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c2957612c29614e71565b6003811115612c3a57612c3a614e71565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f612cb082611fb2565b9050600283516003811115612cc757612cc7614e71565b14612ce8578251604051633b0d540d60e21b815261091c91906004016150e3565b60208301516001600160a01b03163314612d84575f8281526006850160205260409020546001600160a01b03163314612d2157336118e6565b5f82815260068501602052604090205460c0820151612d5091600160b01b90046001600160401b03169061532e565b6001600160401b0316421015612d845760405163fb6ce63f60e01b81526001600160401b034216600482015260240161091c565b600281516005811115612d9957612d99614e71565b03612ebb5760028401546080840151612dbb916001600160401b03169061532e565b6001600160401b0316421015612def5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161091c565b8715612e0157612dff82886127cd565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a0820151612e3a918491612e35919061578f565b613dd0565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612e7d84888c613f9a565b9050828a7f5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf60405160405180910390a3151594506126869350505050565b600481516005811115612ed057612ed0614e71565b03612ef757612ee083878b613f9a565b50612eea89612263565b6001945050505050612686565b805160405163170cc93360e21b815261091c9190600401615039565b612f1f84848484612be6565b610a1f57604051631036cf9160e11b81526004810185905260240161091c565b5f612f4861223f565b5f838152600a8201602052604081208054919055909150610a1f8482614188565b5f612f72614984565b5f612f7b6121d0565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612fa28861268e565b604001516040518263ffffffff1660e01b8152600401612fc291906150ba565b6040805180830381865af4158015612fdc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061300091906155ba565b91509150801561302757604051632d07135360e01b8152811515600482015260240161091c565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561305f5761305f614e71565b600581111561307057613070614e71565b815260200160018201805461308490615007565b80601f01602080910402602001604051908101604052809291908181526020018280546130b090615007565b80156130fb5780601f106130d2576101008083540402835291602001916130fb565b820191905f5260205f20905b8154815290600101906020018083116130de57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561317357613173614e71565b14158015613194575060018151600581111561319157613191614e71565b14155b156131b557805160405163170cc93360e21b815261091c9190600401615039565b6003815160058111156131ca576131ca614e71565b036131d857600481526131dd565b600581525b8360060181602001516040516131f3919061520a565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561323657613236614e71565b02179055506020820151600182019061324f908261525f565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b610cf16001600160a01b038316826141e6565b61333d84848484612447565b610a1f57604051635bff683f60e11b81526004810185905260240161091c565b5f8061336761223f565b90505f6133738461159c565b90505f61337f87611fb2565b905061338a876127a4565b6133aa576040516330efa98b60e01b81526004810188905260240161091c565b6002815160058111156133bf576133bf614e71565b146133e057805160405163170cc93360e21b815261091c9190600401615039565b5f828260a001516133f1919061532e565b905083600201600a9054906101000a90046001600160401b0316826040015161341a919061539a565b6001600160401b0316816001600160401b0316111561345757604051636d51fe0560e11b81526001600160401b038216600482015260240161091c565b5f806134638a84613dd0565b915091505f8a8360405160200161349192919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d19060800160405180910390a496505050505050505b9392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166135e857604051631afcd79f60e31b815260040160405180910390fd5b565b6135f261359f565b6135fb81614279565b613603614292565b6122056060820135608083013561362060c0850160a08601614e0f565b61363060e0860160c087016157af565b613641610100870160e088016157c8565b61010087013561365961014089016101208a016150fd565b8861014001356142a2565b5f61366d6121d0565b600101546001600160401b0316919050565b5f805f61368a61223f565b5f8681526008820160205260408120805490829055919250908190801561371e575f878152600685016020526040902054612710906136d490600160a01b900461ffff16836155a3565b6136de9190615584565b91508184600a015f8981526020019081526020015f205f82825461370291906156c9565b90915550613712905082826157e8565b925061371e8984614188565b509097909650945050505050565b5f6137356121d0565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561376f5761376f614e71565b600581111561378057613780614e71565b815260200160018201805461379490615007565b80601f01602080910402602001604051908101604052809291908181526020018280546137c090615007565b801561380b5780601f106137e25761010080835404028352916020019161380b565b820191905f5260205f20905b8154815290600101906020018083116137ee57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c0909101529091508151600581111561388357613883614e71565b146138b6575f8381526005830160205260409081902054905163170cc93360e21b815261091c9160ff1690600401615039565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff19169060019084908111156138fb576138fb614e71565b021790555060208201516001820190613914908261525f565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f6139b48482613dd0565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613a09939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613a206121d0565b6007015460ff16613a4457604051637fab81e560e01b815260040160405180910390fd5b5f613a4d6121d0565b905042866001600160401b0316111580613a7c5750613a6f6202a300426156c9565b866001600160401b031610155b15613aa557604051635879da1360e11b81526001600160401b038716600482015260240161091c565b60038101546001600160401b0390613ac890600160401b900482168583166156c9565b1115613af257604051633e1a785160e01b81526001600160401b038416600482015260240161091c565b613afb85614464565b613b0484614464565b8651603014613b2b5786516040516326475b2f60e11b815260040161091c91815260200190565b87515f03613b4e5787604051633e08a12560e11b815260040161091c91906150ba565b5f801b8160060189604051613b63919061520a565b90815260200160405180910390205414613b92578760405163a41f772f60e01b815260040161091c91906150ba565b613b9c835f614583565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613c1c9190615861565b5f60405180830381865af4158015613c36573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613c5d9190810190615918565b5f82815260048601602052604090209193509150613c7b828261525f565b5081836006018b604051613c8f919061520a565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613ccb9085906004016150ba565b6020604051808303815f875af1158015613ce7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d0b91906150cc565b5f8481526005860160205260409020805460ff19166001908117825591925001613d358c8261525f565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613db9908e9085908e908c9061595b565b60405180910390a250909998505050505050505050565b5f805f613ddb6121d0565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b0316613e0b8582614583565b5f613e15876147f0565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613eb9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613ee09190810190615089565b6040518263ffffffff1660e01b8152600401613efc91906150ba565b6020604051808303815f875af1158015613f18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f3c91906150cc565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f80613fa461223f565b90505f613fb48660400151611fb2565b90505f600382516005811115613fcc57613fcc614e71565b1480613fea5750600482516005811115613fe857613fe8614e71565b145b15613ffa575060e0810151614037565b60028251600581111561400f5761400f614e71565b0361401b575042614037565b815160405163170cc93360e21b815261091c9190600401615039565b86608001516001600160401b0316816001600160401b03161161405f575f9350505050613598565b600483015460608801515f916001600160a01b031690634f22429f906140849061185c565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015614105573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061412991906150cc565b90506001600160a01b03871661414157876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b1580156141d4575f80fd5b505af115801561172f573d5f803e3d5ffd5b804710156142095760405163cd78605960e01b815230600482015260240161091c565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614252576040519150601f19603f3d011682016040523d82523d5f602084013e614257565b606091505b505090508061159757604051630a12f52160e11b815260040160405180910390fd5b61428161359f565b614289614859565b61220581614861565b61429a61359f565b6135e8614945565b6142aa61359f565b5f6142b361223f565b905061ffff861615806142cb575061271061ffff8716115b156142ef57604051635f12e6c360e11b815261ffff8716600482015260240161091c565b878911156143135760405163222d164360e21b8152600481018a905260240161091c565b60ff851615806143265750600a60ff8616115b156143495760405163170db35960e31b815260ff8616600482015260240161091c565b614351613664565b6001600160401b0316876001600160401b0316101561438d576040516202a06d60e11b81526001600160401b038816600482015260240161091c565b835f036143ad5760405163a733007160e01b815260040160405180910390fd5b816143ce57604051632f6bd1db60e01b81526004810183905260240161091c565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b805163ffffffff1615801561447d575060208101515115155b156144b157805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161091c565b602081015151815163ffffffff1611156144f457805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161091c565b60015b816020015151811015610cf15760208201516145146001836157e8565b815181106145245761452461515d565b60200260200101516001600160a01b03168260200151828151811061454b5761454b61515d565b60200260200101516001600160a01b0316101561457b57604051630dbc8d5f60e31b815260040160405180910390fd5b6001016144f7565b5f61458c6121d0565b90505f826001600160401b0316846001600160401b031611156145ba576145b3838561578f565b90506145c7565b6145c4848461578f565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580614634575060018401548151614630916001600160401b0316906156c9565b8210155b1561465c576001600160401b038084166060830152828252604082015116602082015261467b565b828160600181815161466e919061532e565b6001600160401b03169052505b606081015161468b90606461539a565b602082015160018601546001600160401b0392909216916146b69190600160401b900460ff1661539a565b6001600160401b031610156146ef57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161091c565b8581604001818151614701919061532e565b6001600160401b031690525060408101805186919061472190839061578f565b6001600160401b03169052506001840154604082015160649161474f91600160401b90910460ff169061539a565b6001600160401b03161015614788576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161091c565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f806147fa6121d0565b5f848152600582016020526040902060020180549192509060089061482e90600160401b90046001600160401b0316615993565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6135e861359f565b61486961359f565b5f6148726121d0565b823581559050601461488a60608401604085016157c8565b60ff1611806148a957506148a460608301604084016157c8565b60ff16155b156148dd576148be60608301604084016157c8565b604051634a59bbff60e11b815260ff909116600482015260240161091c565b6148ed60608301604084016157c8565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561491e6040830160208401614e0f565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b61243461359f565b50805461495990615007565b5f825580601f10614968575050565b601f0160209004905f5260205f209081019061220591906149c9565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156149dd575f81556001016149ca565b5090565b5f602082840312156149f1575f80fd5b5035919050565b5f6101608284031215614a09575f80fd5b50919050565b803563ffffffff81168114611aa1575f80fd5b5f8060408385031215614a33575f80fd5b82359150614a4360208401614a0f565b90509250929050565b8015158114612205575f80fd5b5f805f60608486031215614a6b575f80fd5b833592506020840135614a7d81614a4c565b9150614a8b60408501614a0f565b90509250925092565b5f8060408385031215614aa5575f80fd5b82356001600160401b03811115614aba575f80fd5b830160808186031215614acb575f80fd5b9150614a4360208401614a0f565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715614b0f57614b0f614ad9565b60405290565b604051606081016001600160401b0381118282101715614b0f57614b0f614ad9565b604051601f8201601f191681016001600160401b0381118282101715614b5f57614b5f614ad9565b604052919050565b5f6001600160401b03821115614b7f57614b7f614ad9565b50601f01601f191660200190565b5f82601f830112614b9c575f80fd5b8135614baf614baa82614b67565b614b37565b818152846020838601011115614bc3575f80fd5b816020850160208301375f918101602001919091529392505050565b6001600160401b0381168114612205575f80fd5b8035611aa181614bdf565b6001600160a01b0381168114612205575f80fd5b5f60408284031215614c22575f80fd5b614c2a614aed565b9050614c3582614a0f565b81526020808301356001600160401b0380821115614c51575f80fd5b818501915085601f830112614c64575f80fd5b813581811115614c7657614c76614ad9565b8060051b9150614c87848301614b37565b8181529183018401918481019088841115614ca0575f80fd5b938501935b83851015614cca5784359250614cba83614bfe565b8282529385019390850190614ca5565b808688015250505050505092915050565b803561ffff81168114611aa1575f80fd5b5f805f805f805f60e0888a031215614d02575f80fd5b87356001600160401b0380821115614d18575f80fd5b614d248b838c01614b8d565b985060208a0135915080821115614d39575f80fd5b614d458b838c01614b8d565b9750614d5360408b01614bf3565b965060608a0135915080821115614d68575f80fd5b614d748b838c01614c12565b955060808a0135915080821115614d89575f80fd5b50614d968a828b01614c12565b935050614da560a08901614cdb565b9150614db360c08901614bf3565b905092959891949750929550565b5f805f8060808587031215614dd4575f80fd5b843593506020850135614de681614a4c565b9250614df460408601614a0f565b91506060850135614e0481614bfe565b939692955090935050565b5f60208284031215614e1f575f80fd5b813561359881614bdf565b5f8060408385031215614e3b575f80fd5b823591506020830135614e4d81614bfe565b809150509250929050565b5f60208284031215614e68575f80fd5b61359882614a0f565b634e487b7160e01b5f52602160045260245ffd5b60068110614e9557614e95614e71565b9052565b5f5b83811015614eb3578181015183820152602001614e9b565b50505f910152565b5f8151808452614ed2816020860160208601614e99565b601f01601f19169290920160200192915050565b60208152614ef8602082018351614e85565b5f6020830151610100806040850152614f15610120850183614ebb565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614f5460a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614fad575f80fd5b82356001600160401b0380821115614fc3575f80fd5b818501915085601f830112614fd6575f80fd5b813581811115614fe4575f80fd5b866020828501011115614ff5575f80fd5b60209290920196919550909350505050565b600181811c9082168061501b57607f821691505b602082108103614a0957634e487b7160e01b5f52602260045260245ffd5b602081016115ea8284614e85565b5f82601f830112615056575f80fd5b8151615064614baa82614b67565b818152846020838601011115615078575f80fd5b612686826020830160208701614e99565b5f60208284031215615099575f80fd5b81516001600160401b038111156150ae575f80fd5b61268684828501615047565b602081525f6135986020830184614ebb565b5f602082840312156150dc575f80fd5b5051919050565b60208101600483106150f7576150f7614e71565b91905290565b5f6020828403121561510d575f80fd5b813561359881614bfe565b5f808335601e1984360301811261512d575f80fd5b8301803591506001600160401b03821115615146575f80fd5b6020019150600581901b3603821315613f93575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615185575f80fd5b9190910192915050565b5f6060823603121561519f575f80fd5b6151a7614b15565b82356001600160401b03808211156151bd575f80fd5b6151c936838701614b8d565b835260208501359150808211156151de575f80fd5b506151eb36828601614b8d565b60208301525060408301356151ff81614bdf565b604082015292915050565b5f8251615185818460208701614e99565b601f82111561159757805f5260205f20601f840160051c810160208510156152405750805b601f840160051c820191505b818110156114c8575f815560010161524c565b81516001600160401b0381111561527857615278614ad9565b61528c816152868454615007565b8461521b565b602080601f8311600181146152bf575f84156152a85750858301515b5f19600386901b1c1916600185901b17855561172f565b5f85815260208120601f198616915b828110156152ed578886015182559484019460019091019084016152ce565b508582101561530a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561279d5761279d61531a565b604081525f6153606040830185614ebb565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036153905761539061531a565b6001019392505050565b6001600160401b038181168382160280821691908281146153bd576153bd61531a565b505092915050565b5f808335601e198436030181126153da575f80fd5b83016020810192503590506001600160401b038111156153f8575f80fd5b803603821315613f93575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156154e357848303601f19018952813536889003605e1901811261546a575f80fd5b8701606061547882806153c5565b8287526154888388018284615406565b92505050615498868301836153c5565b868303888801526154aa838284615406565b9250505060408083013592506154bf83614bdf565b6001600160401b039290921694909101939093529783019790830190600101615445565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561551481614bfe565b6001600160a01b031660608381019190915283013536849003601e1901811261553b575f80fd5b83016020810190356001600160401b03811115615556575f80fd5b8060051b3603821315615567575f80fd5b60808085015261557b60a08501828461542e565b95945050505050565b5f8261559e57634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176115ea576115ea61531a565b5f80604083850312156155cb575f80fd5b825191506020830151614e4d81614a4c565b5f81546155e981615007565b80855260206001838116801561560657600181146156205761564b565b60ff1985168884015283151560051b88018301955061564b565b865f52825f205f5b858110156156435781548a8201860152908301908401615628565b890184019650505b505050505092915050565b604081525f61536060408301856155dd565b602081525f61359860208301846155dd565b5f805f6060848603121561568c575f80fd5b83519250602084015161569e81614bdf565b60408501519092506156af81614bdf565b809150509250925092565b818382375f9101908152919050565b808201808211156115ea576115ea61531a565b5f80604083850312156156ed575f80fd5b82516001600160401b0380821115615703575f80fd5b9084019060608287031215615716575f80fd5b61571e614b15565b82518152602083015161573081614bfe565b6020820152604083015182811115615746575f80fd5b61575288828601615047565b6040830152508094505050506020830151614e4d81614a4c565b5f806040838503121561577d575f80fd5b825191506020830151614e4d81614bdf565b6001600160401b0382811682821603908082111561279d5761279d61531a565b5f602082840312156157bf575f80fd5b61359882614cdb565b5f602082840312156157d8575f80fd5b813560ff81168114613598575f80fd5b818103818111156115ea576115ea61531a565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158565784516001600160a01b0316825293830193600192909201919083019061582d565b509695505050505050565b60208152815160208201525f602083015160e06040840152615887610100840182614ebb565b90506040840151601f19808584030160608601526158a58383614ebb565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526158d583836157fb565b925060a08601519150808584030160c0860152506158f382826157fb565b91505060c084015161591060e08501826001600160401b03169052565b509392505050565b5f8060408385031215615929575f80fd5b8251915060208301516001600160401b03811115615945575f80fd5b61595185828601615047565b9150509250929050565b608081525f61596d6080830187614ebb565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036153905761539061531a56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212208c55df90a8c15efc920358718e40412a9fa567e0f6dfae1abf431d1fbf456ee564736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -920,25 +911,25 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Co return _NativeTokenStakingManager.Contract.CompleteDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "completeEndDelegation", delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "completeDelegatorRemoval", delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.CompleteEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteDelegatorRemoval(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteDelegatorRemoval(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.CompleteEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteDelegatorRemoval(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteDelegatorRemoval(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. @@ -1004,88 +995,88 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Co return _NativeTokenStakingManager.Contract.CompleteValidatorWeightUpdate(&_NativeTokenStakingManager.TransactOpts, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitializeEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "forceInitializeEndDelegation", delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitiateDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "forceInitiateDelegatorRemoval", delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateDelegatorRemoval(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateDelegatorRemoval(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "forceInitializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitiateDelegatorRemoval0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "forceInitiateDelegatorRemoval0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateDelegatorRemoval0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateDelegatorRemoval0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "forceInitializeEndValidation", validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitiateValidatorRemoval(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "forceInitiateValidatorRemoval", validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateValidatorRemoval(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateValidatorRemoval(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "forceInitializeEndValidation0", validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitiateValidatorRemoval0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "forceInitiateValidatorRemoval0", validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateValidatorRemoval0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateValidatorRemoval0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } // Initialize is a paid mutator transaction binding the contract method 0x0ba512d1. @@ -1109,151 +1100,151 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) In return _NativeTokenStakingManager.Contract.Initialize(&_NativeTokenStakingManager.TransactOpts, settings) } -// InitializeDelegatorRegistration is a paid mutator transaction binding the contract method 0xc599e24f. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeDelegatorRegistration(bytes32 validationID) payable returns(bytes32) -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeDelegatorRegistration(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeDelegatorRegistration", validationID) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messageIndex) } -// InitializeDelegatorRegistration is a paid mutator transaction binding the contract method 0xc599e24f. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeDelegatorRegistration(bytes32 validationID) payable returns(bytes32) -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeDelegatorRegistration(validationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, validationID) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeValidatorSet(&_NativeTokenStakingManager.TransactOpts, conversionData, messageIndex) } -// InitializeDelegatorRegistration is a paid mutator transaction binding the contract method 0xc599e24f. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeDelegatorRegistration(bytes32 validationID) payable returns(bytes32) -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeDelegatorRegistration(validationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, validationID) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeValidatorSet(&_NativeTokenStakingManager.TransactOpts, conversionData, messageIndex) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRegistration is a paid mutator transaction binding the contract method 0xcacd9755. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndDelegation", delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRegistration(bytes32 validationID) payable returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitiateDelegatorRegistration(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initiateDelegatorRegistration", validationID) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRegistration is a paid mutator transaction binding the contract method 0xcacd9755. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRegistration(bytes32 validationID) payable returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitiateDelegatorRegistration(validationID [32]byte) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, validationID) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRegistration is a paid mutator transaction binding the contract method 0xcacd9755. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRegistration(bytes32 validationID) payable returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitiateDelegatorRegistration(validationID [32]byte) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, validationID) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitiateDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initiateDelegatorRemoval", delegationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateDelegatorRemoval(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateDelegatorRemoval(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitiateDelegatorRemoval0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initiateDelegatorRemoval0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateDelegatorRemoval0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateDelegatorRemoval0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0x264dc603. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndValidation0", validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration) payable returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitiateValidatorRegistration(opts *bind.TransactOpts, nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, delegationFeeBips uint16, minStakeDuration uint64) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initiateValidatorRegistration", nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, delegationFeeBips, minStakeDuration) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0x264dc603. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration) payable returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitiateValidatorRegistration(nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, delegationFeeBips uint16, minStakeDuration uint64) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateValidatorRegistration(&_NativeTokenStakingManager.TransactOpts, nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, delegationFeeBips, minStakeDuration) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0x264dc603. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration) payable returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitiateValidatorRegistration(nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, delegationFeeBips uint16, minStakeDuration uint64) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateValidatorRegistration(&_NativeTokenStakingManager.TransactOpts, nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, delegationFeeBips, minStakeDuration) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0xaf2f5feb. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration) payable returns(bytes32) -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeValidatorRegistration(opts *bind.TransactOpts, registrationInput ValidatorRegistrationInput, delegationFeeBips uint16, minStakeDuration uint64) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeValidatorRegistration", registrationInput, delegationFeeBips, minStakeDuration) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitiateValidatorRemoval(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initiateValidatorRemoval", validationID, includeUptimeProof, messageIndex) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0xaf2f5feb. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration) payable returns(bytes32) -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeValidatorRegistration(registrationInput ValidatorRegistrationInput, delegationFeeBips uint16, minStakeDuration uint64) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeValidatorRegistration(&_NativeTokenStakingManager.TransactOpts, registrationInput, delegationFeeBips, minStakeDuration) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateValidatorRemoval(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0xaf2f5feb. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration) payable returns(bytes32) -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeValidatorRegistration(registrationInput ValidatorRegistrationInput, delegationFeeBips uint16, minStakeDuration uint64) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeValidatorRegistration(&_NativeTokenStakingManager.TransactOpts, registrationInput, delegationFeeBips, minStakeDuration) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateValidatorRemoval(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitiateValidatorRemoval0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initiateValidatorRemoval0", validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeValidatorSet(&_NativeTokenStakingManager.TransactOpts, conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateValidatorRemoval0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeValidatorSet(&_NativeTokenStakingManager.TransactOpts, conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateValidatorRemoval0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } // ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. @@ -1298,25 +1289,25 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Re return _NativeTokenStakingManager.Contract.ResendRegisterValidatorMessage(&_NativeTokenStakingManager.TransactOpts, validationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ResendUpdateDelegation(opts *bind.TransactOpts, delegationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "resendUpdateDelegation", delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ResendUpdateDelegator(opts *bind.TransactOpts, delegationID [32]byte) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "resendUpdateDelegator", delegationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ResendUpdateDelegation(delegationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ResendUpdateDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ResendUpdateDelegator(delegationID [32]byte) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ResendUpdateDelegator(&_NativeTokenStakingManager.TransactOpts, delegationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ResendUpdateDelegation(delegationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ResendUpdateDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ResendUpdateDelegator(delegationID [32]byte) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ResendUpdateDelegator(&_NativeTokenStakingManager.TransactOpts, delegationID) } // SubmitUptimeProof is a paid mutator transaction binding the contract method 0x25e1c776. @@ -1340,9 +1331,9 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Su return _NativeTokenStakingManager.Contract.SubmitUptimeProof(&_NativeTokenStakingManager.TransactOpts, validationID, messageIndex) } -// NativeTokenStakingManagerCompletedValidatorRegistrationIterator is returned from FilterCompletedValidatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedValidatorRegistration events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerCompletedValidatorRegistrationIterator struct { - Event *NativeTokenStakingManagerCompletedValidatorRegistration // Event containing the contract specifics and raw log +// NativeTokenStakingManagerCompletedDelegatorRegistrationIterator is returned from FilterCompletedDelegatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedDelegatorRegistration events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedDelegatorRegistrationIterator struct { + Event *NativeTokenStakingManagerCompletedDelegatorRegistration // 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 @@ -1356,7 +1347,7 @@ type NativeTokenStakingManagerCompletedValidatorRegistrationIterator struct { // 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 *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Next() bool { +func (it *NativeTokenStakingManagerCompletedDelegatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1365,7 +1356,7 @@ func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Next( if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerCompletedValidatorRegistration) + it.Event = new(NativeTokenStakingManagerCompletedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1380,7 +1371,7 @@ func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Next( // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerCompletedValidatorRegistration) + it.Event = new(NativeTokenStakingManagerCompletedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1396,53 +1387,61 @@ func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Next( } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedDelegatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedDelegatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerCompletedValidatorRegistration struct { +// NativeTokenStakingManagerCompletedDelegatorRegistration represents a CompletedDelegatorRegistration event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedDelegatorRegistration struct { + DelegationID [32]byte ValidationID [32]byte - NodeID []byte - Weight uint64 + StartTime *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// FilterCompletedDelegatorRegistration is a free log retrieval operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorRegistrationIterator, error) { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedDelegatorRegistration(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerCompletedDelegatorRegistrationIterator, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRegistration", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedDelegatorRegistration", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerCompletedValidatorRegistrationIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedDelegatorRegistrationIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedDelegatorRegistration", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// WatchCompletedDelegatorRegistration is a free log subscription operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedDelegatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedDelegatorRegistration, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRegistration", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedDelegatorRegistration", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1452,8 +1451,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchComple select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerCompletedValidatorRegistration) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { + event := new(NativeTokenStakingManagerCompletedDelegatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRegistration", log); err != nil { return err } event.Raw = log @@ -1474,21 +1473,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchComple }), nil } -// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// ParseCompletedDelegatorRegistration is a log parse operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*NativeTokenStakingManagerCompletedValidatorRegistration, error) { - event := new(NativeTokenStakingManagerCompletedValidatorRegistration) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedDelegatorRegistration(log types.Log) (*NativeTokenStakingManagerCompletedDelegatorRegistration, error) { + event := new(NativeTokenStakingManagerCompletedDelegatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerCompletedValidatorRemovalIterator is returned from FilterCompletedValidatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedValidatorRemoval events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerCompletedValidatorRemovalIterator struct { - Event *NativeTokenStakingManagerCompletedValidatorRemoval // Event containing the contract specifics and raw log +// NativeTokenStakingManagerCompletedDelegatorRemovalIterator is returned from FilterCompletedDelegatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedDelegatorRemoval events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedDelegatorRemovalIterator struct { + Event *NativeTokenStakingManagerCompletedDelegatorRemoval // 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 @@ -1502,7 +1501,7 @@ type NativeTokenStakingManagerCompletedValidatorRemovalIterator struct { // 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 *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Next() bool { +func (it *NativeTokenStakingManagerCompletedDelegatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1511,7 +1510,7 @@ func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Next() boo if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerCompletedValidatorRemoval) + it.Event = new(NativeTokenStakingManagerCompletedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1526,7 +1525,7 @@ func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Next() boo // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerCompletedValidatorRemoval) + it.Event = new(NativeTokenStakingManagerCompletedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1542,51 +1541,62 @@ func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Next() boo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedDelegatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedDelegatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerCompletedValidatorRemoval struct { +// NativeTokenStakingManagerCompletedDelegatorRemoval represents a CompletedDelegatorRemoval event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedDelegatorRemoval struct { + DelegationID [32]byte ValidationID [32]byte + Rewards *big.Int + Fees *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// FilterCompletedDelegatorRemoval is a free log retrieval operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorRemovalIterator, error) { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedDelegatorRemoval(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerCompletedDelegatorRemovalIterator, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRemoval", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerCompletedValidatorRemovalIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedDelegatorRemovalIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedDelegatorRemoval", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// WatchCompletedDelegatorRemoval is a free log subscription operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedDelegatorRemoval(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedDelegatorRemoval, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRemoval", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1596,8 +1606,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchComple select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerCompletedValidatorRemoval) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { + event := new(NativeTokenStakingManagerCompletedDelegatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRemoval", log); err != nil { return err } event.Raw = log @@ -1618,21 +1628,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchComple }), nil } -// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// ParseCompletedDelegatorRemoval is a log parse operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorRemoval(log types.Log) (*NativeTokenStakingManagerCompletedValidatorRemoval, error) { - event := new(NativeTokenStakingManagerCompletedValidatorRemoval) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedDelegatorRemoval(log types.Log) (*NativeTokenStakingManagerCompletedDelegatorRemoval, error) { + event := new(NativeTokenStakingManagerCompletedDelegatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator is returned from FilterCompletedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for CompletedValidatorWeightUpdate events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator struct { - Event *NativeTokenStakingManagerCompletedValidatorWeightUpdate // Event containing the contract specifics and raw log +// NativeTokenStakingManagerCompletedValidatorRegistrationIterator is returned from FilterCompletedValidatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedValidatorRegistration events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorRegistrationIterator struct { + Event *NativeTokenStakingManagerCompletedValidatorRegistration // 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 @@ -1646,7 +1656,7 @@ type NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator struct { // 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 *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() bool { +func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1655,7 +1665,7 @@ func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Next( if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) + it.Event = new(NativeTokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1670,7 +1680,7 @@ func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Next( // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) + it.Event = new(NativeTokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1686,53 +1696,53 @@ func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Next( } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerCompletedValidatorWeightUpdate struct { +// NativeTokenStakingManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorRegistration struct { ValidationID [32]byte - Nonce uint64 + NodeID []byte Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedValidatorRegistrationIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } @@ -1742,8 +1752,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchComple select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { + event := new(NativeTokenStakingManagerCompletedValidatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -1764,21 +1774,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchComple }), nil } -// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorWeightUpdate(log types.Log) (*NativeTokenStakingManagerCompletedValidatorWeightUpdate, error) { - event := new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*NativeTokenStakingManagerCompletedValidatorRegistration, error) { + event := new(NativeTokenStakingManagerCompletedValidatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerDelegationEndedIterator is returned from FilterDelegationEnded and is used to iterate over the raw logs and unpacked data for DelegationEnded events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegationEndedIterator struct { - Event *NativeTokenStakingManagerDelegationEnded // Event containing the contract specifics and raw log +// NativeTokenStakingManagerCompletedValidatorRemovalIterator is returned from FilterCompletedValidatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedValidatorRemoval events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorRemovalIterator struct { + Event *NativeTokenStakingManagerCompletedValidatorRemoval // 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 @@ -1792,7 +1802,7 @@ type NativeTokenStakingManagerDelegationEndedIterator struct { // 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 *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { +func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1801,7 +1811,7 @@ func (it *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegationEnded) + it.Event = new(NativeTokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1816,7 +1826,7 @@ func (it *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegationEnded) + it.Event = new(NativeTokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1832,62 +1842,51 @@ func (it *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegationEndedIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegationEndedIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegationEnded represents a DelegationEnded event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegationEnded struct { - DelegationID [32]byte +// NativeTokenStakingManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorRemoval struct { ValidationID [32]byte - Rewards *big.Int - Fees *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterDelegationEnded is a free log retrieval operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegationEnded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerDelegationEndedIterator, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorRemovalIterator, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegationEndedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegationEnded", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedValidatorRemovalIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchDelegationEnded is a free log subscription operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegationEnded(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegationEnded, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -1897,8 +1896,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerDelegationEnded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { + event := new(NativeTokenStakingManagerCompletedValidatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -1919,21 +1918,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegationEnded is a log parse operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegationEnded(log types.Log) (*NativeTokenStakingManagerDelegationEnded, error) { - event := new(NativeTokenStakingManagerDelegationEnded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorRemoval(log types.Log) (*NativeTokenStakingManagerCompletedValidatorRemoval, error) { + event := new(NativeTokenStakingManagerCompletedValidatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerDelegatorAddedIterator is returned from FilterDelegatorAdded and is used to iterate over the raw logs and unpacked data for DelegatorAdded events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorAddedIterator struct { - Event *NativeTokenStakingManagerDelegatorAdded // Event containing the contract specifics and raw log +// NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator is returned from FilterCompletedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for CompletedValidatorWeightUpdate events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator struct { + Event *NativeTokenStakingManagerCompletedValidatorWeightUpdate // 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 @@ -1947,7 +1946,7 @@ type NativeTokenStakingManagerDelegatorAddedIterator struct { // 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 *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { +func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1956,7 +1955,7 @@ func (it *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorAdded) + it.Event = new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1971,7 +1970,7 @@ func (it *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorAdded) + it.Event = new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1987,73 +1986,53 @@ func (it *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegatorAddedIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegatorAddedIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegatorAdded represents a DelegatorAdded event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorAdded struct { - DelegationID [32]byte - ValidationID [32]byte - DelegatorAddress common.Address - Nonce uint64 - ValidatorWeight uint64 - DelegatorWeight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorAdded is a free log retrieval operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorAdded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*NativeTokenStakingManagerDelegatorAddedIterator, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegatorAddedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorAdded", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil } -// WatchDelegatorAdded is a free log subscription operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegatorAdded(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegatorAdded, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } @@ -2063,8 +2042,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerDelegatorAdded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { + event := new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { return err } event.Raw = log @@ -2085,21 +2064,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegatorAdded is a log parse operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegatorAdded(log types.Log) (*NativeTokenStakingManagerDelegatorAdded, error) { - event := new(NativeTokenStakingManagerDelegatorAdded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorWeightUpdate(log types.Log) (*NativeTokenStakingManagerCompletedValidatorWeightUpdate, error) { + event := new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerDelegatorRegisteredIterator is returned from FilterDelegatorRegistered and is used to iterate over the raw logs and unpacked data for DelegatorRegistered events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorRegisteredIterator struct { - Event *NativeTokenStakingManagerDelegatorRegistered // Event containing the contract specifics and raw log +// NativeTokenStakingManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitializedIterator struct { + Event *NativeTokenStakingManagerInitialized // 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 @@ -2113,7 +2092,7 @@ type NativeTokenStakingManagerDelegatorRegisteredIterator struct { // 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 *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { +func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2122,7 +2101,7 @@ func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorRegistered) + it.Event = new(NativeTokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2137,7 +2116,7 @@ func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorRegistered) + it.Event = new(NativeTokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2153,61 +2132,41 @@ func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Error() error { +func (it *NativeTokenStakingManagerInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Close() error { +func (it *NativeTokenStakingManagerInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegatorRegistered represents a DelegatorRegistered event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorRegistered struct { - DelegationID [32]byte - ValidationID [32]byte - StartTime *big.Int - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerInitialized represents a Initialized event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRegistered is a free log retrieval operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorRegistered(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerDelegatorRegisteredIterator, error) { - - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } +// Solidity: event Initialized(uint64 version) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*NativeTokenStakingManagerInitializedIterator, error) { - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "Initialized") if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegatorRegisteredIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorRegistered", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil } -// WatchDelegatorRegistered is a free log subscription operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegatorRegistered(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegatorRegistered, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { - - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } +// Solidity: event Initialized(uint64 version) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitialized) (event.Subscription, error) { - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "Initialized") if err != nil { return nil, err } @@ -2217,8 +2176,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerDelegatorRegistered) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { + event := new(NativeTokenStakingManagerInitialized) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { return err } event.Raw = log @@ -2239,21 +2198,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegatorRegistered is a log parse operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegatorRegistered(log types.Log) (*NativeTokenStakingManagerDelegatorRegistered, error) { - event := new(NativeTokenStakingManagerDelegatorRegistered) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { +// Solidity: event Initialized(uint64 version) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitialized(log types.Log) (*NativeTokenStakingManagerInitialized, error) { + event := new(NativeTokenStakingManagerInitialized) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerDelegatorRemovalInitializedIterator is returned from FilterDelegatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for DelegatorRemovalInitialized events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorRemovalInitializedIterator struct { - Event *NativeTokenStakingManagerDelegatorRemovalInitialized // Event containing the contract specifics and raw log +// NativeTokenStakingManagerInitiatedDelegatorRegistrationIterator is returned from FilterInitiatedDelegatorRegistration and is used to iterate over the raw logs and unpacked data for InitiatedDelegatorRegistration events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedDelegatorRegistrationIterator struct { + Event *NativeTokenStakingManagerInitiatedDelegatorRegistration // 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 @@ -2267,7 +2226,7 @@ type NativeTokenStakingManagerDelegatorRemovalInitializedIterator struct { // 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 *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() bool { +func (it *NativeTokenStakingManagerInitiatedDelegatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2276,7 +2235,7 @@ func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() b if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorRemovalInitialized) + it.Event = new(NativeTokenStakingManagerInitiatedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2291,7 +2250,7 @@ func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() b // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorRemovalInitialized) + it.Event = new(NativeTokenStakingManagerInitiatedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2307,28 +2266,33 @@ func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() b } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Error() error { +func (it *NativeTokenStakingManagerInitiatedDelegatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Close() error { +func (it *NativeTokenStakingManagerInitiatedDelegatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorRemovalInitialized struct { - DelegationID [32]byte - ValidationID [32]byte - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerInitiatedDelegatorRegistration represents a InitiatedDelegatorRegistration event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedDelegatorRegistration struct { + DelegationID [32]byte + ValidationID [32]byte + DelegatorAddress common.Address + Nonce uint64 + ValidatorWeight uint64 + DelegatorWeight uint64 + SetWeightMessageID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// FilterInitiatedDelegatorRegistration is a free log retrieval operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerDelegatorRemovalInitializedIterator, error) { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitiatedDelegatorRegistration(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*NativeTokenStakingManagerInitiatedDelegatorRegistrationIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -2338,18 +2302,22 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDeleg for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) + } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "InitiatedDelegatorRegistration", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegatorRemovalInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerInitiatedDelegatorRegistrationIterator{contract: _NativeTokenStakingManager.contract, event: "InitiatedDelegatorRegistration", logs: logs, sub: sub}, nil } -// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// WatchInitiatedDelegatorRegistration is a free log subscription operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegatorRemovalInitialized, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitiatedDelegatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitiatedDelegatorRegistration, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -2359,8 +2327,12 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) + } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "InitiatedDelegatorRegistration", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } @@ -2370,8 +2342,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerDelegatorRemovalInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { + event := new(NativeTokenStakingManagerInitiatedDelegatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRegistration", log); err != nil { return err } event.Raw = log @@ -2392,21 +2364,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// ParseInitiatedDelegatorRegistration is a log parse operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegatorRemovalInitialized(log types.Log) (*NativeTokenStakingManagerDelegatorRemovalInitialized, error) { - event := new(NativeTokenStakingManagerDelegatorRemovalInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitiatedDelegatorRegistration(log types.Log) (*NativeTokenStakingManagerInitiatedDelegatorRegistration, error) { + event := new(NativeTokenStakingManagerInitiatedDelegatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerInitializedIterator struct { - Event *NativeTokenStakingManagerInitialized // Event containing the contract specifics and raw log +// NativeTokenStakingManagerInitiatedDelegatorRemovalIterator is returned from FilterInitiatedDelegatorRemoval and is used to iterate over the raw logs and unpacked data for InitiatedDelegatorRemoval events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedDelegatorRemovalIterator struct { + Event *NativeTokenStakingManagerInitiatedDelegatorRemoval // 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 @@ -2420,7 +2392,7 @@ type NativeTokenStakingManagerInitializedIterator struct { // 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 *NativeTokenStakingManagerInitializedIterator) Next() bool { +func (it *NativeTokenStakingManagerInitiatedDelegatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2429,7 +2401,7 @@ func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerInitialized) + it.Event = new(NativeTokenStakingManagerInitiatedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2444,7 +2416,7 @@ func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerInitialized) + it.Event = new(NativeTokenStakingManagerInitiatedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2460,41 +2432,60 @@ func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerInitializedIterator) Error() error { +func (it *NativeTokenStakingManagerInitiatedDelegatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerInitializedIterator) Close() error { +func (it *NativeTokenStakingManagerInitiatedDelegatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerInitialized represents a Initialized event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerInitialized struct { - Version uint64 - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerInitiatedDelegatorRemoval represents a InitiatedDelegatorRemoval event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedDelegatorRemoval struct { + DelegationID [32]byte + ValidationID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// FilterInitiatedDelegatorRemoval is a free log retrieval operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event Initialized(uint64 version) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*NativeTokenStakingManagerInitializedIterator, error) { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitiatedDelegatorRemoval(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerInitiatedDelegatorRemovalIterator, error) { - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "Initialized") + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "InitiatedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerInitiatedDelegatorRemovalIterator{contract: _NativeTokenStakingManager.contract, event: "InitiatedDelegatorRemoval", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// WatchInitiatedDelegatorRemoval is a free log subscription operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event Initialized(uint64 version) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitialized) (event.Subscription, error) { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitiatedDelegatorRemoval(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitiatedDelegatorRemoval, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "Initialized") + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "InitiatedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -2504,8 +2495,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitia select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(NativeTokenStakingManagerInitiatedDelegatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRemoval", log); err != nil { return err } event.Raw = log @@ -2526,12 +2517,12 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitia }), nil } -// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// ParseInitiatedDelegatorRemoval is a log parse operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event Initialized(uint64 version) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitialized(log types.Log) (*NativeTokenStakingManagerInitialized, error) { - event := new(NativeTokenStakingManagerInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitiatedDelegatorRemoval(log types.Log) (*NativeTokenStakingManagerInitiatedDelegatorRemoval, error) { + event := new(NativeTokenStakingManagerInitiatedDelegatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRemoval", log); err != nil { return nil, err } event.Raw = log diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go index dcd990e46..9183e6ac5 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -80,19 +80,10 @@ type ValidatorMessagesValidationPeriod struct { Weight uint64 } -// ValidatorRegistrationInput is an auto generated low-level Go binding around an user-defined struct. -type ValidatorRegistrationInput struct { - NodeID []byte - BlsPublicKey []byte - RegistrationExpiry uint64 - RemainingBalanceOwner PChainOwner - DisableOwner PChainOwner -} - // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"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\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a26469706673582212200791f69edd437d04d0e564251d830362412ff8a5d0aa30e4b69042271c35f22c64736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"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\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initiateValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b5060405161388a38038061388a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b61373d8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063b771b3bc116100bf578063d588c18f11610079578063d588c18f14610312578063d5f20ff614610325578063df93d8de14610345578063ed285ae11461034f578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063b771b3bc1461025a578063bb0b193814610268578063bc5fbfec146102b3578063bee0a03f146102c7578063c974d1b6146102da578063ce161f14146102e2575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d94014610221578063a3a65e4814610234578063b6e6a2ca14610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a366004612835565b610388565b005b61015f61016f366004612864565b610626565b5f805160206136c8833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f3660046128b2565b610bcc565b6101846102423660046128b2565b610bdf565b61015f610255366004612835565b610ddd565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f805160206136c883398151915281565b61015f6102d5366004612835565b610df1565b6101cb601481565b6102f56102f03660046128b2565b610f32565b604080519283526001600160401b0390911660208301520161018e565b61015f6103203660046128e6565b6110c1565b610338610333366004612835565b6111cf565b60405161018e91906129a3565b61029b6202a30081565b61018461035d366004612c47565b611329565b61015f610370366004612d0b565b61134b565b610184610383366004612d26565b611385565b5f8181525f805160206136e883398151915260205260408082208151610100810190925280545f805160206136c883398151915293929190829060ff1660058111156103d6576103d6612922565b60058111156103e7576103e7612922565b81526020016001820180546103fb90612d91565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612d91565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612922565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612dc9565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612e21565b6040518263ffffffff1660e01b81526004016105e09190612e52565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612e64565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206136c88339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612e64565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612d0b565b6001600160a01b03161461075c576107376060840160408501612d0b565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612e7b565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612e7b565b8363ffffffff168181106107a3576107a3612ec0565b90506020028101906107b59190612ed4565b6107be90612ef2565b80516040519192505f9160068801916107d691612f6d565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612e52565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612f6d565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612e64565b90508086600601835f01516040516108a59190612f6d565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612fc9565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610954908561309c565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f9291906130bc565b60405180910390a25050806109a3906130e6565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff1683613108565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a49876113e1565b604001516040518263ffffffff1660e01b8152600401610a699190612e52565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612e64565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae2919061325e565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612e21565b90505f600282604051610b369190612f6d565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612e64565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16114f7565b610bca5f611552565b565b5f80610bd7836115c2565b509392505050565b5f5f805160206136c8833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610c13876113e1565b604001516040518263ffffffff1660e01b8152600401610c339190612e52565b6040805180830381865af4158015610c4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c719190613301565b9150915080610c9757604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610cb190612d91565b90505f03610cd55760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610cfc57610cfc612922565b14610d2f575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612dc9565b5f8281526004840160205260408120610d47916127a1565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610dcd93600190910192600160c01b909204169061339b565b60405180910390a2509392505050565b610de56114f7565b610dee8161197a565b50565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206136c88339815191529190610e3890612d91565b90505f03610e5c5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610e8357610e83612922565b14610eb6575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612dc9565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610eed92016133ad565b6020604051808303815f875af1158015610f09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2d9190612e64565b505050565b5f805f610f3e846113e1565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401610f7e9190612e52565b606060405180830381865af4158015610f99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbd91906133bf565b9250925092505f610fd85f805160206136c883398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561102c57604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9906110ac90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111055750825b90505f826001600160401b031660011480156111205750303b155b90508115801561112e575080155b1561114c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561117657845460ff60401b1916600160401b1785555b6111808787611c70565b83156111c657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6111d76127d8565b5f8281525f805160206136e88339815191526020526040908190208151610100810190925280545f805160206136c8833981519152929190829060ff16600581111561122557611225612922565b600581111561123657611236612922565b815260200160018201805461124a90612d91565b80601f016020809104026020016040519081016040528092919081815260200182805461127690612d91565b80156112c15780601f10611298576101008083540402835291602001916112c1565b820191905f5260205f20905b8154815290600101906020018083116112a457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b5f6113326114f7565b611340878787878787611c8e565b979650505050505050565b6113536114f7565b6001600160a01b03811661137c57604051631e4fbdf760e01b81525f600482015260240161051d565b610dee81611552565b6040515f905f805160206136c8833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906113c890869086906133ff565b9081526020016040518091039020549150505b92915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611445573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261146c919081019061340e565b915091508061148e57604051636b2f19e960e01b815260040160405180910390fd5b8151156114b4578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156114f0576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115297f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f6115cb6127d8565b5f805160206136c88339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6115fe886113e1565b604001516040518263ffffffff1660e01b815260040161161e9190612e52565b6040805180830381865af4158015611638573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061165c9190613301565b91509150801561168357604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff909116908111156116bb576116bb612922565b60058111156116cc576116cc612922565b81526020016001820180546116e090612d91565b80601f016020809104026020016040519081016040528092919081815260200182805461170c90612d91565b80156117575780601f1061172e57610100808354040283529160200191611757565b820191905f5260205f20905b81548152906001019060200180831161173a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156117cf576117cf612922565b141580156117f057506001815160058111156117ed576117ed612922565b14155b1561181157805160405163170cc93360e21b815261051d9190600401612dc9565b60038151600581111561182657611826612922565b036118345760048152611839565b600581525b83600601816020015160405161184f9190612f6d565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561189257611892612922565b0217905550602082015160018201906118ab9082612fc9565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f805160206136e883398151915260205260408082208151610100810190925280545f805160206136c883398151915293929190829060ff1660058111156119c8576119c8612922565b60058111156119d9576119d9612922565b81526020016001820180546119ed90612d91565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1990612d91565b8015611a645780601f10611a3b57610100808354040283529160200191611a64565b820191905f5260205f20905b815481529060010190602001808311611a4757829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611adc57611adc612922565b14611b0f575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612dc9565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611b5457611b54612922565b021790555060208201516001820190611b6d9082612fc9565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611c0d8482612061565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611c62939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b611c78612238565b611c8182612281565b611c8a8161229a565b5050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611cd257604051637fab81e560e01b815260040160405180910390fd5b5f805160206136c8833981519152426001600160401b038716111580611d0d5750611d006202a3004261349b565b866001600160401b031610155b15611d3657604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611d5990600160401b9004821685831661349b565b1115611d8357604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611d8c856122ab565b611d95846122ab565b8651603014611dbc5786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611ddf5787604051633e08a12560e11b815260040161051d9190612e52565b5f801b8160060189604051611df49190612f6d565b90815260200160405180910390205414611e23578760405163a41f772f60e01b815260040161051d9190612e52565b611e2d835f6123ca565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611ead9190613514565b5f60405180830381865af4158015611ec7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611eee91908101906135c3565b5f82815260048601602052604090209193509150611f0c8282612fc9565b5081836006018b604051611f209190612f6d565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611f5c908590600401612e52565b6020604051808303815f875af1158015611f78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9c9190612e64565b5f8481526005860160205260409020805460ff19166001908117825591925001611fc68c82612fc9565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf9061204a908e9085908e908c90613606565b60405180910390a250909998505050505050505050565b5f8281525f805160206136e8833981519152602052604081206002015481905f805160206136c883398151915290600160c01b90046001600160401b03166120a985826123ca565b5f6120b387612634565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612157573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261217e9190810190612e21565b6040518263ffffffff1660e01b815260040161219a9190612e52565b6020604051808303815f875af11580156121b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121da9190612e64565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b612289612238565b6122916126a9565b610dee816126b1565b6122a2612238565b610dee81612799565b805163ffffffff161580156122c4575060208101515115155b156122f857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561233b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b816020015151811015611c8a57602082015161235b60018361363e565b8151811061236b5761236b612ec0565b60200260200101516001600160a01b03168260200151828151811061239257612392612ec0565b60200260200101516001600160a01b031610156123c257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161233e565b5f805160206136c88339815191525f6001600160401b0380841690851611156123fe576123f78385613651565b905061240b565b6124088484613651565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580612478575060018401548151612474916001600160401b03169061349b565b8210155b156124a0576001600160401b03808416606083015282825260408201511660208201526124bf565b82816060018181516124b2919061309c565b6001600160401b03169052505b60608101516124cf906064613108565b602082015160018601546001600160401b0392909216916124fa9190600160401b900460ff16613108565b6001600160401b0316101561253357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b8581604001818151612545919061309c565b6001600160401b0316905250604081018051869190612565908390613651565b6001600160401b03169052506001840154604082015160649161259391600160401b90910460ff1690613108565b6001600160401b031610156125cc576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f805160206136e88339815191526020526040812060020180545f805160206136c8833981519152919060089061267e90600160401b90046001600160401b0316613671565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612238565b6126b9612238565b80355f805160206136c883398151915290815560146126de606084016040850161368c565b60ff1611806126fd57506126f8606083016040840161368c565b60ff16155b1561273157612712606083016040840161368c565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b612741606083016040840161368c565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561277260408301602084016136ac565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611353612238565b5080546127ad90612d91565b5f825580601f106127bc575050565b601f0160209004905f5260205f2090810190610dee919061281d565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115612831575f815560010161281e565b5090565b5f60208284031215612845575f80fd5b5035919050565b803563ffffffff8116811461285f575f80fd5b919050565b5f8060408385031215612875575f80fd5b82356001600160401b0381111561288a575f80fd5b83016080818603121561289b575f80fd5b91506128a96020840161284c565b90509250929050565b5f602082840312156128c2575f80fd5b6128cb8261284c565b9392505050565b6001600160a01b0381168114610dee575f80fd5b5f8082840360808112156128f8575f80fd5b6060811215612905575f80fd5b508291506060830135612917816128d2565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6006811061295257634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612970578181015183820152602001612958565b50505f910152565b5f815180845261298f816020860160208601612956565b601f01601f19169290920160200192915050565b602081526129b5602082018351612936565b5f60208301516101008060408501526129d2610120850183612978565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612a1160a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715612a8f57612a8f612a59565b60405290565b604051606081016001600160401b0381118282101715612a8f57612a8f612a59565b604051601f8201601f191681016001600160401b0381118282101715612adf57612adf612a59565b604052919050565b5f6001600160401b03821115612aff57612aff612a59565b50601f01601f191660200190565b5f82601f830112612b1c575f80fd5b8135612b2f612b2a82612ae7565b612ab7565b818152846020838601011115612b43575f80fd5b816020850160208301375f918101602001919091529392505050565b6001600160401b0381168114610dee575f80fd5b803561285f81612b5f565b5f60408284031215612b8e575f80fd5b612b96612a6d565b9050612ba18261284c565b81526020808301356001600160401b0380821115612bbd575f80fd5b818501915085601f830112612bd0575f80fd5b813581811115612be257612be2612a59565b8060051b9150612bf3848301612ab7565b8181529183018401918481019088841115612c0c575f80fd5b938501935b83851015612c365784359250612c26836128d2565b8282529385019390850190612c11565b808688015250505050505092915050565b5f805f805f8060c08789031215612c5c575f80fd5b86356001600160401b0380821115612c72575f80fd5b612c7e8a838b01612b0d565b97506020890135915080821115612c93575f80fd5b612c9f8a838b01612b0d565b9650612cad60408a01612b73565b95506060890135915080821115612cc2575f80fd5b612cce8a838b01612b7e565b94506080890135915080821115612ce3575f80fd5b50612cf089828a01612b7e565b925050612cff60a08801612b73565b90509295509295509295565b5f60208284031215612d1b575f80fd5b81356128cb816128d2565b5f8060208385031215612d37575f80fd5b82356001600160401b0380821115612d4d575f80fd5b818501915085601f830112612d60575f80fd5b813581811115612d6e575f80fd5b866020828501011115612d7f575f80fd5b60209290920196919550909350505050565b600181811c90821680612da557607f821691505b602082108103612dc357634e487b7160e01b5f52602260045260245ffd5b50919050565b602081016113db8284612936565b5f82601f830112612de6575f80fd5b8151612df4612b2a82612ae7565b818152846020838601011115612e08575f80fd5b612e19826020830160208701612956565b949350505050565b5f60208284031215612e31575f80fd5b81516001600160401b03811115612e46575f80fd5b612e1984828501612dd7565b602081525f6128cb6020830184612978565b5f60208284031215612e74575f80fd5b5051919050565b5f808335601e19843603018112612e90575f80fd5b8301803591506001600160401b03821115612ea9575f80fd5b6020019150600581901b3603821315612231575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612ee8575f80fd5b9190910192915050565b5f60608236031215612f02575f80fd5b612f0a612a95565b82356001600160401b0380821115612f20575f80fd5b612f2c36838701612b0d565b83526020850135915080821115612f41575f80fd5b50612f4e36828601612b0d565b6020830152506040830135612f6281612b5f565b604082015292915050565b5f8251612ee8818460208701612956565b601f821115610f2d57805f5260205f20601f840160051c81016020851015612fa35750805b601f840160051c820191505b81811015612fc2575f8155600101612faf565b5050505050565b81516001600160401b03811115612fe257612fe2612a59565b612ff681612ff08454612d91565b84612f7e565b602080601f831160018114613029575f84156130125750858301515b5f19600386901b1c1916600185901b178555613080565b5f85815260208120601f198616915b8281101561305757888601518255948401946001909101908401613038565b508582101561307457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156114f0576114f0613088565b604081525f6130ce6040830185612978565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036130fe576130fe613088565b6001019392505050565b6001600160401b0381811683821602808216919082811461312b5761312b613088565b505092915050565b5f808335601e19843603018112613148575f80fd5b83016020810192503590506001600160401b03811115613166575f80fd5b803603821315612231575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561325157848303601f19018952813536889003605e190181126131d8575f80fd5b870160606131e68280613133565b8287526131f68388018284613174565b9250505061320686830183613133565b86830388880152613218838284613174565b92505050604080830135925061322d83612b5f565b6001600160401b0392909216949091019390935297830197908301906001016131b3565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135613282816128d2565b6001600160a01b031660608381019190915283013536849003601e190181126132a9575f80fd5b83016020810190356001600160401b038111156132c4575f80fd5b8060051b36038213156132d5575f80fd5b6080808501526132e960a08501828461319c565b95945050505050565b8051801515811461285f575f80fd5b5f8060408385031215613312575f80fd5b825191506128a9602084016132f2565b5f815461332e81612d91565b80855260206001838116801561334b576001811461336557613390565b60ff1985168884015283151560051b880183019550613390565b865f52825f205f5b858110156133885781548a820186015290830190840161336d565b890184019650505b505050505092915050565b604081525f6130ce6040830185613322565b602081525f6128cb6020830184613322565b5f805f606084860312156133d1575f80fd5b8351925060208401516133e381612b5f565b60408501519092506133f481612b5f565b809150509250925092565b818382375f9101908152919050565b5f806040838503121561341f575f80fd5b82516001600160401b0380821115613435575f80fd5b9084019060608287031215613448575f80fd5b613450612a95565b825181526020830151613462816128d2565b6020820152604083015182811115613478575f80fd5b61348488828601612dd7565b60408301525093506128a9915050602084016132f2565b808201808211156113db576113db613088565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135095784516001600160a01b031682529383019360019290920191908301906134e0565b509695505050505050565b60208152815160208201525f602083015160e0604084015261353a610100840182612978565b90506040840151601f19808584030160608601526135588383612978565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261358883836134ae565b925060a08601519150808584030160c0860152506135a682826134ae565b91505060c0840151610bd760e08501826001600160401b03169052565b5f80604083850312156135d4575f80fd5b8251915060208301516001600160401b038111156135f0575f80fd5b6135fc85828601612dd7565b9150509250929050565b608081525f6136186080830187612978565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b818103818111156113db576113db613088565b6001600160401b038281168282160390808211156114f0576114f0613088565b5f6001600160401b038083168181036130fe576130fe613088565b5f6020828403121561369c575f80fd5b813560ff811681146128cb575f80fd5b5f602082840312156136bc575f80fd5b81356128cb81612b5f56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a264697066735822122052f4c0f8e0b9626ebc248c9a5bbfe5d04d9af9052f4c89dacae6343f5fb139d564736f6c63430008190033", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. @@ -721,67 +712,67 @@ func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) Initialize(set return _PoAValidatorManager.Contract.Initialize(&_PoAValidatorManager.TransactOpts, settings, initialOwner) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x97fb70d4. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeEndValidation(bytes32 validationID) returns() -func (_PoAValidatorManager *PoAValidatorManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { - return _PoAValidatorManager.contract.Transact(opts, "initializeEndValidation", validationID) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_PoAValidatorManager *PoAValidatorManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x97fb70d4. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeEndValidation(bytes32 validationID) returns() -func (_PoAValidatorManager *PoAValidatorManagerSession) InitializeEndValidation(validationID [32]byte) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.InitializeEndValidation(&_PoAValidatorManager.TransactOpts, validationID) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_PoAValidatorManager *PoAValidatorManagerSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.InitializeValidatorSet(&_PoAValidatorManager.TransactOpts, conversionData, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x97fb70d4. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeEndValidation(bytes32 validationID) returns() -func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) InitializeEndValidation(validationID [32]byte) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.InitializeEndValidation(&_PoAValidatorManager.TransactOpts, validationID) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.InitializeValidatorSet(&_PoAValidatorManager.TransactOpts, conversionData, messageIndex) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x9ba96b86. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0xed285ae1. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint64 weight) returns(bytes32 validationID) -func (_PoAValidatorManager *PoAValidatorManagerTransactor) InitializeValidatorRegistration(opts *bind.TransactOpts, registrationInput ValidatorRegistrationInput, weight uint64) (*types.Transaction, error) { - return _PoAValidatorManager.contract.Transact(opts, "initializeValidatorRegistration", registrationInput, weight) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint64 weight) returns(bytes32 validationID) +func (_PoAValidatorManager *PoAValidatorManagerTransactor) InitiateValidatorRegistration(opts *bind.TransactOpts, nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, weight uint64) (*types.Transaction, error) { + return _PoAValidatorManager.contract.Transact(opts, "initiateValidatorRegistration", nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, weight) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x9ba96b86. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0xed285ae1. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint64 weight) returns(bytes32 validationID) -func (_PoAValidatorManager *PoAValidatorManagerSession) InitializeValidatorRegistration(registrationInput ValidatorRegistrationInput, weight uint64) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.InitializeValidatorRegistration(&_PoAValidatorManager.TransactOpts, registrationInput, weight) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint64 weight) returns(bytes32 validationID) +func (_PoAValidatorManager *PoAValidatorManagerSession) InitiateValidatorRegistration(nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, weight uint64) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.InitiateValidatorRegistration(&_PoAValidatorManager.TransactOpts, nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, weight) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x9ba96b86. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0xed285ae1. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint64 weight) returns(bytes32 validationID) -func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) InitializeValidatorRegistration(registrationInput ValidatorRegistrationInput, weight uint64) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.InitializeValidatorRegistration(&_PoAValidatorManager.TransactOpts, registrationInput, weight) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint64 weight) returns(bytes32 validationID) +func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) InitiateValidatorRegistration(nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, weight uint64) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.InitiateValidatorRegistration(&_PoAValidatorManager.TransactOpts, nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, weight) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb6e6a2ca. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_PoAValidatorManager *PoAValidatorManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _PoAValidatorManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID) returns() +func (_PoAValidatorManager *PoAValidatorManagerTransactor) InitiateValidatorRemoval(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { + return _PoAValidatorManager.contract.Transact(opts, "initiateValidatorRemoval", validationID) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb6e6a2ca. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_PoAValidatorManager *PoAValidatorManagerSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.InitializeValidatorSet(&_PoAValidatorManager.TransactOpts, conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID) returns() +func (_PoAValidatorManager *PoAValidatorManagerSession) InitiateValidatorRemoval(validationID [32]byte) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.InitiateValidatorRemoval(&_PoAValidatorManager.TransactOpts, validationID) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb6e6a2ca. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.InitializeValidatorSet(&_PoAValidatorManager.TransactOpts, conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID) returns() +func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) InitiateValidatorRemoval(validationID [32]byte) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.InitiateValidatorRemoval(&_PoAValidatorManager.TransactOpts, validationID) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. diff --git a/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go b/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go index 2fc70bcaf..13e84fd3c 100644 --- a/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go +++ b/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go @@ -63,7 +63,7 @@ type ValidatorMessagesValidationPeriod struct { // IPoSValidatorManagerMetaData contains all meta data concerning the IPoSValidatorManager contract. var IPoSValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // IPoSValidatorManagerABI is the input ABI used to generate the binding from. @@ -296,214 +296,214 @@ func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) CompleteDele return _IPoSValidatorManager.Contract.CompleteDelegatorRegistration(&_IPoSValidatorManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) CompleteEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "completeEndDelegation", delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) CompleteDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "completeDelegatorRemoval", delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.CompleteEndDelegation(&_IPoSValidatorManager.TransactOpts, delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) CompleteDelegatorRemoval(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.CompleteDelegatorRemoval(&_IPoSValidatorManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.CompleteEndDelegation(&_IPoSValidatorManager.TransactOpts, delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) CompleteDelegatorRemoval(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.CompleteDelegatorRemoval(&_IPoSValidatorManager.TransactOpts, delegationID, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitializeEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "forceInitializeEndDelegation", delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitiateDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "forceInitiateDelegatorRemoval", delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndDelegation(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateDelegatorRemoval(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndDelegation(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateDelegatorRemoval(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "forceInitializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitiateDelegatorRemoval0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "forceInitiateDelegatorRemoval0", delegationID, includeUptimeProof, messageIndex, recipientAddress) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndDelegation0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateDelegatorRemoval0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndDelegation0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateDelegatorRemoval0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "forceInitializeEndValidation", validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitiateValidatorRemoval(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "forceInitiateValidatorRemoval", validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndValidation(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateValidatorRemoval(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndValidation(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateValidatorRemoval(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "forceInitializeEndValidation0", validationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitiateValidatorRemoval0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "forceInitiateValidatorRemoval0", validationID, includeUptimeProof, messageIndex, recipientAddress) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndValidation0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateValidatorRemoval0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndValidation0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateValidatorRemoval0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitializeEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "initializeEndDelegation", delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitiateDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "initiateDelegatorRemoval", delegationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndDelegation(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateDelegatorRemoval(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndDelegation(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateDelegatorRemoval(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "initializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitiateDelegatorRemoval0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "initiateDelegatorRemoval0", delegationID, includeUptimeProof, messageIndex, recipientAddress) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndDelegation0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateDelegatorRemoval0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndDelegation0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateDelegatorRemoval0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitiateValidatorRemoval(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "initiateValidatorRemoval", validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndValidation(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateValidatorRemoval(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndValidation(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateValidatorRemoval(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "initializeEndValidation0", validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitiateValidatorRemoval0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "initiateValidatorRemoval0", validationID, includeUptimeProof, messageIndex, recipientAddress) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndValidation0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateValidatorRemoval0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndValidation0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateValidatorRemoval0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ResendUpdateDelegation(opts *bind.TransactOpts, delegationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "resendUpdateDelegation", delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ResendUpdateDelegator(opts *bind.TransactOpts, delegationID [32]byte) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "resendUpdateDelegator", delegationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) ResendUpdateDelegation(delegationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ResendUpdateDelegation(&_IPoSValidatorManager.TransactOpts, delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) ResendUpdateDelegator(delegationID [32]byte) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ResendUpdateDelegator(&_IPoSValidatorManager.TransactOpts, delegationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ResendUpdateDelegation(delegationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ResendUpdateDelegation(&_IPoSValidatorManager.TransactOpts, delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ResendUpdateDelegator(delegationID [32]byte) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ResendUpdateDelegator(&_IPoSValidatorManager.TransactOpts, delegationID) } // SubmitUptimeProof is a paid mutator transaction binding the contract method 0x25e1c776. @@ -527,9 +527,9 @@ func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) SubmitUptime return _IPoSValidatorManager.Contract.SubmitUptimeProof(&_IPoSValidatorManager.TransactOpts, validationID, messageIndex) } -// IPoSValidatorManagerDelegationEndedIterator is returned from FilterDelegationEnded and is used to iterate over the raw logs and unpacked data for DelegationEnded events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegationEndedIterator struct { - Event *IPoSValidatorManagerDelegationEnded // Event containing the contract specifics and raw log +// IPoSValidatorManagerCompletedDelegatorRegistrationIterator is returned from FilterCompletedDelegatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedDelegatorRegistration events raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerCompletedDelegatorRegistrationIterator struct { + Event *IPoSValidatorManagerCompletedDelegatorRegistration // 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 @@ -543,7 +543,7 @@ type IPoSValidatorManagerDelegationEndedIterator struct { // 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 *IPoSValidatorManagerDelegationEndedIterator) Next() bool { +func (it *IPoSValidatorManagerCompletedDelegatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -552,7 +552,7 @@ func (it *IPoSValidatorManagerDelegationEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegationEnded) + it.Event = new(IPoSValidatorManagerCompletedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -567,7 +567,7 @@ func (it *IPoSValidatorManagerDelegationEndedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegationEnded) + it.Event = new(IPoSValidatorManagerCompletedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -583,30 +583,29 @@ func (it *IPoSValidatorManagerDelegationEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IPoSValidatorManagerDelegationEndedIterator) Error() error { +func (it *IPoSValidatorManagerCompletedDelegatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IPoSValidatorManagerDelegationEndedIterator) Close() error { +func (it *IPoSValidatorManagerCompletedDelegatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// IPoSValidatorManagerDelegationEnded represents a DelegationEnded event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegationEnded struct { +// IPoSValidatorManagerCompletedDelegatorRegistration represents a CompletedDelegatorRegistration event raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerCompletedDelegatorRegistration struct { DelegationID [32]byte ValidationID [32]byte - Rewards *big.Int - Fees *big.Int + StartTime *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterDelegationEnded is a free log retrieval operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// FilterCompletedDelegatorRegistration is a free log retrieval operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegationEnded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*IPoSValidatorManagerDelegationEndedIterator, error) { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterCompletedDelegatorRegistration(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*IPoSValidatorManagerCompletedDelegatorRegistrationIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -617,17 +616,17 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegationEnded validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "CompletedDelegatorRegistration", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &IPoSValidatorManagerDelegationEndedIterator{contract: _IPoSValidatorManager.contract, event: "DelegationEnded", logs: logs, sub: sub}, nil + return &IPoSValidatorManagerCompletedDelegatorRegistrationIterator{contract: _IPoSValidatorManager.contract, event: "CompletedDelegatorRegistration", logs: logs, sub: sub}, nil } -// WatchDelegationEnded is a free log subscription operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// WatchCompletedDelegatorRegistration is a free log subscription operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegationEnded(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerDelegationEnded, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchCompletedDelegatorRegistration(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerCompletedDelegatorRegistration, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -638,7 +637,7 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegationEnded( validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "CompletedDelegatorRegistration", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -648,8 +647,8 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegationEnded( select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IPoSValidatorManagerDelegationEnded) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { + event := new(IPoSValidatorManagerCompletedDelegatorRegistration) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "CompletedDelegatorRegistration", log); err != nil { return err } event.Raw = log @@ -670,21 +669,21 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegationEnded( }), nil } -// ParseDelegationEnded is a log parse operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// ParseCompletedDelegatorRegistration is a log parse operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseDelegationEnded(log types.Log) (*IPoSValidatorManagerDelegationEnded, error) { - event := new(IPoSValidatorManagerDelegationEnded) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseCompletedDelegatorRegistration(log types.Log) (*IPoSValidatorManagerCompletedDelegatorRegistration, error) { + event := new(IPoSValidatorManagerCompletedDelegatorRegistration) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "CompletedDelegatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IPoSValidatorManagerDelegatorAddedIterator is returned from FilterDelegatorAdded and is used to iterate over the raw logs and unpacked data for DelegatorAdded events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegatorAddedIterator struct { - Event *IPoSValidatorManagerDelegatorAdded // Event containing the contract specifics and raw log +// IPoSValidatorManagerCompletedDelegatorRemovalIterator is returned from FilterCompletedDelegatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedDelegatorRemoval events raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerCompletedDelegatorRemovalIterator struct { + Event *IPoSValidatorManagerCompletedDelegatorRemoval // 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 @@ -698,7 +697,7 @@ type IPoSValidatorManagerDelegatorAddedIterator struct { // 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 *IPoSValidatorManagerDelegatorAddedIterator) Next() bool { +func (it *IPoSValidatorManagerCompletedDelegatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -707,7 +706,7 @@ func (it *IPoSValidatorManagerDelegatorAddedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegatorAdded) + it.Event = new(IPoSValidatorManagerCompletedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -722,7 +721,7 @@ func (it *IPoSValidatorManagerDelegatorAddedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegatorAdded) + it.Event = new(IPoSValidatorManagerCompletedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -738,33 +737,30 @@ func (it *IPoSValidatorManagerDelegatorAddedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IPoSValidatorManagerDelegatorAddedIterator) Error() error { +func (it *IPoSValidatorManagerCompletedDelegatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IPoSValidatorManagerDelegatorAddedIterator) Close() error { +func (it *IPoSValidatorManagerCompletedDelegatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// IPoSValidatorManagerDelegatorAdded represents a DelegatorAdded event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegatorAdded struct { - DelegationID [32]byte - ValidationID [32]byte - DelegatorAddress common.Address - Nonce uint64 - ValidatorWeight uint64 - DelegatorWeight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos +// IPoSValidatorManagerCompletedDelegatorRemoval represents a CompletedDelegatorRemoval event raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerCompletedDelegatorRemoval struct { + DelegationID [32]byte + ValidationID [32]byte + Rewards *big.Int + Fees *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorAdded is a free log retrieval operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// FilterCompletedDelegatorRemoval is a free log retrieval operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegatorAdded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*IPoSValidatorManagerDelegatorAddedIterator, error) { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterCompletedDelegatorRemoval(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*IPoSValidatorManagerCompletedDelegatorRemovalIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -774,22 +770,18 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegatorAdded( for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "CompletedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &IPoSValidatorManagerDelegatorAddedIterator{contract: _IPoSValidatorManager.contract, event: "DelegatorAdded", logs: logs, sub: sub}, nil + return &IPoSValidatorManagerCompletedDelegatorRemovalIterator{contract: _IPoSValidatorManager.contract, event: "CompletedDelegatorRemoval", logs: logs, sub: sub}, nil } -// WatchDelegatorAdded is a free log subscription operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// WatchCompletedDelegatorRemoval is a free log subscription operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorAdded(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerDelegatorAdded, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchCompletedDelegatorRemoval(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerCompletedDelegatorRemoval, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -799,12 +791,8 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorAdded(o for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "CompletedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -814,8 +802,8 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorAdded(o select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IPoSValidatorManagerDelegatorAdded) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { + event := new(IPoSValidatorManagerCompletedDelegatorRemoval) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "CompletedDelegatorRemoval", log); err != nil { return err } event.Raw = log @@ -836,21 +824,21 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorAdded(o }), nil } -// ParseDelegatorAdded is a log parse operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// ParseCompletedDelegatorRemoval is a log parse operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseDelegatorAdded(log types.Log) (*IPoSValidatorManagerDelegatorAdded, error) { - event := new(IPoSValidatorManagerDelegatorAdded) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseCompletedDelegatorRemoval(log types.Log) (*IPoSValidatorManagerCompletedDelegatorRemoval, error) { + event := new(IPoSValidatorManagerCompletedDelegatorRemoval) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "CompletedDelegatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IPoSValidatorManagerDelegatorRegisteredIterator is returned from FilterDelegatorRegistered and is used to iterate over the raw logs and unpacked data for DelegatorRegistered events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegatorRegisteredIterator struct { - Event *IPoSValidatorManagerDelegatorRegistered // Event containing the contract specifics and raw log +// IPoSValidatorManagerInitiatedDelegatorRegistrationIterator is returned from FilterInitiatedDelegatorRegistration and is used to iterate over the raw logs and unpacked data for InitiatedDelegatorRegistration events raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerInitiatedDelegatorRegistrationIterator struct { + Event *IPoSValidatorManagerInitiatedDelegatorRegistration // 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 @@ -864,7 +852,7 @@ type IPoSValidatorManagerDelegatorRegisteredIterator struct { // 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 *IPoSValidatorManagerDelegatorRegisteredIterator) Next() bool { +func (it *IPoSValidatorManagerInitiatedDelegatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -873,7 +861,7 @@ func (it *IPoSValidatorManagerDelegatorRegisteredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegatorRegistered) + it.Event = new(IPoSValidatorManagerInitiatedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -888,7 +876,7 @@ func (it *IPoSValidatorManagerDelegatorRegisteredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegatorRegistered) + it.Event = new(IPoSValidatorManagerInitiatedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -904,29 +892,33 @@ func (it *IPoSValidatorManagerDelegatorRegisteredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IPoSValidatorManagerDelegatorRegisteredIterator) Error() error { +func (it *IPoSValidatorManagerInitiatedDelegatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IPoSValidatorManagerDelegatorRegisteredIterator) Close() error { +func (it *IPoSValidatorManagerInitiatedDelegatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// IPoSValidatorManagerDelegatorRegistered represents a DelegatorRegistered event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegatorRegistered struct { - DelegationID [32]byte - ValidationID [32]byte - StartTime *big.Int - Raw types.Log // Blockchain specific contextual infos +// IPoSValidatorManagerInitiatedDelegatorRegistration represents a InitiatedDelegatorRegistration event raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerInitiatedDelegatorRegistration struct { + DelegationID [32]byte + ValidationID [32]byte + DelegatorAddress common.Address + Nonce uint64 + ValidatorWeight uint64 + DelegatorWeight uint64 + SetWeightMessageID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRegistered is a free log retrieval operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// FilterInitiatedDelegatorRegistration is a free log retrieval operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegatorRegistered(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*IPoSValidatorManagerDelegatorRegisteredIterator, error) { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterInitiatedDelegatorRegistration(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*IPoSValidatorManagerInitiatedDelegatorRegistrationIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -936,18 +928,22 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegatorRegist for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) + } - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "InitiatedDelegatorRegistration", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } - return &IPoSValidatorManagerDelegatorRegisteredIterator{contract: _IPoSValidatorManager.contract, event: "DelegatorRegistered", logs: logs, sub: sub}, nil + return &IPoSValidatorManagerInitiatedDelegatorRegistrationIterator{contract: _IPoSValidatorManager.contract, event: "InitiatedDelegatorRegistration", logs: logs, sub: sub}, nil } -// WatchDelegatorRegistered is a free log subscription operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// WatchInitiatedDelegatorRegistration is a free log subscription operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRegistered(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerDelegatorRegistered, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchInitiatedDelegatorRegistration(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerInitiatedDelegatorRegistration, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -957,8 +953,12 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRegiste for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) + } - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "InitiatedDelegatorRegistration", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } @@ -968,8 +968,8 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRegiste select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IPoSValidatorManagerDelegatorRegistered) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { + event := new(IPoSValidatorManagerInitiatedDelegatorRegistration) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "InitiatedDelegatorRegistration", log); err != nil { return err } event.Raw = log @@ -990,21 +990,21 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRegiste }), nil } -// ParseDelegatorRegistered is a log parse operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// ParseInitiatedDelegatorRegistration is a log parse operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseDelegatorRegistered(log types.Log) (*IPoSValidatorManagerDelegatorRegistered, error) { - event := new(IPoSValidatorManagerDelegatorRegistered) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseInitiatedDelegatorRegistration(log types.Log) (*IPoSValidatorManagerInitiatedDelegatorRegistration, error) { + event := new(IPoSValidatorManagerInitiatedDelegatorRegistration) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "InitiatedDelegatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IPoSValidatorManagerDelegatorRemovalInitializedIterator is returned from FilterDelegatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for DelegatorRemovalInitialized events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegatorRemovalInitializedIterator struct { - Event *IPoSValidatorManagerDelegatorRemovalInitialized // Event containing the contract specifics and raw log +// IPoSValidatorManagerInitiatedDelegatorRemovalIterator is returned from FilterInitiatedDelegatorRemoval and is used to iterate over the raw logs and unpacked data for InitiatedDelegatorRemoval events raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerInitiatedDelegatorRemovalIterator struct { + Event *IPoSValidatorManagerInitiatedDelegatorRemoval // 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 @@ -1018,7 +1018,7 @@ type IPoSValidatorManagerDelegatorRemovalInitializedIterator struct { // 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 *IPoSValidatorManagerDelegatorRemovalInitializedIterator) Next() bool { +func (it *IPoSValidatorManagerInitiatedDelegatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1027,7 +1027,7 @@ func (it *IPoSValidatorManagerDelegatorRemovalInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegatorRemovalInitialized) + it.Event = new(IPoSValidatorManagerInitiatedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1042,7 +1042,7 @@ func (it *IPoSValidatorManagerDelegatorRemovalInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegatorRemovalInitialized) + it.Event = new(IPoSValidatorManagerInitiatedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1058,28 +1058,28 @@ func (it *IPoSValidatorManagerDelegatorRemovalInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IPoSValidatorManagerDelegatorRemovalInitializedIterator) Error() error { +func (it *IPoSValidatorManagerInitiatedDelegatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IPoSValidatorManagerDelegatorRemovalInitializedIterator) Close() error { +func (it *IPoSValidatorManagerInitiatedDelegatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// IPoSValidatorManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegatorRemovalInitialized struct { +// IPoSValidatorManagerInitiatedDelegatorRemoval represents a InitiatedDelegatorRemoval event raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerInitiatedDelegatorRemoval struct { DelegationID [32]byte ValidationID [32]byte Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// FilterInitiatedDelegatorRemoval is a free log retrieval operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*IPoSValidatorManagerDelegatorRemovalInitializedIterator, error) { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterInitiatedDelegatorRemoval(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*IPoSValidatorManagerInitiatedDelegatorRemovalIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1090,17 +1090,17 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegatorRemova validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "InitiatedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &IPoSValidatorManagerDelegatorRemovalInitializedIterator{contract: _IPoSValidatorManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil + return &IPoSValidatorManagerInitiatedDelegatorRemovalIterator{contract: _IPoSValidatorManager.contract, event: "InitiatedDelegatorRemoval", logs: logs, sub: sub}, nil } -// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// WatchInitiatedDelegatorRemoval is a free log subscription operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerDelegatorRemovalInitialized, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchInitiatedDelegatorRemoval(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerInitiatedDelegatorRemoval, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1111,7 +1111,7 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRemoval validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "InitiatedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1121,8 +1121,8 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRemoval select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IPoSValidatorManagerDelegatorRemovalInitialized) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { + event := new(IPoSValidatorManagerInitiatedDelegatorRemoval) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "InitiatedDelegatorRemoval", log); err != nil { return err } event.Raw = log @@ -1143,12 +1143,12 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRemoval }), nil } -// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// ParseInitiatedDelegatorRemoval is a log parse operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseDelegatorRemovalInitialized(log types.Log) (*IPoSValidatorManagerDelegatorRemovalInitialized, error) { - event := new(IPoSValidatorManagerDelegatorRemovalInitialized) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseInitiatedDelegatorRemoval(log types.Log) (*IPoSValidatorManagerInitiatedDelegatorRemoval, error) { + event := new(IPoSValidatorManagerInitiatedDelegatorRemoval) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "InitiatedDelegatorRemoval", log); err != nil { return nil, err } event.Raw = log diff --git a/tests/flows/validator-manager/erc20_token_staking.go b/tests/flows/validator-manager/erc20_token_staking.go index a561a9dc3..c9ec90346 100644 --- a/tests/flows/validator-manager/erc20_token_staking.go +++ b/tests/flows/validator-manager/erc20_token_staking.go @@ -142,7 +142,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) { ) initRegistrationEvent, err := utils.GetEventFromLogs( receipt.Logs, - erc20StakingManager.ParseDelegatorAdded, + erc20StakingManager.ParseInitiatedDelegatorRegistration, ) Expect(err).Should(BeNil()) delegationID = initRegistrationEvent.DelegationID @@ -185,7 +185,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) { // Check that the validator is registered in the staking contract registrationEvent, err := utils.GetEventFromLogs( receipt.Logs, - erc20StakingManager.ParseDelegatorRegistered, + erc20StakingManager.ParseCompletedDelegatorRegistration, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -207,7 +207,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) { ) delegatorRemovalEvent, err := utils.GetEventFromLogs( receipt.Logs, - erc20StakingManager.ParseDelegatorRemovalInitialized, + erc20StakingManager.ParseInitiatedDelegatorRemoval, ) Expect(err).Should(BeNil()) Expect(delegatorRemovalEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -254,7 +254,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) { // Check that the delegator has been delisted from the staking contract registrationEvent, err := utils.GetEventFromLogs( receipt.Logs, - erc20StakingManager.ParseDelegationEnded, + erc20StakingManager.ParseCompletedDelegatorRemoval, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) diff --git a/tests/flows/validator-manager/native_token_staking.go b/tests/flows/validator-manager/native_token_staking.go index 75e209dc9..81f2b1604 100644 --- a/tests/flows/validator-manager/native_token_staking.go +++ b/tests/flows/validator-manager/native_token_staking.go @@ -136,7 +136,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) { ) initRegistrationEvent, err := utils.GetEventFromLogs( receipt.Logs, - nativeStakingManager.ParseDelegatorAdded, + nativeStakingManager.ParseInitiatedDelegatorRegistration, ) Expect(err).Should(BeNil()) delegationID = initRegistrationEvent.DelegationID @@ -179,7 +179,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) { // Check that the validator is registered in the staking contract registrationEvent, err := utils.GetEventFromLogs( receipt.Logs, - nativeStakingManager.ParseDelegatorRegistered, + nativeStakingManager.ParseCompletedDelegatorRegistration, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -200,7 +200,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) { ) delegatorRemovalEvent, err := utils.GetEventFromLogs( receipt.Logs, - nativeStakingManager.ParseDelegatorRemovalInitialized, + nativeStakingManager.ParseInitiatedDelegatorRemoval, ) Expect(err).Should(BeNil()) Expect(delegatorRemovalEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -247,7 +247,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) { // Check that the delegator has been delisted from the staking contract registrationEvent, err := utils.GetEventFromLogs( receipt.Logs, - nativeStakingManager.ParseDelegationEnded, + nativeStakingManager.ParseCompletedDelegatorRemoval, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) diff --git a/tests/flows/validator-manager/poa_to_pos.go b/tests/flows/validator-manager/poa_to_pos.go index 2d98adda1..06299f4cb 100644 --- a/tests/flows/validator-manager/poa_to_pos.go +++ b/tests/flows/validator-manager/poa_to_pos.go @@ -104,13 +104,13 @@ func PoAMigrationToPoS(network *localnetwork.LocalNetwork) { opts, err := bind.NewKeyedTransactorWithChainID(fundedKey, l1AInfo.EVMChainID) Expect(err).Should(BeNil()) - _, err = poaValidatorManager.InitializeValidatorRegistration( + _, err = poaValidatorManager.InitiateValidatorRegistration( opts, - poavalidatormanager.ValidatorRegistrationInput{ - NodeID: nodes[0].NodeID[:], - RegistrationExpiry: uint64(time.Now().Add(24 * time.Hour).Unix()), - BlsPublicKey: nodes[0].NodePoP.PublicKey[:], - }, + nodes[0].NodeID[:], + nodes[0].NodePoP.PublicKey[:], + uint64(time.Now().Add(24*time.Hour).Unix()), + poavalidatormanager.PChainOwner{}, + poavalidatormanager.PChainOwner{}, nodes[0].Weight, ) Expect(err).ShouldNot(BeNil()) diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go index 854ece5ab..99a639709 100644 --- a/tests/utils/validator_manager.go +++ b/tests/utils/validator_manager.go @@ -385,13 +385,13 @@ func InitializeNativeValidatorRegistration( Expect(err).Should(BeNil()) opts.Value = stakeAmount - tx, err := stakingManager.InitializeValidatorRegistration( + tx, err := stakingManager.InitiateValidatorRegistration( opts, - nativetokenstakingmanager.ValidatorRegistrationInput{ - NodeID: node.NodeID[:], - RegistrationExpiry: expiry, - BlsPublicKey: node.NodePoP.PublicKey[:], - }, + node.NodeID[:], + node.NodePoP.PublicKey[:], + expiry, + nativetokenstakingmanager.PChainOwner{}, + nativetokenstakingmanager.PChainOwner{}, DefaultMinDelegateFeeBips, DefaultMinStakeDurationSeconds, ) @@ -431,13 +431,13 @@ func InitializeERC20ValidatorRegistration( opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.InitializeValidatorRegistration( + tx, err := stakingManager.InitiateValidatorRegistration( opts, - erc20tokenstakingmanager.ValidatorRegistrationInput{ - NodeID: node.NodeID[:], - RegistrationExpiry: expiry, - BlsPublicKey: node.NodePoP.PublicKey[:], - }, + node.NodeID[:], + node.NodePoP.PublicKey[:], + expiry, + erc20tokenstakingmanager.PChainOwner{}, + erc20tokenstakingmanager.PChainOwner{}, DefaultMinDelegateFeeBips, DefaultMinStakeDurationSeconds, stakeAmount, @@ -467,13 +467,13 @@ func InitializePoAValidatorRegistration( opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) - tx, err := validatorManager.InitializeValidatorRegistration( + tx, err := validatorManager.InitiateValidatorRegistration( opts, - poavalidatormanager.ValidatorRegistrationInput{ - NodeID: node.NodeID[:], - RegistrationExpiry: expiry, - BlsPublicKey: node.NodePoP.PublicKey[:], - }, + node.NodeID[:], + node.NodePoP.PublicKey[:], + expiry, + poavalidatormanager.PChainOwner{}, + poavalidatormanager.PChainOwner{}, node.Weight, ) Expect(err).Should(BeNil()) @@ -774,11 +774,12 @@ func InitializeEndPoSValidation( ) *types.Receipt { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.InitializeEndValidation0( + tx, err := stakingManager.InitiateValidatorRemoval0( opts, validationID, false, 0, + common.Address{}, ) Expect(err).Should(BeNil()) return WaitForTransactionSuccess(ctx, l1, tx.Hash()) @@ -793,7 +794,7 @@ func ForceInitializeEndPoSValidation( ) *types.Receipt { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.ForceInitializeEndValidation( + tx, err := stakingManager.ForceInitiateValidatorRemoval( opts, validationID, false, @@ -851,7 +852,7 @@ func ForceInitializeEndPoSValidationWithUptime( abi, err := iposvalidatormanager.IPoSValidatorManagerMetaData.GetAbi() Expect(err).Should(BeNil()) - callData, err := abi.Pack("forceInitializeEndValidation", validationID, true, uint32(0)) + callData, err := abi.Pack("forceInitiateValidatorRemoval", validationID, true, uint32(0)) Expect(err).Should(BeNil()) return CallWarpReceiver( ctx, @@ -883,7 +884,7 @@ func InitializeEndPoSValidationWithUptime( abi, err := iposvalidatormanager.IPoSValidatorManagerMetaData.GetAbi() Expect(err).Should(BeNil()) - callData, err := abi.Pack("initializeEndValidation", validationID, true, uint32(0)) + callData, err := abi.Pack("initiateValidatorRemoval", validationID, true, uint32(0)) Expect(err).Should(BeNil()) return CallWarpReceiver( ctx, @@ -904,7 +905,7 @@ func InitializeEndPoAValidation( ) *types.Receipt { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) - tx, err := validatorManager.InitializeEndValidation( + tx, err := validatorManager.InitiateValidatorRemoval( opts, validationID, ) @@ -955,7 +956,7 @@ func InitializeERC20DelegatorRegistration( opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.InitializeDelegatorRegistration( + tx, err := stakingManager.InitiateDelegatorRegistration( opts, validationID, delegationAmount, @@ -964,7 +965,7 @@ func InitializeERC20DelegatorRegistration( receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash()) _, err = GetEventFromLogs( receipt.Logs, - stakingManager.ParseDelegatorAdded, + stakingManager.ParseInitiatedDelegatorRegistration, ) Expect(err).Should(BeNil()) return receipt @@ -983,7 +984,7 @@ func InitializeNativeDelegatorRegistration( Expect(err).Should(BeNil()) opts.Value = delegationAmount - tx, err := stakingManager.InitializeDelegatorRegistration( + tx, err := stakingManager.InitiateDelegatorRegistration( opts, validationID, ) @@ -991,7 +992,7 @@ func InitializeNativeDelegatorRegistration( receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash()) _, err = GetEventFromLogs( receipt.Logs, - stakingManager.ParseDelegatorAdded, + stakingManager.ParseInitiatedDelegatorRegistration, ) Expect(err).Should(BeNil()) return receipt @@ -1031,7 +1032,7 @@ func InitializeEndDelegation( WaitMinStakeDuration(ctx, l1, senderKey) opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.ForceInitializeEndDelegation( + tx, err := stakingManager.ForceInitiateDelegatorRemoval( opts, delegationID, false, From b386f448e8adc4426ae84a92e4b34682daf546ce Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Thu, 16 Jan 2025 09:30:16 -0600 Subject: [PATCH 6/6] fix function name --- tests/utils/validator_manager.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go index 99a639709..7876b8670 100644 --- a/tests/utils/validator_manager.go +++ b/tests/utils/validator_manager.go @@ -1052,7 +1052,7 @@ func CompleteEndDelegation( ) *types.Receipt { abi, err := iposvalidatormanager.IPoSValidatorManagerMetaData.GetAbi() Expect(err).Should(BeNil()) - callData, err := abi.Pack("completeEndDelegation", delegationID, uint32(0)) + callData, err := abi.Pack("completeDelegatorRemoval", delegationID, uint32(0)) Expect(err).Should(BeNil()) return CallWarpReceiver( ctx,